Есть ли способ заставить Splint или аналогичную статическую проверку работать с модулями ядра Linux? - PullRequest
3 голосов
/ 25 октября 2009

Я скомпилировал (без предупреждений) пример hello-5.c из " Руководства по программированию модуля ядра Linux ", и когда я попытался выполнить его insmod, я получил следующую ошибку:

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

Я подумал, что попробую сплинт, чтобы увидеть, не возникло ли каких-либо явных ошибок, но когда я запустил его, я получил множество предупреждений от заголовков ядра, пока он не прервался при попытке разобрать 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.

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

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

Ответы [ 2 ]

1 голос
/ 25 октября 2009

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

splint-обсудить Использование Splint в модулях ядра Linux

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

1 голос
/ 25 октября 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...