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

StackOverflow https://stackoverflow.com/questions/1620671

Вопрос

Я скомпилировал ( без предупреждений ) 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.

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

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

Решение 2

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top