您的位置:首页 > 运维架构 > Linux

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

2016-10-27 13:21 323 查看
环境:

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
4000
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