基于Buildroot的linux下交叉编译器的安装

环境:
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代替那个很长很长的编译命令了。

-——以上是第一次编写的全部内容——-

你可能感兴趣的:(linux)