LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1915|回复: 21

有使用crossdev的么?该如何升级用crossdev构建出来的cross工具链?

[复制链接]
发表于 2009-7-30 19:00:56 | 显示全部楼层 |阅读模式
最近在用crossdev搭建arm-unknown-linux-gnu开发平台,现在已经构建好了 cross toolchain
使用的命令是:
# emerge crossdev
# crossdev -S -s4 --target arm-unknown-linux-gnu
具体安装的packages有:
cross-arm-unknown-linux-gnu/glibc-2.9_p20081201-r2 (/usr/arm-unknown-linux-gnu)
cross-arm-unknown-linux-gnu/linux-headers-2.6.30-r1 (/usr/arm-unknown-linux-gnu)

cross-arm-unknown-linux-gnu/binutils-2.19.1-r1 (/usr/i686-pc-linux-gnu/arm-unknown-linux-gnu)
cross-arm-unknown-linux-gnu/gcc-4.4.1 (/usr/i686-pc-linux-gnu/arm-unknown-linux-gnu)

然后就进行 Cross-Compiling With Portage这一步了

  1. 5.c. Environment Setup
  2. SYSROOT/etc/make.conf
  3. SYSROOT/etc/make.globals
  4. SYSROOT/etc/make.profile
复制代码

这几步系统都已经设置好,make.conf文件的内容为:
CHOST=arm-unknown-linux-gnu
CBUILD=i686-pc-linux-gnu
ARCH=arm
HOSTCC=i686-pc-linux-gnu-gcc
E_MACHINE=EM_ARM
ROOT=/usr/${CHOST}/
ACCEPT_KEYWORDS="arm ~arm"
USE="${ARCH} zlib bindist make-symlinks minimal"
#MARCH_TUNE="-march=armv4t -mtune=arm9tdmi"     #arm-softfloat-linux-uclibc
#MARCH_TUNE="-march=armv5t -mtune=xscale"       #armv5teb-softfloat-linux-gnueabi
CFLAGS="-Os -pipe ${MARCH_TUNE} -fomit-frame-pointer -I${ROOT}usr/include/ -I${ROOT}include/"
CXXFLAGS="${CFLAGS}"
LDFLAGS="-L${ROOT}lib -L${ROOT}usr/lib"
FEATURES="-collision-protect sandbox buildpkg noman noinfo nodoc"
# Be sure we dont overwrite pkgs from another repo..
PKGDIR=${ROOT}packages/
PORTAGE_TMPDIR=${ROOT}tmp/
ELIBC="glibc"
PKG_CONFIG_PATH="${ROOT}usr/lib/pkgconfig/"
#PORTDIR_OVERLAY="/usr/portage/local/"
LIBDIR_${ARCH}="lib"
LIBDIR_amd64=lib64
UCLIBC_CPU_DEFAULT="GENERIC_ARM"
MAKEOPTS=-j2
GENTOO_MIRRORS="ftp://ftp.iij.ad.jp/pub/linux/gentoo/ "


/usr/arm-unknown-linux-gnu/etc/make.profile
-> /usr/portage/profiles/embedded

这些都没有修改,只是添加了个SYSROOT环境变量
SYSROOT=/usr/arm-unknown-linux-gnu

然后:

  1. export ac_cv_func_calloc_0_nonnull=yes
  2. export ac_cv_func_malloc_0_nonnull=yes
  3. export gl_cv_func_malloc_0_nonnull=yes
  4. export ac_cv_func_realloc_0_nonnull=yes
  5. export ac_cv_func_memcmp_working=yes
  6. export ac_cv_func_strnlen_working=yes
复制代码
 楼主| 发表于 2009-7-30 19:07:07 | 显示全部楼层
再添加了[color="Red"]xmerge和[color="red"]arm-unknown-linux-gnu-pkg-config两个脚本,并将其拷贝到/usr/local/bin目录

