免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2266 | 回复: 6
打印 上一主题 下一主题

如何建立 arm 的交叉编译环境? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-06 19:28 |只看该作者 |倒序浏览
越详细越好。

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
2 [报告]
发表于 2012-02-06 19:32 |只看该作者
没做过嵌入式.
一般开发板都会提供编译工具的,和安装一个软件没有太大区别
如果自己创建,建议看clfs

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2012-02-06 19:37 |只看该作者
俺想把 freebsd 移植到手机上去,需要这方面的知识啊。

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
4 [报告]
发表于 2012-02-06 19:38 |只看该作者
你查查有没有freebsd的arm版本呗

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2012-02-06 19:46 |只看该作者
回复 4# chenyx


    俺是想在本子上建立这个咚咚的交叉编译环境啊。

论坛徽章:
0
6 [报告]
发表于 2012-02-06 19:47 |只看该作者
snow888 发表于 2012-02-06 19:28
越详细越好。

用crosstool-ng建立arm-linux交叉工具链
看看上面这个:

修改记录:
2009-12-31 * 解决工具链编绎的文件执行遇到段错误(Segment fault),在arm720t(指令集:armv4t),Hello world测试通过( ^ ^)
* 换用最新的crosstool-ng  (1.5.2)
2009-06-04 解决crosstool-ng在Debian,Ubuntu上的编绎问题,测试使用crosstool-ng试编绎arm-linux 4.3.2 工具链

crosstool-ng是新的用来建立交叉工具链的工具,它是crosstool的替换者.
使用crosstool最多只能编译gcc 4.1.1 glibc 2.x的版本.
而crosstool-ng一直保持着更新,现在最新能够建立 gcc 4.3.2版本 glibc 2.9版本...
在使用低于4.1.1的版本编译2.6.29 kernel时,会出现

    include/linux/compiler-gcc4.h:7:3: error: #error Your version of gcc miscompiles the __weak directive
    include/linux/compiler-gcc4.h:7 :如下
    /* GCC 4.1.[01] miscompiles __weak */
    #if __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ <= 1
    # error Your version of gcc miscompiles the __weak directive
    #endif

所以使用crosstool-ng建立一个新的工具链(gcc 4.3.2 glibc 2.9),以支持对最新kernel编绎.

测试环境:

    Debian Linux 2.6.18-6-686
    Ubuntu Linux 2.6.28-14     (Ubuntu 9.0.4)

1.crosstool-ng的安装

    cd /tmp
    mkdir crosstool-ng
    wget http://ymorin.is-a-geek.org/download/cr ... .2.tar.bz2
    tar jxvf crosstool-ng-1.5.2.tar.bz2
    cd /tmp/crosstool-ng-1.5.2
    ./configure --prefix=/opt/crosstool-ng
    make
    make install
    echo "PATH=$PATH:/opt/crosstool-ng/bin" >> ~/.bashrc
    source ~/.bashrc
    ct-ng help
             ## ^ ^ 安装成功

2.安装必要工具包

    #安装java开发包
    sudo apt-get install gcj
    #安装cvs
    sudo apt-get install cvs
    #切换mawk
    sudo apt-get install gawk
    cd /usr/bin
    sudo mv mawk mawk.bak
    sudo ln -s gawk mawk

    Ubuntu 9.0.4 请先安装下 termcap 库   参考本文 错误与解决 4.. .

3.crosstool-ng使用范例
   本范例记录了使用crosstool-ng编绎arm-unknown-linux-gnueabi工具链的过程

    cd /tmp/crosstool-ng
    mkdir build_toolchain

    mkdir ~/src
    生成默认配置文件:
    ct-ng arm-unknown-linux-gnueabi
    也可以这样子:
    cp /opt/crosstool-ng/lib/ct-ng-1.5.2/samples/arm-unknown-linux-gnueabi/crosstool.config .config

    ct-ng menuconfig

    根据实际情况修改这些配置(我测试的是一款arm7 SOC,其指令集为armv4t)

    指定指令集

    Target options  --->

    Architecture level

    填入 armv4t
    修改工具链安装路径
    Paths and misc options  --->
    Prefix directory()
    填入/opt/arm/4.3.2/${CT_TARGET}

  修改操作系统选项,禁止内核头文件检测
  Operating System  --->
