【发布时间】:2013-12-08 15:56:44
【问题描述】:
我在为树莓派编译内核模块时遇到问题。我想用树莓派本身编译一个“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
对我可以做些什么来编译它有什么想法吗?
【问题讨论】:
-
在 Raspberry 上,modules 目录中没有“build”子目录。我可以在我的 RPI 上确认这一点。因此,问题是:使用模块构建所需的数据创建它的“正确”方法是什么?
-
既然您已经得到了一些具体的答案,这里简要概述一下问题的原因。您正在使用 Raspberry Pi 基金会的内核(Raspbian 中的
raspberrypi-firmware包),它不提供制作内核模块所需的头文件。您可以使用rpi-source 工具安装它们。或者改用Raspian的内核+头文件(在/etc/apt/sources.lst中的wheezy main contrib ...之后添加一个firmware条目,更新包,删除raspberrypi-firmware,安装raspberrypi-firmware-nokernel。 -
question and the answer 中的精彩说明我编译成a script
标签: linux makefile raspberry-pi kernel-module raspbian