使用crosstool-ng给韦东山JZ2440制作4.8.2版本交叉编译器

此前遇到一个很好的WIFI音箱项目,打算移植到JZ2440V3上面。但是百问网提供的最高版本的交叉编译器4.3.2是不支持C++11标准的,而项目中却用到了C++0x和C++11的特性,这就意味着WIFI音箱项目无法移植。但我又不肯向现实妥协,所以参考各方资料,制作出了4.8.2版本的交叉编译器。过程比较曲折,但成果显而易见。

随后我用该编译器重做了内核、文件系统,发现无法正常启动,随后在韦老师的帮助下,解决了此问题,详情可参看 :

经过此前的一番折腾,深知过程的不易,同时也在寻找新的解决方案。最近找到了一种简便的方式,现在我就来重做编译器,希望能为新人提供一些参考。

使用到的就是 crosstool-ng ,Crosstool-NG是一个通用的(交叉)工具链制作器。它支持许多架构和组件,并具有简单而强大的menuconfig风格界面。

下面开始正文:

编译环境:

  • Ubuntu 14.04 64Bit Desktop LTS
  • GCC 4.8.4
  • PC平台其他的软件
  • linux-3.4.2.tar.bz2

编译目标:

arm-jz2440-linux-gnueabi 4.8.2工具链


1.下载,解压,配置,安装

mm@realtek:~$
mm@realtek:~$ wget -c http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.20.0.tar.xz
mm@realtek:~$ tar xf crosstool-ng-1.20.0.tar.xz
mm@realtek:~$ cd crosstool-ng-1.20.0
mm@realtek:~/crosstool-ng-1.20.0$ ./configure
mm@realtek:~/crosstool-ng-1.20.0$ make
mm@realtek:~/crosstool-ng-1.20.0$ sudo make install
mm@realtek:~/crosstool-ng-1.20.0$ cd ..
mm@realtek:~$

2.在当前目录下创建三个目录:build用来编译源码,packages 存放已有的源代码或者是下载的源代码,toolchain 存放制作好的编译器

mm@realtek:~$ mkdir build packages toolchain

3.拷贝crosstool-ng提供的配置样例,此后的操作会在.config的基础上进行修改

mm@realtek:~$ cp crosstool-ng-1.20.0/samples/arm-unknown-linux-gnueabi/crosstool.config build/.config

4.唤出图形界面进行配置

mm@realtek:~$ cd build
mm@realtek:~/build$ ct-ng menuconfig

5.主要配置如下:

  • Paths and misc options —>
        (/home/mm/packages) Local tarballs directory    //本地源码包存放路径
        (/home/mm/toolchain) Prefix directory                //生成的编译器的安装位置
  • Target options —>                        //下面这四个是根据S3C2440的芯片属性设置的
        (armv4t)Architecture level
        (arm9tdmi)Emit assembly for CPU
        (arm920t)Tune for CPU
        Floating point: (software (no FPU)) —>
            (X) software (no FPU)
  • Toolchain options —>
        (wheretogo0815@163.com) Toolchain bug URL    //设置编译器bug的反馈地址
        (jz2440) Tuple’s vendor string    //这个会将 arm-unknown-linux-gnueabi 中的unknown 换成jz2440
  • Operating System —>
        Target OS (linux) —>
         [*] custom tarball or directory    //因为第三期视频一直用的都是3.4.2的内核,所以还是维持原状
        (/home/mm/packages/linux-3.4.2.tar.bz2) Path to custom source, tarball or directory    //文件位置
        (3.4.2) Custom Linux version    //内核版本
  • Binary utilities —>
         binutils version (2.22) —>      //选择一个binutils版本,用来生成 ar,ld,readelf等程序
  • C-library —>
        C library (glibc) —>                  //选择glibc或者uClibc,这里我选择glibc
        glibc version (2.18) —>            //选择glibc的版本
  • C compiler —>
        C compiler (gcc) —>                //选择gcc
        gcc version (4.8.2) —>            //选择gcc的版本

还有很多可设置的地方,有兴趣可以尝试一下。

6..因为crosstool-ng-1.20.0提供的内核版本是3.4.x,为了少出问题,还是配置成了第三期视频用的3.4.2.这就需要我们先把内核源码包事先放到/home/mm/packages目录下,我这里直接下载。

