Buildroot交叉编译器arm920t制作(ubuntu14.04)

版权声明:转载请附带原博主的网址 https://blog.csdn.net/qq_43260665/article/details/89629341

1.下载解压buildroot

zhanghang@ubuntu:~$ cd /opt
zhanghang@ubuntu:/opt$ sudo chmod 777 /opt
[sudo] password for zhanghang: 
zhanghang@ubuntu:/opt$ wget https://buildroot.org/downloads/buildroot-2012.08.tar.bz2
zhanghang@ubuntu:/opt$ ls
buildroot-2012.08.tar.bz2
zhanghang@ubuntu:/opt$ tar -xjf buildroot-2012.08.tar.bz2
zhanghang@ubuntu:/opt$ cd buildroot-2012.08/
zhanghang@ubuntu:/opt/buildroot-2012.08$ ls
board  CHANGES    configs  docs  linux     package  target
boot   Config.in  COPYING  fs    Makefile  support  toolchain
zhanghang@ubuntu:/opt$ export TERM=vt100

2.buildroot配置menuconfig

zhanghang@ubuntu:/opt/buildroot-2012.08$ make menuconfig

选择ARM920t核 ARM小端字节序,使用EABI接口
在这里插入图片描述
修改 Build options —>
在这里插入图片描述
修改 Toolchain —>
在这里插入图片描述
修改 Package Selection for the target —>
Libraries —>
Compression and decompression —>

在这里插入图片描述
修改 Filesystem images —>
在这里插入图片描述
3.buildroot制作交叉编译器:
在make menuconfig后会将修改的配置写到.config文件中,可以通过修改menuconfig和.config来修改make的资源,如Linux内核版本,gcc版本…注意修改menuconfig会改变.config,而修改.config后,只有最近一次make对.config的修改有效。

zhanghang@ubuntu:/opt/buildroot-2012.08$ make

这个过程会比较长,会自动下载很多必要的软件,make开始后,会在当前目录创建dl文件夹,用来放下载的压缩包,由于make自带的下载地址的下载速度可能会比较慢,可以自己先下载好,make时会自动在dl下找到这些压缩包,需要的压缩包如下:

zhanghang@ubuntu:/opt/buildroot-2012.08/dl$ ls
autoconf-2.68.tar.gz     libtool-2.2.10.tar.gz  mpfr-3.1.1.tar.bz2
automake-1.11.5.tar.gz   linux-3.4.8.tar.bz2    uClibc-0.9.33.2.tar.bz2
binutils-2.21.1.tar.bz2     zlib-1.2.7.tar.bz2
busybox-1.20.2.tar.bz2   lzo-2.06.tar.gz        
gcc-4.8.4.tar.bz2        m4-1.4.16.tar.bz2
gmp-5.0.5.tar.bz2        mpc-0.9.tar.gz

接下来在make时,可能会遇到如下问题:

make[2]: *** [doc/cpp.info] 错误 1
make[2]: *** 正在等待未完成的任务....

make: *** [/opt/buildroot-2012.08/output/toolchain/gcc-4.5.4-initial/.compiled] 错误 2

原因是编译器的版本不匹配:
查看gcc版本:

zhanghang@ubuntu:/opt/buildroot-2012.08$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

此时我们已经将下载好的对应版本的压缩包放到了dl路径下,只需要在make时使用它:
修改.config文件:

140 # GCC Options
141 #
142 # BR2_GCC_VERSION_4_3_X is not set
143 # BR2_GCC_VERSION_4_4_X is not set
144 # BR2_GCC_VERSION_4_5_X is not set ////////
145 # BR2_GCC_VERSION_4_6_X is not set
146 BR2_GCC_VERSION_4_7_X=y  ///////
147 # BR2_GCC_VERSION_SNAP is not set
148 BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE=y
149 BR2_GCC_VERSION="4.8.4" ////////
150 BR2_EXTRA_GCC_CONFIG_OPTIONS=""
151 # BR2_INSTALL_OBJC is not set
152 # BR2_INSTALL_FORTRAN is not set
153 BR2_GCC_SHARED_LIBGCC=y
154 BR2_GCC_ENABLE_TLS=y
155 # BR2_GCC_ENABLE_OPENMP is not set

注意修改了3行,保存继续make:

> 5. gcc 4.7.x (BR2_GCC_VERSION_4_7_X)
  6. gcc snapshot (BR2_GCC_VERSION_SNAP)
choice[1-6?]: 5

在这里插入图片描述
最后编译结束,生成的结果在当前路径的arm920t下:

