本文摘自《嵌入式Linux驱动模板精讲与项目实践》一书中的“开发与调试技巧”。
Linux的强大威力就在于有很多开源项目可以使用,通常很多需求可以通过寻找相关的开源模块做为快速解决方案。要把这些开源模块应用到嵌入式中,其中一个关键点就是要使用交叉编译工具对开源项目进行交叉编译。
根据具体情况,下载的开源项目在组织上有很多情况,在此对各种情况进行归类介绍。
1. 下载的开源软件包找不到Makefile
对于这种开源包通常是采用configure的方式组织的,那么第一步就是使用软件包中的configure生成Makefile文件。例如移植module-init-tools-3.2:
CC=arm-linux-gcc ./configure --prefix=/my_depmod --without-gun-ld --host=arm-linux
在./ configure之前指定交叉编译工具,指定安装路径为/my_depmod,后面选项是CPU相关的。各个选项可以通过./configure –help查看。
第二步,生成Makefile之后,打开Makefile就可以看到:
prefix = /home/xlong.lin/workspace/sample/module-init-tools-3.2/my_depmode
CC = arm-linux-gcc
已经自动生成了对应的交叉编译Makefile。
第三步,Make进行编译。
第四步,make install安装。在指定的安装路径下得到最终需要的目标文件或者是库。
第五步,为了确认,使用file查看所得到的文件是否是嵌入式CPU中可以执行的。
2. 有些源码包下载解压之后有Makefile的,同时里面有CC选项的,这种情况比较简单,只要修改CC等选项即可。
例如,移植goahead到单板上,解压之后Makefile中修改:
CC = arm-linux-gcc
AR = arm-linux-ar
然后Make编译即可。
如果Makefile中有CROSS_COMPILE也同样修改交叉编译工具即可。
3. 有Makefile但是找不到CC或者CROSS_COMPILE的情况。
这种情况采用 make CROSS= arm-linux-进行编译。
以上只对常见情况的交叉编译进行总结,无论哪种情况编译出来的都需要使用file工具确认是否交叉编译成功,是否可以在相应的CPU上执行。善于使用开源软件进行交叉编译移植可以快速的实现很多功能。