mm@realtek:~/build$ wget -O ~/packages/linux-3.4.2.tar.bz2 -c https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.2.tar.bz2

7.开始编译,经过约30~60分钟,不出意外,编译器就制作好了,log信息如下:

mm@realtek:~/build$ ct-ng build
[INFO ]  Performing some trivial sanity checks
[INFO ]  Build started 20170807.201929
[INFO ]  Building environment variables
[EXTRA]  Preparing working directories
[EXTRA]  Installing user-supplied crosstool-NG configuration
[EXTRA]  =================================================================
[EXTRA]  Dumping internal crosstool-NG configuration
[EXTRA]    Building a toolchain for:
[EXTRA]      build  = x86_64-unknown-linux-gnu
[EXTRA]      host   = x86_64-unknown-linux-gnu
[EXTRA]      target = arm-jz2440-linux-gnueabi
[EXTRA]  Dumping internal crosstool-NG configuration: done in 0.07s (at 00:06)
[INFO ]  =================================================================
[INFO ]  Retrieving needed toolchain components' tarballs
[EXTRA]    Using 'linux-custom' from custom location
[INFO ]  Retrieving needed toolchain components' tarballs: done in 0.11s (at 00:06)
[INFO ]  =================================================================
[INFO ]  Extracting and patching toolchain components
[INFO ]  Extracting and patching toolchain components: done in 1.27s (at 00:08)
[INFO ]  =================================================================
[INFO ]  Installing GMP for host
[EXTRA]    Configuring GMP
[EXTRA]    Building GMP
[EXTRA]    Installing GMP
[INFO ]  Installing GMP for host: done in 38.80s (at 00:46)
[INFO ]  =================================================================
[INFO ]  Installing MPFR for host
[EXTRA]    Configuring MPFR
[EXTRA]    Building MPFR
[EXTRA]    Installing MPFR
[INFO ]  Installing MPFR for host: done in 18.14s (at 01:05)
[INFO ]  =================================================================
[INFO ]  Installing ISL for host
[EXTRA]    Configuring ISL
[EXTRA]    Building ISL
[EXTRA]    Installing ISL
[INFO ]  Installing ISL for host: done in 29.02s (at 01:34)
[INFO ]  =================================================================
[INFO ]  Installing CLooG for host
[EXTRA]    Configuring CLooG
[EXTRA]    Building CLooG
[EXTRA]    Installing CLooG
[INFO ]  Installing CLooG for host: done in 6.93s (at 01:41)
[INFO ]  =================================================================
[INFO ]  Installing MPC for host
[EXTRA]    Configuring MPC
[EXTRA]    Building MPC
[EXTRA]    Installing MPC
[INFO ]  Installing MPC for host: done in 7.33s (at 01:48)
[INFO ]  =================================================================
[INFO ]  Installing binutils for host
[EXTRA]    Configuring binutils
[EXTRA]    Building binutils
[EXTRA]    Installing binutils
[INFO ]  Installing binutils for host: done in 60.53s (at 02:48)
[INFO ]  =================================================================
[INFO ]  Installing pass-1 core C compiler
[EXTRA]    Configuring gcc
[EXTRA]    Building gcc
[EXTRA]    Installing gcc
[INFO ]  Installing pass-1 core C compiler: done in 313.08s (at 08:02)
[INFO ]  =================================================================
[INFO ]  Installing kernel headers
[EXTRA]    Installing kernel headers
[EXTRA]    Checking installed headers
[INFO ]  Installing kernel headers: done in 4.94s (at 08:06)
[INFO ]  =================================================================
[INFO ]  Installing C library headers & start files
[EXTRA]    Configuring C library
[EXTRA]    Installing C library headers
[EXTRA]    Installing C library start files
[INFO ]  Installing C library headers & start files: done in 15.00s (at 08:21)
[INFO ]  =================================================================
[INFO ]  Installing pass-2 core C compiler
[EXTRA]    Configuring gcc
[EXTRA]    Building gcc
[EXTRA]    Installing gcc
[INFO ]  Installing pass-2 core C compiler: done in 405.91s (at 15:07)
[INFO ]  =================================================================
[INFO ]  Installing C library
[EXTRA]    Configuring C library
[EXTRA]    Building C library
[EXTRA]    Installing C library
[INFO ]  Installing C library: done in 285.87s (at 19:53)
[INFO ]  =================================================================
[INFO ]  Installing final compiler
[EXTRA]    Configuring gcc
[EXTRA]    Building gcc
[EXTRA]    Installing gcc
[INFO ]  Installing final compiler: done in 482.19s (at 27:56)
[INFO ]  =================================================================
[INFO ]  Installing libelf for the target
[EXTRA]    Configuring libelf
[EXTRA]    Building libelf
[EXTRA]    Installing libelf
[INFO ]  Installing libelf for the target: done in 4.06s (at 28:00)
[INFO ]  =================================================================
[INFO ]  Installing dmalloc
[EXTRA]    Configuring dmalloc
[EXTRA]    Building dmalloc
[EXTRA]    Installing dmalloc
[INFO ]  Installing dmalloc: done in 5.82s (at 28:05)
[INFO ]  =================================================================
[INFO ]  Installing D.U.M.A.
[EXTRA]    Copying sources
[EXTRA]    Building libraries 'libduma.a libduma.so.0.0.0'
[EXTRA]    Installing libraries 'libduma.a libduma.so.0.0.0'
[EXTRA]    Installing shared library link
[EXTRA]    Installing wrapper script
[INFO ]  Installing D.U.M.A.: done in 2.30s (at 28:08)
[INFO ]  =================================================================
[INFO ]  Installing cross-gdb
[EXTRA]    Configuring cross-gdb
[EXTRA]    Building cross-gdb
[EXTRA]    Installing cross-gdb
[EXTRA]    Installing '.gdbinit' template
[INFO ]  Installing cross-gdb: done in 119.94s (at 30:08)
[INFO ]  =================================================================
[INFO ]  Installing native gdb
[EXTRA]    Building static target ncurses
[EXTRA]    Building static target expat
[EXTRA]    Configuring native gdb
[EXTRA]    Building native gdb
[EXTRA]    Installing native gdb
[INFO ]  Installing native gdb: done in 155.79s (at 32:44)
[INFO ]  =================================================================
[INFO ]  Installing gdbserver
[EXTRA]    Configuring gdbserver
[EXTRA]    Building gdbserver
[EXTRA]    Installing gdbserver
[INFO ]  Installing gdbserver: done in 16.76s (at 33:00)
[INFO ]  =================================================================
[INFO ]  Installing ltrace
[EXTRA]    Copying sources to build dir
[EXTRA]    Configuring ltrace
[EXTRA]    Building ltrace
[EXTRA]    Installing ltrace
[INFO ]  Installing ltrace: done in 15.95s (at 33:16)
[INFO ]  =================================================================
[INFO ]  Installing strace
[EXTRA]    Configuring strace
[EXTRA]    Building strace
[EXTRA]    Installing strace
[INFO ]  Installing strace: done in 12.44s (at 33:29)
[INFO ]  =================================================================
[INFO ]  Cleaning-up the toolchain's directory
[INFO ]    Stripping all toolchain executables
[EXTRA]    Installing the populate helper
[EXTRA]    Installing a cross-ldd helper
[EXTRA]    Creating toolchain aliases
[EXTRA]    Removing access to the build system tools
[EXTRA]    Removing installed documentation
[INFO ]  Cleaning-up the toolchain's directory: done in 2.68s (at 33:31)
[INFO ]  Build completed at 20170807.205300
[INFO ]  (elapsed: 33:31.24)
[INFO ]  Finishing installation (may take a few seconds)...
[33:31] /
mm@realtek:~/build$
mm@realtek:~/build$

