跨编译 Linux 内核模块

4
我正在研究如何为ARM linux交叉编译一个内核模块,我已经安装了工具链。但是我从各种how-to中没有完全理解的地方。 我要构建的模块是"gadgetfs"。
我的主机上的内核版本是"3.5.0-34-generic",而目标机上的内核版本是"3.6.9-0.1"。
现在我实际上需要下载和安装哪些内核源或头文件,以及在哪里找到它们呢? 我从"kernel.org"下载并提取了"linux-3.6.9.tar.bz2"。 在"drivers/usb/gadget/"中有一个"Makefile",根据这个网站,我需要将这些行添加到它中,然后运行"make":
KDIR := /lib/modules/`uname -r`/build
PWD := `pwd`
obj-m := dummy_hcd.o gadgetfs.o
default: 
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

但是我需要用什么替换uname -r?因为这会给我我的主机内核版本。但我的目标版本不同。 /lib/modules/3.6.9文件夹在哪里? CROSS_COMPILEARCH都已设置。

1个回答

3

您需要在主机上交叉编译(或下载预编译的)与目标匹配版本的Linux,并进行正确的配置,因为Linux没有稳定的二进制API。主机的内核版本不相关。

在主机上拥有目标构建后,您可以通过以下方式构建模块:

make -C kernel_build_dir M=`pwd` ARCH=arm CROSS_COMPILE=<...> modules

在该模块的目录下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接