转自:http://hy907539007.blog.163.com/blog/static/1888458622013749441629/
最近在接触android的东西,硬件用的是cortex-A8三星s5pv210。在编译linux内核和android固件时都要用到交叉编译器。虽然硬件厂家已经提供了交叉编译器,但是*疼的我还是想搞清楚这些工具链是怎么生成的。 在网上查了一下原来现在已经有现成的工具生成了,这就是crosstool-ng,它是一个自动下载、编译、生成交叉编译器的工具。当然在http://www.crosstool-ng.org;会下到最新的版本,我就是下的最新的版本1.18.0(2013.8.4)。 下下来以后就安装了,网上这些几乎都有安装就是大概说一下: 1,首先要安装必备的工具包: sudo apt-get install autoconf automake libtool libexpat1-dev libncurses5-dev bison flex patch curl cvs texinfo build-essential subversion gawk python-dev gperf g++ aria2 网上很多都说要安装gcj,但是你会发现装不上,呵呵,实验证明有没有无所谓,网上查了一下这是和gcc、java有关的东西,要装的话也可以;只要sudo apt-get install gcj-;就会把所有包列出来。 2,下面就是安装crosstool-ng了1)配置 ./configure --prefix=/home/heyuan/arm/install 这是安装目录
2)编译 make
3)安装 make install
网上很多人都用sudo,我认为不应该,因为我用了sudo以后menuconfig风格是不一样的,最后还没编译通过,(不知道是不是上边工具加载问题导致menucongif风格不一样)。
然后就在 crosstool安装目录旁边建立一个文件夹build
mkdir -p /home/heyuan/arm/build
chmod 777 build (最好使用自己的用户来创建这些文件夹,不然会出现权限不够导致的N多问题,反正不用sudo的尽量不要用,这是我总结的经验,很多软件就是因为用了sudo一般用户一运行就出错,root就可以,就是这个原因)。
然后再把刚刚crosstool解压文件里的samples里关于arm有好几种配置
arm-unknown-eabi是基于裸板跑的,也就是无操作系统
arm-unknown-Linux-gnueabi 是基于linux的
arm-unknown-linux-uclibcgnueabi 这个应该能看出来了,是为uclinux用的。
arm-iphone-linux-gnueabi 这个是给iphone用的???没用过,不知道,哈哈。
arm-cortex_a8-linux-gnueabi 从名字上看是为cortex-a8用的。
在这我用的是cortex-A8的:把相应的文件里的文件拷贝到build文件中(这就不用敲代码了吧)。
然后把里面的 crosstool-config 复制为.config
然后就运行crosstool了;在刚刚安装目录下有一个bin文件里面有一个ct-gn
#/home/heyuan/arm/install/bin/ct-ng menuconfig
网上很多人都要去改工作目录和生产目录,我只能说不要改,我反正一改就悲剧了,编译错误,所以最好不要改。
已下载好的源码包路径和交叉编译器的安装路径。(http://blog.chinaunix.NET/u1/34474/showart_2198589.html) Paths and misc options ---> (${HOME}/src) Local tarballs directory 保存源码包路径 (${HOME}/x-tools/${CT_TARGET}) Prefix directory 交叉编译器的安装路径 这两个最好不要改只要在你的家目录建一个src就可以了,其他不要管
Target options这是重点要修改的地方。
Target Architecture(arm) 这个不用管,已经是arm了。
Default instruction set mode (arm) 这个也不管,也已经是arm了。
--------------------------------------
Target options ---> 这个才是要改的,根据自己的芯片来改,这个就不用说了,都知道芯片是什么了什么架构呀,内核呀都知道了。 *** Target optimisations *** (armv4t) Architecture level (arm9tdmi) Emit assembly for CPU (arm920t) Tune for CPU
还有就是C compiler --->里的内容,还是先不改(我改了就编译不了,应该是每个版本,需要的各个工具版本是有要求的,有待实验)。
还有就是Operating System --->linux kernel版本了,这个可以自己改,我直接是3.7的最新版。
改完后保存退出。
#/home/heyuan/arm/install/bin/ct-ng build;
40分钟后就编译完了。
最后还要把生的工具链连接一下,让他们都是arm-linux-开头的,写一个批处理的脚本建立一个文件autolin.sh
#!/bin/bash # # main # if [ $# -lt 1 ] ; then echo "default path: ./" BIN_PATH=./ else BIN_PATH=$1 fi if [ ! -d $1 ] ; then echo "path error" exit fi cd $BIN_PATH SRC=`ls | awk '{print $1}'` for i in $SRC ; do if [ "$i" != "autoln.sh" ] ; then #echo $i TARGET=`echo $i | sed 's/arm-cortex_a8-linux-gnueabi/arm-linux/g' ` echo $TARGET ln -s $i $TARGET fi