zhanghang@ubuntu:/opt/buildroot-2012.08$ cd arm920t/
zhanghang@ubuntu:/opt/buildroot-2012.08/arm920t$ ls
usr
zhanghang@ubuntu:/opt/buildroot-2012.08/arm920t$ cd usr/
zhanghang@ubuntu:/opt/buildroot-2012.08/arm920t/usr$ ls
arm-unknown-linux-uclibcgnueabi  bin  include  lib  libexec  share
zhanghang@ubuntu:/opt/buildroot-2012.08/arm920t/usr$ cd bin/
zhanghang@ubuntu:/opt/buildroot-2012.08/arm920t/usr/bin$ ls
aclocal
aclocal-1.11
arm-linux-addr2line
arm-linux-ar
arm-linux-as
arm-linux-c++
arm-linux-cc
arm-linux-c++filt
arm-linux-cpp
arm-linux-elfedit
arm-linux-g++
arm-linux-gcc
arm-linux-gcc-4.8.4
arm-linux-gcc-ar
arm-linux-gcc-nm
arm-linux-gcc-ranlib
arm-linux-gcov
arm-linux-gprof
arm-linux-ld
arm-linux-ld.bfd
arm-linux-ldconfig
arm-linux-ldd
arm-linux-nm
arm-linux-objcopy
arm-linux-objdump
arm-linux-ranlib
arm-linux-readelf
arm-linux-size
arm-linux-strings
arm-linux-strip
arm-unknown-linux-uclibcgnueabi-addr2line
arm-unknown-linux-uclibcgnueabi-ar
arm-unknown-linux-uclibcgnueabi-as
arm-unknown-linux-uclibcgnueabi-c++
arm-unknown-linux-uclibcgnueabi-cc
arm-unknown-linux-uclibcgnueabi-c++filt
arm-unknown-linux-uclibcgnueabi-cpp
arm-unknown-linux-uclibcgnueabi-elfedit
arm-unknown-linux-uclibcgnueabi-g++
arm-unknown-linux-uclibcgnueabi-gcc
arm-unknown-linux-uclibcgnueabi-gcc-4.8.4
arm-unknown-linux-uclibcgnueabi-gcc-ar
arm-unknown-linux-uclibcgnueabi-gcc-nm
arm-unknown-linux-uclibcgnueabi-gcc-ranlib
arm-unknown-linux-uclibcgnueabi-gcov
arm-unknown-linux-uclibcgnueabi-gprof
arm-unknown-linux-uclibcgnueabi-ld
arm-unknown-linux-uclibcgnueabi-ld.bfd
arm-unknown-linux-uclibcgnueabi-ldconfig
arm-unknown-linux-uclibcgnueabi-ldd
arm-unknown-linux-uclibcgnueabi-nm
arm-unknown-linux-uclibcgnueabi-objcopy
arm-unknown-linux-uclibcgnueabi-objdump
arm-unknown-linux-uclibcgnueabi-ranlib
arm-unknown-linux-uclibcgnueabi-readelf
arm-unknown-linux-uclibcgnueabi-size
arm-unknown-linux-uclibcgnueabi-strings
arm-unknown-linux-uclibcgnueabi-strip
autoconf
autoheader
autom4te
automake
automake-1.11
autoreconf
autoscan
autoupdate
ifnames
ldconfig
ldd
libtool
libtoolize
m4
zhanghang@ubuntu:/opt/buildroot-2012.08$ ./arm920t/usr/bin/arm-linux-gcc -v
Using built-in specs.
COLLECT_GCC=./arm920t/usr/bin/arm-linux-gcc
COLLECT_LTO_WRAPPER=/opt/buildroot-2012.08/arm920t/usr/libexec/gcc/arm-unknown-linux-uclibcgnueabi/4.8.4/lto-wrapper
Target: arm-unknown-linux-uclibcgnueabi
Configured with: /opt/buildroot-2012.08/output/toolchain/gcc-4.8.4/configure --prefix=/opt/buildroot-2012.08/arm920t/usr --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=arm-unknown-linux-uclibcgnueabi --enable-languages=c,c++ --with-sysroot=/opt/buildroot-2012.08/arm920t/usr/arm-unknown-linux-uclibcgnueabi/sysroot --with-build-time-tools=/opt/buildroot-2012.08/arm920t/usr/arm-unknown-linux-uclibcgnueabi/bin --disable-__cxa_atexit --enable-target-optspace --disable-libgomp --with-gnu-ld --disable-libssp --disable-multilib --enable-tls --enable-shared --with-gmp=/opt/buildroot-2012.08/arm920t/usr --with-mpfr=/opt/buildroot-2012.08/arm920t/usr --enable-threads --disable-decimal-float --with-float=soft --with-abi=aapcs-linux --with-arch=armv4t --with-tune=arm920t --with-pkgversion='Buildroot 2012.08' --with-bugurl=http://bugs.buildroot.net/
Thread model: posix
gcc version 4.8.4 (Buildroot 2012.08) 

接下来做一个测试,比较交叉编译器和gcc的区别:

zhanghang@ubuntu:~$ gcc hello.c -o hello
zhanghang@ubuntu:~$ du -h hello
12K     hello
zhanghang@ubuntu:~$ file hello
hello: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=7b1421b656bb9c153707ba0082498c10a1243db7, not stripped
zhanghang@ubuntu:~$ /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc hello.c -o hello_a
zhanghang@ubuntu:~$ du -h hello_
hello_a      hello_arm    hello_build  
zhanghang@ubuntu:~$ du -h hello_a
8.0K    hello_a
zhanghang@ubuntu:~$ file hello_a
hello_a: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), not stripped
zhanghang@ubuntu:~$ /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc hello.c -o hello_a -static
zhanghang@ubuntu:~$ du -h hello_a
60K     hello_a
zhanghang@ubuntu:~$ /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip hello_a  
zhanghang@ubuntu:~$ file hello_a
hello_a: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), statically linked, stripped
zhanghang@ubuntu:~$ du -h hello_a
20K     hello_a

(需要静态编译(-static)才能移植到开发板上运行)
还有其他问题就百度解决吧

相关博客:
https://www.cnblogs.com/arnoldlu/p/9553995.html
https://www.cnblogs.com/justin-y-lin/p/9166853.html

猜你喜欢

转载自blog.csdn.net/qq_43260665/article/details/89629341
今日推荐