12/10/2010

交叉编译

最近朋友给一块arm板子,让我帮忙交叉编译无线网卡驱动,因为交叉编译都没有,所以从交叉编译器到编译驱动一条龙服务啊,简单记录一下。

1) 首先交叉编译器,我用crosstool-ng交叉编译工具,还比较顺利,事先查清楚板子上arm指令集,gcc 和
glibc的版本号就可以了,arm指令集可以到这里对照着查:http://en.wikipedia.org/wiki/ARM_architecture

2) 然后编译内核,make ARCH=arm menuconfig,作一下简单配置,记得选上 wireless,接下来编译内核:make
ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- (记得export PATH
并指定刚刚编出来的交叉编译起)

如果编译过程中出现如下错误:

arm-9tdmi-linux-gnu-ld: no machine record defined

可能是 binutils 版本导致的,可以暂时注释 文件中下面两行:

ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support")
ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined")


3) 最后准备编译无线网卡驱动,由于我机器上的内核是2.6.36,而板子上的是2.6.29.4,所以采用如下方法编译:

make KLIB=/usr/src/linux-2.6.29.4 KLIB_BUILD=/usr/src/linux-2.6.29.4