Есть ли способ заставить Splint или аналогичную статическую проверку работать с модулями ядра Linux?
Вопрос
Я скомпилировал ( без предупреждений ) hello-5.c
пример из "Руководство по программированию модуля ядра Linux" и когда я попытался это изменить, я получил следующую ошибку:
insmod: error inserting 'hello-5.ko': -1 Unknown symbol in module
Я думал, что попробую splint, чтобы посмотреть, не обнаружилось ли в нем каких-либо очевидных ошибок, но когда я запустил его, я получил множество предупреждений из заголовков ядра, пока его не вырвало при попытке синтаксического анализа asm/types.h
anon@anon:~/kernel-source/lkmpg$ splint -I/lib/modules/$(uname -r)/build/include hello-5.c
Splint 3.1.1 --- 03 Nov 2006
( ... lots of warnings ... )
/lib/modules/2.6.24-24-insp8600/build/include/asm/types.h:13:24: Parse Error:
Suspect missing struct or union keyword: __signed__ :
unsigned short int. (For help on parse errors, see splint -help
parseerrors.)
*** Cannot continue.
Итак, на самом деле есть два вопроса:
- Как мне исправить ошибку insmod?
- Как мне заставить spint хорошо работать с заголовками ядра?
Решение 2
Я не уверен, но это может быть то, что я ищу:
splint-Discussion Использование Splint в модулях ядра Linux р>
Он предоставляет настраиваемый файл make, который помогает шине пройти через определенные расширения gcc, используемые в ядре.
Другие советы
Смешное.В данный момент я сижу в офисе и пытаюсь запустить статическую проверку драйверов ядра Linux :)
Статические средства проверки с трудом обрабатывают ядро Linux, поскольку диалект C, используемый в коде ядра, шире, чем тот, который обычно понимается как "язык Си".Иногда случается, что C-интерфейс средства проверки просто не может анализировать постоянно меняющиеся конструкции, используемые в коде.
Насколько я мог понять, вы просто используете устаревшую версию средства проверки (03 Nov 2006
), но ваша версия ядра тоже устарела, и я не знаю, какая из них старше.Что может помочь, так это обновление средства проверки до его текущей версии или использование обновленного интерфейса C, если средство проверки поддерживает его переключение.
Более того, если checker может обрабатывать ядро Linux, этот факт сразу же становится предметом хвастовства на домашней странице checker.Итак, выберите тот, который утверждает это, и проведите проверку.