我正在研究为 ARM Linux 交叉编译内核模块。
我的主机上的内核版本是 3.13.0-24generic,而目标上的内核版本是 3.10.17-r0
现在我实际上需要下载和安装哪些内核源代码或标头,在哪里?我从 kernel.org 下载了 linux-3.10.17tar.bz2 并解压。在驱动程序中有一个 Makefile,根据此站点,我需要将这些行附加到其中,然后运行 make:
ARCH=arm
CROSS_COMPILE=arm-poky-linux-gnueabi-gcc
KDIR := /lib/modules/'uname -r'/build
obj-m +=test5.o
all :
make -C ${KDIR}/build M=$(PWD) modules
clean :
make -C ${KDIR}/build M=$(PWD) clean
但我必须用什么来代替uname -r
呢?因为这会给我主机的内核版本。但我的目标版本不同。文件夹在哪里/lib/modules/3.6.9
? CROSS_COMPILE 和 ARCH 均已设置。
答案1
为了交叉编译 Linux 内核模块,Makefile 应该知道目标机器上的 Linux 内核,在您的例子中是“KDIR”。将KDIR配置为目标机Linux内核存放的地址。
Makefile 需要注意的第二件事是 CROSS_COMPILER 和 ARCH。您不需要在 Makefile 中配置这些。运行时只需将它们作为参数传递make
:
make CROSS_COMPILE=arm-poky-linux-gnueabi- ARCH=arm