用buildroot制作交叉编译器

来源:互联网 发布:淘宝实名资料购买 编辑:程序博客网 时间:2024/05/16 07:41

以前做文件系统的时候制作过交叉编译器,现在重新做一遍总结一下。

认识交叉编译器

交叉编译器简介 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码。比如我们在pc下编译的代码,想要在arm开发板上运行,就需要用交叉编译器编译pc端的代码,然后才能在arm板上运行。

制作交叉编译器过程

把buildroot上传到opt目录下

我这里有.bin文件,也可以直接百度下载buildroot压缩包,重要的是后面的配置过程,有需要的朋友也可以联系我。

rz命令从pc端传文件过来

[fanmaolin@Centeros ~]$ cd /opt/[fanmaolin@Centeros opt]$ lsbuildroot-2012.08                           busybox-1.20.2          fs.conf  roofts            toolbuildroot-2012.08-LingYunEmbLab-v1.2.0.bin  busybox-1.20.2.tar.bz2  rh       rootfs-ubifs.bin

buildroot-2012.08-LingYunEmbLab-v1.2.0.bin这就是我们需要的.bin文件

这里有一个细节需要注意,如果你的/opt/目录没有权限,你需要给一个权限才能传文件到里面,并且给.bin文件执行权限a+x

[fanmaolin@Centeros ~]$ sudo chmod 777 /opt/[fanmaolin@Centeros opt]$ chmod a+x buildroot-2012.08-LingYunEmbLab-v1.2.0.bin

安装buildroot

[fanmaolin@Centeros opt]$ ./buildroot-2012.08-LingYunEmbLab-v1.2.0.bin

如果在过程中提示缺少东西,可以用sudo yum install xxx 安装相应的rpm包

编译完成后进入/opt下查看会生成
buildroot-2012.08 文件夹
这里写图片描述

查看里面的文件

[fanmaolin@Centeros opt]$ cd buildroot-2012.08[fanmaolin@Centeros buildroot-2012.08]$ lsarm920t  boot                      CHANGES    configs  dl    fs     Makefile  package  targetboard    buildroot-2012.08-packes  Config.in  COPYING  docs  linux  output    support  toolchain

Linux服务器上的buildroot源码包安装完成

配置交叉编译器

在make menuconfig里面,回车表示进入,空格进行选择,两下esc退出

[fanmaolin@Centeros buildroot-2012.08]$ export TERM=vt100[fanmaolin@Centeros buildroot-2012.08]$ make menuconfig

Target Architecture (ARM (little endian)) —>
Target Architecture Variant (arm920t) —> 根据你的开发板选择
Target ABI (EABI) —>
Build options —>
((TOPDIR)/dl)Downloaddir((TOPDIR)/arm920t) Host dir
[*] prefer static libraries

其他用默认值

Toolchain —>
Kernel Headers (Linux 3.0.x kernel headers) —> 选择你自己的内核版本
… …
[*] Enable compiler tls support
[*] Enable MMU support
[*] Use software floating point by default
[*] Enable large file (files > 2 GB) support
[*] Enable IPv6 support
[*] Enable RPC support
[*] Enable WCHAR support
[*] Enable C++ support

其他用默认值

System configuration —>
Init system (None) —> 把Busbyox编译去掉

其他用默认值

Package Selection for the target —>
。。。
Libraries —>
Compression and decompression —>
[*] lzo
-*- zlib

其他用默认值

剩下的不需要管,用默认值

选择完成保存后退出

make编译

*** End of the configuration.*** Execute 'make' to start the build or try 'make help'.[fanmaolin@Centeros buildroot-2012.08]$ make。。。耐心等待

查看编译出来的交叉编译器工具链

[fanmaolin@Centeros buildroot-2012.08]$ ls arm920t/usr/bin/aclocal              arm-linux-ranlib                           arm-unknown-linux-uclibcgnueabi-nmaclocal-1.11         arm-linux-readelf                          arm-unknown-linux-uclibcgnueabi-objcopyarm-linux-addr2line  arm-linux-size                             arm-unknown-linux-uclibcgnueabi-objdumparm-linux-ar         arm-linux-strings                          arm-unknown-linux-uclibcgnueabi-ranlibarm-linux-as         arm-linux-strip                            arm-unknown-linux-uclibcgnueabi-readelfarm-linux-c++        arm-unknown-linux-uclibcgnueabi-addr2line  arm-unknown-linux-uclibcgnueabi-sizearm-linux-cc         arm-unknown-linux-uclibcgnueabi-ar         arm-unknown-linux-uclibcgnueabi-stringsarm-linux-c++filt    arm-unknown-linux-uclibcgnueabi-as         arm-unknown-linux-uclibcgnueabi-striparm-linux-cpp        arm-unknown-linux-uclibcgnueabi-c++        autoconfarm-linux-elfedit    arm-unknown-linux-uclibcgnueabi-cc         autoheaderarm-linux-g++        arm-unknown-linux-uclibcgnueabi-c++filt    autom4tearm-linux-gcc        arm-unknown-linux-uclibcgnueabi-cpp        automakearm-linux-gcc-4.5.4  arm-unknown-linux-uclibcgnueabi-elfedit    automake-1.11arm-linux-gccbug     arm-unknown-linux-uclibcgnueabi-g++        autoreconfarm-linux-gcov       arm-unknown-linux-uclibcgnueabi-gcc        autoscanarm-linux-gprof      arm-unknown-linux-uclibcgnueabi-gcc-4.5.4  autoupdatearm-linux-ld         arm-unknown-linux-uclibcgnueabi-gccbug     ifnamesarm-linux-ld.bfd     arm-unknown-linux-uclibcgnueabi-gcov       ldconfigarm-linux-ldconfig   arm-unknown-linux-uclibcgnueabi-gprof      lddarm-linux-ldd        arm-unknown-linux-uclibcgnueabi-ld         libtoolarm-linux-nm         arm-unknown-linux-uclibcgnueabi-ld.bfd     libtoolizearm-linux-objcopy    arm-unknown-linux-uclibcgnueabi-ldconfig   m4arm-linux-objdump    arm-unknown-linux-uclibcgnueabi-ldd[fanmaolin@Centeros buildroot-2012.08]$ ls arm920t/usr/libgcc        libgmp.la  libgmp.so.10      libltdl.la  libltdl.so.7      libmpc.la  libmpc.so.2      libmpfr.la  libmpfr.so.4ldscripts  libgmp.so  libgmp.so.10.0.5  libltdl.so  libltdl.so.7.2.2  libmpc.so  libmpc.so.2.0.0  libmpfr.so  libmpfr.so.4.1.1

测试

编写一个简单的hello world程序

[fanmaolin@Centeros c]$ gcc hello.c [fanmaolin@Centeros c]$ ./a.out Hello World![fanmaolin@Centeros c]$ /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -static hello.c -o hello[fanmaolin@Centeros c]$ file hello     //查看文件属性,是ARMhello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped

下载到编译器上就可以在开发板上编译运行

原创粉丝点击