我正在研究为 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
都设置好了。
最佳答案
由于 Linux 没有 stable binary API,因此您需要在主机上使用正确的配置为您的目标交叉编译(或下载预编译的)Linux 匹配版本。 .主机的内核版本不相关。
在您的主机上获得目标构建后,您可以通过以下方式构建模块
make -C kernel_build_dir M=`pwd` ARCH=arm CROSS_COMPILE=<...> modules
在该模块的目录下。
关于linux-kernel - 交叉编译 Linux 内核模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20969523/