ubuntu 12.0.4环境下crosstool-ng 1.18.0编译ARM交叉编译器(Cortex-A8)
转自:http://hy907539007.blog.163.com/blog/static/1888458622013749441629/
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