5

我想在我的 x86 ubuntu linux 上交叉编译一个 ARM 内核模块。我已经下载了内核源代码(linux 2.6.26,因为目标 ARM 机器正在运行这个 linux 版本)。我很容易得到手臂交叉编译器。如你看到的。

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*

现在,为了交叉编译适用于 ARM 的 linux 2.6.26 的内核模块,我必须在原始工作 Makefile 中进行哪些更改?

linux源和linux头源有什么区别?每次我编译一些内核的东西时,我都会看到这些,但我仍然不明白。

我用谷歌搜索了一些文章,但它不会帮助...

4

1 回答 1

3

我建议您在使用 hello_module 之前构建内核源代码。这将确认您的 arm 交叉编译器安装成功。

很多时候,工具链问题可以追溯到需要这些:

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
于 2013-01-09T13:52:53.303 回答