这个Makefile也可以应用于交叉编译情况,由KERNELDIR指定内核目录即可,不过,这个内核必须是适合某个平台的,即交叉编译器必须在内核顶层的Makefile中指定(内核移植时,这一步骤似乎是最先进行的)。如这里指定ARM平台的内核,路径为/home/latelee/my2440/linux-2.6.37.3。
下面看看make的过程并查看生成的模块文件属性:
[root@latelee hello-multi]# make
Compiling ...
make[1]: Entering directory `/home/latelee/my2440/linux-2.6.37.3'
CC [M] /home/latelee/driver-test/hello-multi/come.o
CC [M] /home/latelee/driver-test/hello-multi/on.o
LD [M] /home/latelee/driver-test/hello-multi/GotoHell.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/latelee/driver-test/hello-multi/GotoHell.mod.o
LD [M] /home/latelee/driver-test/hello-multi/GotoHell.ko
make[1]: Leaving directory `/home/latelee/my2440/linux-2.6.37.3'
[Job done!]
[root@latelee hello-multi]# file GotoHell.ko
GotoHell.ko: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped
[root@latelee hello-multi]# insmod GotoHell.ko
insmod: error inserting 'GotoHell.ko': -1 Invalid module format
提示信息中红色部分表明这个模块已经是ARM平台的模块了。在x86上是不能加载的。
下面附上完整的Makefile:
注:文中显示的黑框及各种颜色,仅仅是想重现一下在shell下面的显示情况。