Скомпилировать модуль ядра Linux (lincan) - PullRequest
0 голосов
/ 10 января 2011

Я использую Ubuntu 10.10 - 2.6.35.23-generic

Я хочу скомпилировать модуль lincan (http://sourceforge.net/projects/ocera/),, но он не работает так, как я хочу ... Это моя первая компиляция модуля ядра. Я сделал это:

Сначала распакуйте lincan-sources в мой домашний каталог. Затем выполняется "make" с таким выводом:

make -C /home/x/can/lincan-0.3.4/src SOURCES_DIR=/home/x/can/lincan-0.3.4/src default ;   make -C /home/x/can/lincan-0.3.4/utils SOURCES_DIR=/home/x/can/lincan-0.3.4/utils default ; 
awk: cannot open /lib/modules/2.6.35-23-generic/build/include/linux/autoconf.h (No such file or directory)
awk: cannot open /lib/modules/2.6.35-23-generic/build/include/linux/autoconf.h (No such file or directory)
grep: /lib/modules/2.6.35-23-generic/build/include/linux/utsrelease.h: No such file or directory
make[1]: Betrete Verzeichnis '/home/x/can/lincan-0.3.4/src'
Makefile:216: /lib/modules/2.6.35-23-generic/build/Rules.make: No such file or directory
make[1]: *** Keine Regel, um »/lib/modules/2.6.35-23-generic/build/Rules.make« zu erstellen.  Schluss.
make[1]: Verlasse Verzeichnis '/home/x/can/lincan-0.3.4/src'
make[1]: Betrete Verzeichnis '/home/x/can/lincan-0.3.4/utils'
cc -I../include -O2 -Wall   -c -o rxtx.o rxtx.c
rxtx.c: In function ‘main’:
rxtx.c:49: warning: format not a string literal and no format arguments
rxtx.c:73: warning: format not a string literal and no format arguments
rxtx.c:51: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
rxtx.c:58: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
rxtx.c:62: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
rxtx.c:67: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
rxtx.c:75: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
rxtx.c:81: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
cc   rxtx.o   -o rxtx
cc -I../include -O2 -Wall   -c -o sendburst.o sendburst.c
cc   sendburst.o   -o sendburst
cc -I../include -O2 -Wall   -c -o readburst.o readburst.c
cc   readburst.o   -o readburst
cc -I../include -O2 -Wall   -c -o send.o send.c
send.c: In function ‘main’:
send.c:25: warning: format not a string literal and no format arguments
send.c:27: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
send.c:33: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
send.c:35: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
send.c:40: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
cc   send.o   -o send
cc -I../include -O2 -Wall    can-proxy.c   -o can-proxy
make[1]: Verlasse Verzeichnis '/home/x/can/lincan-0.3.4/utils'

Затем я набираю "make install":

make -C /home/x/can/lincan-0.3.4/src SOURCES_DIR=/home/x/can/lincan-0.3.4/src install ;   make -C /home/x/can/lincan-0.3.4/utils SOURCES_DIR=/home/x/can/lincan-0.3.4/utils install ; 
awk: cannot open /lib/modules/2.6.35-23-generic/build/include/linux/autoconf.h (No such file or directory)
awk: cannot open /lib/modules/2.6.35-23-generic/build/include/linux/autoconf.h (No such file or directory)
grep: /lib/modules/2.6.35-23-generic/build/include/linux/utsrelease.h: No such file or directory
make[1]: Betrete Verzeichnis '/home/x/can/lincan-0.3.4/src'
Makefile:216: /lib/modules/2.6.35-23-generic/build/Rules.make: No such file or directory
make[1]: *** Keine Regel, um »/lib/modules/2.6.35-23-generic/build/Rules.make« zu erstellen.  Schluss.
make[1]: Verlasse Verzeichnis '/home/x/can/lincan-0.3.4/src'
make[1]: Betrete Verzeichnis '/home/x/can/lincan-0.3.4/utils'
echo Nothing to install
Nothing to install
make[1]: Verlasse Verzeichnis '/home/x/can/lincan-0.3.4/utils'

И это ничего не случилось. Я не нахожу модуль ядра. Что я не прав? Почему нет autoconf.h и других файлов? У тебя есть намеки для меня? Спасибо!


Теперь я создал жесткие ссылки для отсутствующих файлов (autoconf.h и utsrelease.h). Они находятся в /usr/src/linux-headers-2.6.35.23-generic/include/generated/

Теперь он компилирует гораздо больше. Это первая ошибка, которая появляется:

In file included from /home/x/can/lincan-0.3.4/src/../include/main.h:38,
                 from /home/x/can/lincan-0.3.4/src/proc.c:37:
/home/x/can/lincan-0.3.4/src/../include/./can_queue.h: In function ‘canque_edge_decref’:
/home/x/can/lincan-0.3.4/src/../include/./can_queue.h:652: error: invalid initializer
/home/x/can/lincan-0.3.4/src/../include/./can_queue.h:652: error: invalid initializer
/home/x/can/lincan-0.3.4/src/../include/./can_queue.h:652: error: incompatible types when assigning to type ‘int’ from type ‘atomic_t’
make[3]: *** [/home/x/can/lincan-0.3.4/src/proc.o] Fehler 1
make[2]: *** [_module_/home/x/can/lincan-0.3.4/src] Fehler 2
make[2]: Verlasse Verzeichnis '/usr/src/linux-headers-2.6.35-23-generic'
make[1]: *** [make_this_module] Fehler 2

Ответы [ 2 ]

1 голос
/ 11 января 2011

Теперь я создал жесткие ссылки для отсутствующих файлов (autoconf.h и utsrelease.h).

Вам необходимо установить пакет, содержащий среду сборки , созданную при сборке ядра, на котором вы работаете.Исходный код, как правило, не имеет смысла (что вам нужно, скажем, с 8139too.c в любом случае, когда вы собираетесь собирать внешний модуль), за исключением заголовков ядра.Я не могу сказать, где находится среда сборки в Debian или его потомках, но в openSUSE будет пакет "kernel-default-devel", например, содержащий utsrelease.h и autoconf.h, а также - через зависимости- требуются статические заголовочные файлы.Таким образом, ищите существующий пакет deb, содержащий это.

0 голосов
/ 03 июня 2017

Пожалуйста, установите предварительные требования для сборки ядра, указанные здесь . Это установит необходимые инструменты для сборки / компиляции модулей ядра.

...