交叉编译linux内核模块

交叉编译linux内核模块

我正在研究为 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

相关内容