[ ]     Check installed headers

  退出保存配置文件,手动修改内核头文件的安装版本,以修正段错误:
vim .config

  修改kernel的安装版本
CT_KERNEL_VERSION="2.6.18"

  修改libc中配置的内核头文件的安装版本至2.6.18
CT_LIBC_GLIBC_MIN_KERNEL="2.6.18"
  保存退出(注意若使用ct-ng menuconfig进行配置,上面的手动修改信息会丢失,需再次从头配置)

PS:如果你编绎还是失败了或者测试失败了,那可以参考一下,我测试通过的配置文件: crosstool-ng for arm720t 配置文件


-----------我是分隔线 2010 快乐 -----------------------------------

libc库已经换用git来管理源码(sources.redhat.com),下面两个包
    glibc-cvs-2.9.tar.gz
    glibc-ports-cvs-2.9.tar.gz
将无法从cvs中取出,临时可以这样子解决:
cd /tmp/
wget ftp://sourceware.org/pub/glibc/releases ... .9.tar.bz2
tar jxvf glibc-2.9.tar.bz2
mv glibc-2.9 glibc-cvs-2.9
tar zcvf glibc-cvs-2.9.tar.gz glibc-cvs-2.9

wget ftp://sourceware.org/pub/glibc/releases ... .9.tar.bz2
tar jxvf glibc-ports-2.9.tar.bz2
mv glibc-ports-2.9 glibc-ports-cvs-2.9
tar zcvf glibc-ports-cvs-2.9.tar.gz glibc-ports-cvs-2.9

复制这两个*.gz包至 crosstool-ng设置的包下载路径(本例中设置的是:~/src)

--------------------------------------------------------------------------------------

    开始编绎(在我的机子上耗时一小时)
    ct-ng build.4(用太多线程,很耗系统资源)

4.为工具链增加新链接
  

    cd /opt/arm/4.3.2/arm-unknown-linux-gnueabi/bin
    ./autoln.sh

autoln.sh是一个脚本,用来自动链接arm-unknown-linux-gnueabi的工具...
文件名:autoln.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-unknown-linux-gnueabi/arm-linux/g' `
echo $TARGET
ln -s $i $TARGET
fi
done
  
错误与解决
1.[ERROR] Missing: 'i486-linux-gnu-gcj' or 'i486-linux-gnu-gcj' or 'gcj' : either needed!
   解决:sudo apt-get install gcj
