我在为树莓派编译内核模块时遇到问题。我想使用树莓派本身编译一个“hello world”内核模块。
我正在使用 raspbian wheezy 3.6.11+。
我尝试按照 http://elinux.org/RPi_Kernel_Compilation 中的说明进行操作.
这是我正在使用的 Makefile:
obj-m += hello-1.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
这里是 hello-1.c 的源代码:
/*
* hello-1.c - The simplest kernel module.
*/
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
这是我尝试制作项目时得到的结果:
root@raspberrypi:/home/pi/hello-module# make
make -C /lib/modules/3.6.11+/build M=/home/pi/hello-module modules
make: *** /lib/modules/3.6.11+/build: No such file or directory. Stop.
make: *** [all] Error 2
我尝试在/lib/modules/3.6.11+ 创建构建目录
make -C /lib/modules/3.6.11+/build M=/home/pi/hello-module modules
make[1]: Entering directory `/lib/modules/3.6.11+/build'
make[1]: *** No rule to make target `modules'. Stop.
make[1]: Leaving directory `/lib/modules/3.6.11+/build'
make: *** [all] Error 2
我安装了 GNU Make 3.81 和 gcc (Debian 4.6.3-14+rpi1) 4.6.3。我还使用
安装了 linux 源sudo apt-get install linux-source
关于我可以做些什么来编译它有什么想法吗?
最佳答案
以下是我用来构建 Hello World kernel module 的步骤在 Raspbian 上。
执行
sudo rpi-update
见 https://github.com/Hexxeh/rpi-update有关详细信息
rpi-更新
。您必须使用最新的固件和关联的内核才能执行下一步。安装并运行
rpi-source
以安装构建您正在运行的最新内核的源代码。这将为您正在运行的内核在/lib/modules
中创建正确的条目。注意:您无需成为 root 用户即可运行此脚本,但是该脚本将使用sudo
执行某些任务,并且在脚本执行期间将请求 root 密码。安装
rpi-source
的说明可以在 https://github.com/notro/rpi-source/wiki 找到
执行这些步骤后,您应该能够制作
Hello World 内核模块。
johnma@raspberrypi ~/HelloWorld $ make
make -C /lib/modules/3.12.19+/build M=/home/johnma/HelloWorld modules
make[1]: Entering directory `/home/johnma/linux-c3db7205bcd8988cf7c185e50c8849542554b1f5'
CC [M] /home/johnma/HelloWorld/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/johnma/HelloWorld/hello.mod.o
LD [M] /home/johnma/HelloWorld/hello.ko
make[1]: Leaving directory `/home/johnma/linux-c3db7205bcd8988cf7c185e50c8849542554b1f5'
johnma@raspberrypi ~/HelloWorld $ sudo insmod hello.ko
johnma@raspberrypi ~/HelloWorld $ tail -1 /var/log/syslog
May 15 13:45:39 raspberrypi kernel: [59789.169461] Hello World :)
johnma@raspberrypi ~/HelloWorld $ sudo rmmod hello.ko
johnma@raspberrypi ~/HelloWorld $ tail -1 /var/log/syslog
May 15 13:46:10 raspberrypi kernel: [59819.503503] Goodbye World!
关于linux - 如何为树莓派编译内核模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20167411/