以前做文件系统的时候制作过交叉编译器,现在重新做一遍总结一下。
认识交叉编译器
交叉编译器简介 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码。比如我们在pc下编译的代码,想要在arm开发板上运行,就需要用交叉编译器编译pc端的代码,然后才能在arm板上运行。
制作交叉编译器过程
把buildroot上传到opt目录下
我这里有.bin文件,也可以直接百度下载buildroot压缩包,重要的是后面的配置过程,有需要的朋友也可以联系我。
用rz
命令从pc端传文件过来
[fanmaolin@Centeros ~]$ cd /opt/
[fanmaolin@Centeros opt]$ ls
buildroot-2012.08 busybox-1.20.2 fs.conf roofts tool
buildroot-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]$ ls
arm920t boot CHANGES configs dl fs Makefile package target
board 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 —>
(
[*] 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-nm
aclocal-1.11 arm-linux-readelf arm-unknown-linux-uclibcgnueabi-objcopy
arm-linux-addr2line arm-linux-size arm-unknown-linux-uclibcgnueabi-objdump
arm-linux-ar arm-linux-strings arm-unknown-linux-uclibcgnueabi-ranlib
arm-linux-as arm-linux-strip arm-unknown-linux-uclibcgnueabi-readelf
arm-linux-c++ arm-unknown-linux-uclibcgnueabi-addr2line arm-unknown-linux-uclibcgnueabi-size
arm-linux-cc arm-unknown-linux-uclibcgnueabi-ar arm-unknown-linux-uclibcgnueabi-strings
arm-linux-c++filt arm-unknown-linux-uclibcgnueabi-as arm-unknown-linux-uclibcgnueabi-strip
arm-linux-cpp arm-unknown-linux-uclibcgnueabi-c++ autoconf
arm-linux-elfedit arm-unknown-linux-uclibcgnueabi-cc autoheader
arm-linux-g++ arm-unknown-linux-uclibcgnueabi-c++filt autom4te
arm-linux-gcc arm-unknown-linux-uclibcgnueabi-cpp automake
arm-linux-gcc-4.5.4 arm-unknown-linux-uclibcgnueabi-elfedit automake-1.11
arm-linux-gccbug arm-unknown-linux-uclibcgnueabi-g++ autoreconf
arm-linux-gcov arm-unknown-linux-uclibcgnueabi-gcc autoscan
arm-linux-gprof arm-unknown-linux-uclibcgnueabi-gcc-4.5.4 autoupdate
arm-linux-ld arm-unknown-linux-uclibcgnueabi-gccbug ifnames
arm-linux-ld.bfd arm-unknown-linux-uclibcgnueabi-gcov ldconfig
arm-linux-ldconfig arm-unknown-linux-uclibcgnueabi-gprof ldd
arm-linux-ldd arm-unknown-linux-uclibcgnueabi-ld libtool
arm-linux-nm arm-unknown-linux-uclibcgnueabi-ld.bfd libtoolize
arm-linux-objcopy arm-unknown-linux-uclibcgnueabi-ldconfig m4
arm-linux-objdump arm-unknown-linux-uclibcgnueabi-ldd
[fanmaolin@Centeros buildroot-2012.08]$ ls arm920t/usr/lib
gcc libgmp.la libgmp.so.10 libltdl.la libltdl.so.7 libmpc.la libmpc.so.2 libmpfr.la libmpfr.so.4
ldscripts 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 //查看文件属性,是ARM
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
下载到编译器上就可以在开发板上编译运行