2009-10-25 3 views
3

я составил (без предупреждения) hello-5.c примера из «The Linux Kernel Module Programming Guide», и когда я попытался insmod, я получил следующее сообщение об ошибке:Есть ли способ получить Splint или аналогичную статическую проверку для работы с модулями ядра Linux?

insmod: error inserting 'hello-5.ko': -1 Unknown symbol in module 

Я думал, что я хотел бы попробовать щепу, чтобы увидеть, если он пришел с каким-либо очевидные ошибки, но когда я запустил его, я получил убивание предупреждения от заголовков ядра, пока он не barfed пытается разобрать asm/types.h

[email protected]:~/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. 

Так на самом деле есть два вопроса:

  1. Как исправить ошибку insmod?
  2. Как получить шину для игры с заголовками ядра?

ответ

1

Я не уверен, но это может быть то, что я ищу:

splint-discuss Using Splint on Linux kernel modules

предоставляет пользовательский файл сделать, чтобы помочь лубок получить через GCC конкретных расширений, используемых в ядре.

1

Смешные. В настоящее время я сижу в офисе и пытаюсь запустить статическую проверку на драйверах Linux Kernel :)

Статические проверки имеют сложную обработку ядра linux, потому что диалект C, используемый в коде ядра, шире, чем обычно понимается как «C-язык». Иногда бывает, что C-интерфейс проверки не может анализировать постоянно изменяющиеся конструкции, используемые в коде.

Как я понял, вы просто используете устаревшую версию проверки (03 Nov 2006), но ваша версия ядра тоже устарела, и я не знаю, что старше. Что может помочь, это обновление проверки до текущей версии или использование современного C-интерфейса, если контролер поддерживает его переключение.

Кроме того, если контролер может обрабатывать ядро ​​Linux, то факт, что на главной странице шашки становится хвастаться, становится хвалить. Итак, выберите тот, который утверждает это, и сделайте свои чеки.

+0

Ядро и шина поставляются вместе как часть Ubuntu 8.04, поэтому они, вероятно, должны быть «правы» друг для друга, я думаю. –

+0

Взгляните на ссылку, которую я только что нашел, используя шину на модулях ядра. http://www.cs.virginia.edu/pipermail/splint-discuss/2005-January/000531.html –

+0

@ Robert S. Barnes, да, эта ссылка иллюстрирует то, о чем я говорю: отсутствие поддержки диалекта CCC GCC , Возможно, это решение, которое вы искали. –

Смежные вопросы