至此,就可以为arm编译系统了

1.# xmerge -av gentoo-sources
回复 支持 反对

使用道具 举报

发表于 2009-7-30 19:50:57 | 显示全部楼层
用了2年多了

cross distcc试了没
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-30 20:08:24 | 显示全部楼层
没有用cross distcc

编译好了busybox,正在编译sys-libs/ncurses-5.7-r1,但是卡死在这里
DESTDIR=/usr/arm-unknown-linux-gnu/tmp/portage/sys-libs/ncurses-5.7-r1/image/ \
        prefix=/usr \
        exec_prefix=/usr \
        bindir=/usr/bin \
        top_srcdir=/usr/arm-unknown-linux-gnu/tmp/portage/sys-libs/ncurses-5.7-r1/work/ncurses-5.7 \
        srcdir=/usr/arm-unknown-linux-gnu/tmp/portage/sys-libs/ncurses-5.7-r1/work/ncurses-5.7/misc \
        datadir=/usr/share \
        ticdir=/usr/share/terminfo \
        source=terminfo.tmp \
        THIS_CC="arm-unknown-linux-gnu-gcc" \
        THAT_CC="i686-pc-linux-gnu-gcc" \
        /bin/sh ./run_tic.sh
** Building terminfo database, please wait...
Running tic to install /usr/arm-unknown-linux-gnu/tmp/portage/sys-libs/ncurses-5.7-r1/image//usr/share/terminfo ...

        You may see messages regarding extended capabilities, e.g., AX.
        These are extended terminal capabilities which are compiled
        using
                tic -x
        If you have ncurses 4.2 applications, you should read the INSTALL
        document, and install the terminfo without the -x option.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-30 20:30:18 | 显示全部楼层
查看了下ebuild文件 发现ncurses-5.7-r1还是~arm分支
赶紧修改make.conf文件,将
ACCEPT_KEYWORDS="arm ~arm"

修改为
ACCEPT_KEYWORDS="arm"

即OK 现在已经编译通过
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-30 21:17:55 | 显示全部楼层
在编译内核前会安装三个软件包:
sys-apps/busybox
sys-libs/ncurses
sys-devel/make-3.81

怎么保证在编译内核的时候使用的是刚刚编译好的make的呢?

——————————————————————————————————————————————————

另外,在编译好了内核,该怎么进一步构建系统呢?
是否是参照LFS来安装一系列的软件包来搭建一个基本的系统,然后将构建好的系统安装到arm平台上去?
回复 支持 反对

使用道具 举报

发表于 2009-7-30 21:57:27 | 显示全部楼层
一般来说,每个不同的嵌入式硬件平台都会有对应的发行版。那个发行版本身会带完整的教程编译调试工具链,最好就是用这个。没有必要折腾 Gentoo 的 crossdev。尽管我也曾经尝试过。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-30 22:18:18 | 显示全部楼层
Post by robinswan;2011052
一般来说,每个不同的嵌入式硬件平台都会有对应的发行版。那个发行版本身会带完整的教程编译调试工具链,最好就是用这个。没有必要折腾 Gentoo 的 crossdev。尽管我也曾经尝试过。
多谢~~
但是为什么还有crosstool、OpenEmbedded、eldk这些项目诞生呢?

再有,譬如s3c2440,对应的发行版是哪个呢?还请指教~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-31 00:21:14 | 显示全部楼层
发现自己走弯路了
gentoo有直接提供arm版本的stage3,这样如果arm平台性能够强劲,可以直接使用stage来构建arm-linux系统

如果由于arm平台性能的问题,可以通过crossdev构建的crosstool来编译内核、bootloader、文件系统,然后把这些烧写到flash中去,再弄好必要的驱动,最后进行应用程序的开发

不知这样的理解可对?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-31 21:02:55 | 显示全部楼层
crossdev 的-P貌似没有用处
我使用crossdev -P -av还是没有反应的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表