环境:
windows 7
VMware 12
CentOS 6.7_x86
交叉编译器简介 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码。
—–《百度百科》
因为日后会在开发板上进行项目开发,但又由于开发板的硬件限制,不能在开发板上进行本机开发,故而需要在本身Linux系统上安装交叉编译器,在Linux下进行变异后,直接移植到开发板上进行使用。
交叉编译器的安装
我们这次需要的交叉编译器是直接用Buildroot的源码包,进行相关配置后就直接make即可;
[atrouble@MiWiFi-R1CL-srv opt]$ wget https://buildroot.org/downloads/buildroot-2012.08.tar.bz2
[atrouble@MiWiFi-R1CL-srv opt]$ tar -xjf buildroot-2016.08.tar.bz2
在这里我下载的是目前最新版本的,下载目录是/opt/下,所以在下载前要进行权限配置,因为是个人电脑,而且是虚拟机中,为了图简单我直接在根目录下安装配置。
编译配置
在Buildroot的交叉编译器安装中,为了实现更好的人机交互,我们用make menuconfig进行配置。
在此我推荐几篇文章,博主在文章中很详细的介绍了Buildroot的一些配置选项所代表的内容,我也是看着他们的介绍才有所了解的。
buildroot的使用简介
Buildroot构建指南–Overview
切换到解压目录下后,有以下内容:
[atrouble@MiWiFi-R1CL-srv buildroot-2012.08]$ ls
arch build Config.in.legacy docs Makefile README toolchain
board CHANGES configs fs Makefile.legacy support
boot Config.in COPYING linux package system
我们先进行shell的一个配置,以免等下配置时有乱码,而后直接进入menuconfig中。
[atrouble@MiWiFi-R1CL-srv buildroot-2012.08]$ export TERM=vt100
[atrouble@MiWiFi-R1CL-srv buildroot-2012.08]$ make menuconfig
我们看到的界面是这样的,类似于在windows下安装软件的时候,有窗口出现给用户进行操作。
不想太啰嗦,而且我主要目的是配置S3C2440的交叉编译器,所以根据S3C2440的CPU我们进行如下选择:
Target Architecture (ARM (little endian)) --->
Target Architecture Variant (arm920t) ---> 根据自己的CPU来选择
Target ABI (EABI) --->
Build options --->
($(TOPDIR)/dl) Download dir
($(TOPDIR)/arm920t) Host dir
[*] prefer static libraries
其它选项都不要选,如果是要设置值的地方就使用默认值
Toolchain --->
Kernel Headers (Linux 2.6 (manually specified version)) --->
(2.6.37) linux version 选定内核版本为2.6.37
... ...
[*] 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
Host utilities --->
这里面所有的选项都不要选
Filesystem images --->
这里面所有的选项都不要选
Bootloaders --->
这里面所有的选项都不要选
Kernel ---
这里面所有的选项都不要选
而后直接进行make,它会根据安装需要自动下载需要的包,此过程我这里持续了一个小时多,请耐心等待。
完成后,linux中就有相关的编译器,所在的目录是/opt/buildroot-2012.08/arm920t/usr/bin/下
[atrouble@MiWiFi-R1CL-srv 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.5.4
arm-linux-gccbug
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
--More--
先进行测试,用helloworld代码测试。
[atrouble@MiWiFi-R1CL-srv jobss]$ /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc hello.c -o hello
[atrouble@MiWiFi-R1CL-srv jobss]$ file hello
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
而后为了简单使用,我们把这个编译命令用alias进行设置。具体操作如下:
[atrouble@MiWiFi-R1CL-srv jobss]$ vim ~/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
alias arm-gcc='/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc'
以后,就可用arm-gcc代替那个很长很长的编译命令了。
-——以上是第一次编写的全部内容——-