2.
[ERROR]     Build failed in step 'Retrieving needed toolchain components' tarballs'
[ERROR]     Error happened in '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
[ERROR]           called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' at line # 471 in function 'CT_GetCVS'
[ERROR]           called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/build/libc/glibc.sh' at line # 31 in function 'do_libc_get'
[ERROR]           called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 449 in function 'main'
[ERROR]     Look at '/home/star/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error.
[ERROR] (elapsed: 33:29.56)
[33:30] / make[1]: *** [build] 错误 127
make: *** [build.4] 错误 2
解决: sudo apt-get install cvs
3.
[INFO ] Installing C library headers
[EXTRA]     Configuring C library
[EXTRA]     Installing C library headers
[ERROR]     make[3]: *** [/home/star/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi//sys-root/usr/include/gnu/lib-names.h] Error 1
[ERROR]     make[2]: *** [install-headers] Error 2
[ERROR]     Build failed in step 'Installing C library headers'
[ERROR]     Error happened in '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
[ERROR]           called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/build/libc/glibc.sh' at line # 185 in function 'do_libc_headers'
[ERROR]           called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 494 in function 'main'
[ERROR]     Look at '/home/star/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error.
[ERROR] (elapsed: 36:41.91)
[36:42] / make[1]: *** [build] 错误 2
make: *** [build.4] 错误 2
解决:查看build.log
[ALL ]     /usr/bin/install: cannot stat `/tmp/crosstool-ng/targets/arm-unknown-linux-gnueabi/build/build-libc-headers/gnu/li
b-names.h': No such file or directory
但在这之前也发生了一个error,但crosstool-ng并没有报错
[ALL ]     mawk: scripts/gen-sorted.awk: line 19: regular expression compile failed (bad class -- [], [^] or [)
[ALL ]     /[^
[ALL ]     mawk: scripts/gen-sorted.awk: line 19: syntax error at or near ]
[ALL ]     mawk: scripts/gen-sorted.awk: line 19: runaway regular expression /, "", subd ...
OK,在gen-sorted.awk第19行,出错,这是一个简单的错误,缺少了转义符
查找一个看有没有类似的  
  
   cd /tmp/crosstool-ng/targets/src/glibc-cvs-2.9/scripts 
 sed '/\^\//p' gen-sorted.awk -n
 输出的则是存在语法错误的语句
 可以直接用
 sed -i 's/\^\//\^\\\//g' gen-sorted.awk
   这种方法是不完善的,后面的还是会出现错误。
 网上搜了下,需要用/usr/bin/gawk 替换/usr/bin/mawk,即
   sudo apt-get install gawk
   cd /usr/bin
   sudo mv mawk mawk.bak
   sudo ln -s gawk mawk
4.
[INFO ] =================================================================
[INFO ] Installing C library
[EXTRA]     Configuring C library
[WARN ]     Removing "-pipe" for use with glibc>=2.6
[EXTRA]     Building C library
[ERROR]     make[4]: *** [/tmp/crosstool-ng/targets/arm-unknown-linux-gnueabi/build/build-libc/elf/ld.so] Error 2
[ERROR]     make[3]: *** [elf/subdir_lib] Error 2
[ERROR]     make[2]: *** [all] Error 2
[ERROR]     Build failed in step 'Installing C library'
[ERROR]     Error happened in '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
[ERROR]           called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/build/libc/glibc.sh' at line # 504 in function 'do_libc'
[ERROR]           called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 494 in function 'main'
[ERROR]     Look at '/home/star/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error.
[ERROR] (elapsed: 32:05.76)
[32:06] / make[1]: *** [build] 错误 2
make: *** [build.4] 错误 2
解决:
   sudo apt-get install gawk
   cd /usr/bin
   sudo mv mawk mawk.bak
   sudo ln -s gawk mawk
5.
49567 [ERROR]    configure: error: no termcap library found
49568 [ERROR]    make[3]: *** [configure-gdb] Error 1
49569 [ALL ]    make[3]: Leaving directory `/opt/build_toolchain/targets/arm-unknown-linux-gnueabi/build/build-gdb-cross'
49570 [ERROR]    make[2]: *** [all] Error 2
49571 [ALL ]    make[2]: Leaving directory `/opt/build_toolchain/targets/arm-unknown-linux-gnueabi/build/build-gdb-cross'
49572 [ERROR]    Build failed in step 'Installing cross-gdb'
49573 [ERROR]    Error happened in '/usr/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
49574 [ERROR]          called from '/usr/lib/ct-ng-1.4.1/scripts/build/debug/300-gdb.sh' at line # 126 in function 'do_debug      _gdb_build'
49575 [ERROR]          called from '/usr/lib/ct-ng-1.4.1/scripts/build/debug.sh' at line # 35 in function 'do_debug'
49576 [ERROR]          called from '/usr/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 494 in function 'main'
49577 [ERROR]    Look at '/opt/arm/4.3.2/arm-unknown-linux-gnueabi/build.log' for more info on this error.
49578 [ERROR] (elapsed: 72:30.97)

解决:
这个问题我只在ubuntu 9.0.4中遇到过...缺少了termcap 库,但我在源里又没有搜到termcap相关的库(似乎是被其它库替换了,termcap这东西的确很古老)
cd /tmp
wget ftp://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz
tar zxvf termcap-1.3.1.tar.gz
cd termcap-1.3.1
./configure --prefix=/usr
make
make install
(又需要从头编译工具链了 …… )

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015年迎新春徽章
日期:2015-03-04 09:57:09
7 [报告]
发表于 2012-02-06 22:57 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP