我想在我的x86 ubuntu linux上交叉编译一个ARM内核模块。 我已经下了内核源码(从目标ARM机器运行这个Linux版本以来的Linux 2.6.26)。 和我交叉arm交叉编译器。 如你看到的。
root@declspec-desktop:/var/www/module_test# arm-linux-gnueabi- arm-linux-gnueabi-addr2line arm-linux-gnueabi-cpp-4.5 arm-linux-gnueabi-gcov-4.5 arm-linux-gnueabi-ld.gold arm-linux-gnueabi-ranlib arm-linux-gnueabi-strip arm-linux-gnueabi-ar arm-linux-gnueabi-elfedit arm-linux-gnueabi-gprof arm-linux-gnueabi-nm arm-linux-gnueabi-readelf arm-linux-gnueabi-as arm-linux-gnueabi-gcc arm-linux-gnueabi-ld arm-linux-gnueabi-objcopy arm-linux-gnueabi-size arm-linux-gnueabi-c++filt arm-linux-gnueabi-gcc-4.5 arm-linux-gnueabi-ld.bfd arm-linux-gnueabi-objdump arm-linux-gnueabi-strings
以下是我的内核模块(hello_module.ko)编译(为我的x86机器)的Makefile,这工作正常。
obj-m += hello_module.o KDIR := /lib/modules/$(shell uname -r)/build #PWD:=$(shell pwd) all: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: rm -rf *.o *.ko *.mod.* .c* .t*
现在,在我的原始工作Makefile中,为了交叉编译Linux 2.6.26 for ARM的内核模块,我有什么改变?
什么是Linux源和Linux头源的区别? 每次我编译一些内核的东西,我都看到了这些,但是我仍然没有明白。
我search了一些文章,但它不会帮助…
我建议在移植到hello_module之前构建内核源代码。 这将确认你的手臂交叉编译器安装确定。
很多时候,工具链问题追溯到需要这些:
export CROSS_COMPILE=arm-linux-gnueabi- export ARCH=arm
另外,PATH需要在交叉工具链安装时更新,所以可以从正在执行的make中找到工具。 CodeSourcery安装可以为你做,但PATH更新只有在注销/登录后才能生效。
我不清楚你是如何得到你的控制台输出上面。 如果问题仍然存在,我会建议做这样的事情,并发表结果作为评论。
printenv | grep PATH whereis arm-linux-gnueabi-gcc which arm-linux-gnueabi-gcc