交叉编译Linux内核模块

时间:2014-01-07 10:41:15

标签: linux-kernel arm cross-compiling kernel-module

我正在研究为ARM linux交叉编译内核模块。我安装了工具链。 但是我从各种各样的方法中得到了一些东西。 我想要构建的模块是gadgetfs

我的主机上的内核版本是3.5.0-34-generic  目标是3.6.9-0.1

现在我需要下载和安装哪些内核源代码或头文件,以及在哪里? 我从linux-3.6.9.tar.bz2下载了kernel.org并将其解压缩。 在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 个答案:

答案 0 :(得分:3)

由于Linux没有stable binary API,因此您需要在主机上为您的目标交叉编译(或下载预编译)匹配版本的Linux。主机的内核版本不相关。

在主机上提供目标构建后,您可以通过

构建模块
make -C kernel_build_dir M=`pwd` ARCH=arm CROSS_COMPILE=<...> modules

在该模块的目录下。