8.看一下效果

mm@realtek:~/build$ ls -l /home/mm/toolchain
total 580K
dr-xr-xr-x  8 mm mm 4.0K  87 20:53 ./
drwxr-xr-x 23 mm mm 4.0K  87 23:31 ../
dr-xr-xr-x  6 mm mm 4.0K  87 20:47 arm-jz2440-linux-gnueabi/
dr-xr-xr-x  2 mm mm 4.0K  87 20:53 bin/
-r--r--r--  1 mm mm 545K  87 20:53 build.log.bz2
dr-xr-xr-x  3 mm mm 4.0K  87 20:49 include/
dr-xr-xr-x  4 mm mm 4.0K  87 20:49 lib/
dr-xr-xr-x  3 mm mm 4.0K  87 20:47 libexec/
dr-xr-xr-x  4 mm mm 4.0K  87 20:53 share/
mm@realtek:~/build$ cd /home/mm/toolchain/bin
mm@realtek:~/toolchain/bin$ ls
arm-jz2440-linux-gnueabi-addr2line     arm-jz2440-linux-gnueabi-gcc         arm-jz2440-linux-gnueabi-ldd
arm-jz2440-linux-gnueabi-ar            arm-jz2440-linux-gnueabi-gcc-4.8.2   arm-jz2440-linux-gnueabi-nm
arm-jz2440-linux-gnueabi-as            arm-jz2440-linux-gnueabi-gcc-ar      arm-jz2440-linux-gnueabi-objcopy
arm-jz2440-linux-gnueabi-c++           arm-jz2440-linux-gnueabi-gcc-nm      arm-jz2440-linux-gnueabi-objdump
arm-jz2440-linux-gnueabi-cc            arm-jz2440-linux-gnueabi-gcc-ranlib  arm-jz2440-linux-gnueabi-populate
arm-jz2440-linux-gnueabi-c++filt       arm-jz2440-linux-gnueabi-gcov        arm-jz2440-linux-gnueabi-ranlib
arm-jz2440-linux-gnueabi-cpp           arm-jz2440-linux-gnueabi-gdb         arm-jz2440-linux-gnueabi-readelf
arm-jz2440-linux-gnueabi-ct-ng.config  arm-jz2440-linux-gnueabi-gprof       arm-jz2440-linux-gnueabi-size
arm-jz2440-linux-gnueabi-elfedit       arm-jz2440-linux-gnueabi-ld          arm-jz2440-linux-gnueabi-strings
arm-jz2440-linux-gnueabi-g++           arm-jz2440-linux-gnueabi-ld.bfd      arm-jz2440-linux-gnueabi-strip
mm@realtek:~/toolchain/bin$ ./arm-jz2440-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=./arm-jz2440-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/mm/toolchain/libexec/gcc/arm-jz2440-linux-gnueabi/4.8.2/lto-wrapper
Target: arm-jz2440-linux-gnueabi
Configured with: /work/.build/src/gcc-4.8.2/configure --build=x86_64-build_unknown-linux-gnu --host=x86_64-build_
unknown-linux-gnu --target=arm-jz2440-linux-gnueabi --prefix=/home/mm/toolchain --with-sysroot=/home/mm/toolchain/
arm-jz2440-linux-gnueabi/jz2440 --enable-languages=c,c++ --with-arch=armv4t --with-cpu=arm9tdmi --with-tune=arm920t
--with-float=soft --with-pkgversion='crosstool-NG 1.20.0' --with-bugurl=wheretogo0815@163.com --disable-sjlj-excep
tions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-
libquadmath-support --disable-libsanitizer --with-gmp=/work/.build/arm-jz2440-linux-gnueabi/buildtools --with-mpfr=
/work/.build/arm-jz2440-linux-gnueabi/buildtools --with-mpc=/work/.build/arm-jz2440-linux-gnueabi/buildtools --with-
isl=/work/.build/arm-jz2440-linux-gnueabi/buildtools --with-cloog=/work/.build/arm-jz2440-linux-gnueabi/buildtools
--with-libelf=/work/.build/arm-jz2440-linux-gnueabi/buildtools --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,
-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-target-optspace --enable-plugin --disable-nls --with-system-zlib
--disable-multilib --with-local-prefix=/home/mm/toolchain/arm-jz2440-linux-gnueabi/jz2440 --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.8.2 (crosstool-NG 1.20.0)
mm@realtek:~/toolchain/bin$

(完)

需要注意的问题:
编译时需要PC平台的一些软件支持,例如gawk,libexpat1-dev,但是在制作时我也并不知道需要安装哪些,因此我也就不总结需要安装什么了。等到编译出错时,看一下build.log就大致知道该安装什么,有问题,可以留言探讨。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值