Linux kernel 编译Linux内核模块(lincan)

Linux kernel 编译Linux内核模块(lincan),linux-kernel,compilation,kernel-module,can-bus,Linux Kernel,Compilation,Kernel Module,Can Bus,我使用Ubuntu 10.10-2.6.35.23-generic 我想编译lincan模块(http://sourceforge.net/projects/ocera/),但它不像我想要的那样工作。。。这是我第一次编译内核模块。我这样做: 首先将lincan源解压缩到我的主目录。然后使用此输出执行“make”: make -C /home/x/can/lincan-0.3.4/src SOURCES_DIR=/home/x/can/lincan-0.3.4/src default ; ma

我使用Ubuntu 10.10-2.6.35.23-generic

我想编译lincan模块(http://sourceforge.net/projects/ocera/),但它不像我想要的那样工作。。。这是我第一次编译内核模块。我这样做:

首先将lincan源解压缩到我的主目录。然后使用此输出执行“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'
然后我键入“makeinstall”:

什么也没发生。我找不到内核模块。我做错了什么?为什么没有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
现在我为丢失的文件(autoconf.h和utsrelease.h)创建了硬链接


您必须安装包含构建环境的包,该环境是在构建您正在运行的内核时创建的。源代码通常是无意义的(比如说,当您要构建一个外部模块时,您希望8139too.c做什么),除了内核头。我不能说构建环境在Debian或其子系统中位于何处,但在openSUSE中会有一个“内核默认开发”包,例如包含
utsrelease.h
autoconf.h
,以及通过依赖关系所需的静态头文件。因此,请寻找一个预先存在的包含此文件的deb包。

请安装内核构建必备组件,因为这将安装构建/编译内核模块所需的工具。

您可能会在ubuntu网站上有更多的幸运帖子?这不完全正确,ubuntu在linux头文件中包含内核模块构建所需的所有文件-*数据包:;链接的KernelBuild用于构建新内核。在Ubuntu中,它是linux headers-*软件包:或者只是
sudo-apt-get-install-linux headers-generic
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