搭建开发环境,首先必须具备运行软件开发相关工具的平台,我们这里使用的是云服务器。其次,需要具备对应用进行代码转换的工具。
编译:通常指利用编译程序从源语言编写的源程序产生目标程序的过程或者动作。一般包括本地编译和交叉编译两种。
本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于本地编译: 比如,我们在x86平台上,编写程序并编译成可执行程序。这种方式下,我们使用x86平台上的工具,开发针对x86平台本身的可执行程序,这个编译过程称为本地编译。
交叉编译可以理解为,在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序: 比如,我们在x86平台上,编写程序并编译成能运行在ARM平台的程序,编译得到的程序在x86平台上是不能运行的,必须放到ARM平台上才能运行。
Speed:目标平台的运行速度往往比主机慢得多,许多专用嵌入式硬件被设计为低成本和低功耗,没有太高的性能
Capability:整个编译过程是非常消耗资源的,嵌入式系统往往没有足够的内存空间或磁盘空间
Availability:即使目标平台资源很充足,可以本地编译,但是第一个在目标平台上运行的本地编译器总需要通过交叉编译获得
Flexibility:一个完整的Linux编译环境需要很多支持包,交叉编译是我们不需要花时间将各种支持包移植到目标板上
编译环境的搭建,通常包含以下三个步骤:安装基础环境,安装配置编译器,验证交叉编译器。
首先,安装标准的C开发环境
ubuntu:apt-get install build-essential centos:yum groupinstall Development Tools
在/usr/local下创建ARM-toolchain文件夹
mkdir /usr/local/ARM-toolchain
准备下载gcc
wget https://releases.linaro.org/components/toolchain/binaries/latest-5/aarch64-linux-gnu/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz
解压
tar -xvf gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz
后配置环境变量,修改配置文件,在配置文件最后一行加入PATH配置:
ubuntu:vim /etc/bash.bashrc centos:vim /etc/profile
环境变量生效
ubuntu:source /etc/bash.bashrc centos:source /etc/profile
交叉编译器验证:
编写测试例子hello.c进行输出验证
执行 aarch64-linux-gnu-gcc -o test hello.c进行交叉编译
在x86服务器上 ./test 此时会报错 -bash:./est:cannot execute binary file
将文件拷贝到ARM服务器上,./test 可正常显示输出内容。
搭建开发环境,首先必须具备运行软件开发相关工具的平台,我们这里使用的是云服务器。其次,需要具备对应用进行代码转换的工具。
编译:通常指利用编译程序从源语言编写的源程序产生目标程序的过程或者动作。一般包括本地编译和交叉编译两种。
本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于本地编译: 比如,我们在x86平台上,编写程序并编译成可执行程序。这种方式下,我们使用x86平台上的工具,开发针对x86平台本身的可执行程序,这个编译过程称为本地编译。
交叉编译可以理解为,在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序: 比如,我们在x86平台上,编写程序并编译成能运行在ARM平台的程序,编译得到的程序在x86平台上是不能运行的,必须放到ARM平台上才能运行。
Speed:目标平台的运行速度往往比主机慢得多,许多专用嵌入式硬件被设计为低成本和低功耗,没有太高的性能
Capability:整个编译过程是非常消耗资源的,嵌入式系统往往没有足够的内存空间或磁盘空间
Availability:即使目标平台资源很充足,可以本地编译,但是第一个在目标平台上运行的本地编译器总需要通过交叉编译获得
Flexibility:一个完整的Linux编译环境需要很多支持包,交叉编译是我们不需要花时间将各种支持包移植到目标板上
编译环境的搭建,通常包含以下三个步骤:安装基础环境,安装配置编译器,验证交叉编译器。
首先,安装标准的C开发环境
ubuntu:apt-get install build-essential centos:yum groupinstall Development Tools
在/usr/local下创建ARM-toolchain文件夹
mkdir /usr/local/ARM-toolchain
准备下载gcc
wget https://releases.linaro.org/components/toolchain/binaries/latest-5/aarch64-linux-gnu/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz
解压
tar -xvf gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz
后配置环境变量,修改配置文件,在配置文件最后一行加入PATH配置:
ubuntu:vim /etc/bash.bashrc centos:vim /etc/profile
环境变量生效
ubuntu:source /etc/bash.bashrc centos:source /etc/profile
交叉编译器验证:
编写测试例子hello.c进行输出验证
执行 aarch64-linux-gnu-gcc -o test hello.c进行交叉编译
在x86服务器上 ./test 此时会报错 -bash:./est:cannot execute binary file
将文件拷贝到ARM服务器上,./test 可正常显示输出内容。