我正在研究为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_COMPILE
和ARCH
都已设置。
答案 0 :(得分:3)
由于Linux没有stable binary API,因此您需要在主机上为您的目标交叉编译(或下载预编译)匹配版本的Linux。主机的内核版本不相关。
在主机上提供目标构建后,您可以通过
构建模块make -C kernel_build_dir M=`pwd` ARCH=arm CROSS_COMPILE=<...> modules
在该模块的目录下。