一、首先我们来认清楚交叉编译是什么,为什么要进行交叉编译?
(1)什么是交叉编译?
答:交叉编译是在一个平台上生成另一个平台上的可执行代码。
例如:我们在Windows
平台上编写的C51
的代码,并编译成在C51
上可执行的代码,例xxx.hex
文件,这个文件是在C51
上运行的并不是在Windows
上运行的
什么是编译呢?
答:编译就是在一个平台上生成在该平台上的可执行代码
例如:C51和stm32 的交叉编译发生在keil(集成环境上面)
(2)为什么要进行交叉编译呢?
原因:平台上不允许或不能够安装我们所需要的编译器,比如C51
a.因为目的平台上的资源贫乏,无法运行我们所需要的编译器
b.既然树莓派有自己的操作系统(linux
),那么树莓派是不是不需要进行交叉编译呢?
答:这是错的,树莓派也要进行交叉编译
树莓派有时候也是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器,操作系统也是代码,也是需要进行编译的。
平台运行至少需要两样东西:BootLoader
(启动引导代码)以及操作系统核心
c.那么什么是宿主机(host
)和目标机(target
)呢?
答:宿主机:编辑和编译程序的平台,一般是基于X86
的PC
机,通常也被称为i而主机
目标机:用户开发的系统,通常都是非X86
平台,宿主机编译得到的可执行的代码在目标机上运行
d.交叉编译需要用到的 工具有哪些?
交叉编译器、交叉编译工具链
那么接下来我们就来讲一下交叉编译工具链
二、交叉编译工具链的安装
1.交叉编译工具链的安装网址
进入网址后选tools
选择tools
之后选右上角的Code
,再选择Code
底下的Download ZIP
,这样就能够将交叉编译工具链的压缩包下载回来了
2.交叉编译工具链的压缩包下载好了之后,我们就来解压一下压缩包(这些操作都是在linux
虚拟机下进行的)
a.记得在上面的交叉编译工具链压缩包的下载的时候尽量将压缩包下载回到windows
跟linux
的共享文件夹中,这样方便进行解压,用FileZilla
进行文件的传输也是可以的,无论是共享文件夹还是FileZilla
都只是文件传输的一种手段而已
b.在linux
的工作目录下新建一个新的目录lessonPi
(这个都是随意的啦,每个人都不一样的,到时候配置环境变量的时候能够找到这个路径即可)
1)进入新建的目录/home/CLC/lessonPi
从共享文件夹中拷贝交叉编译工具链的压缩包到当前目录
cp /mnt/hgfs/sharefromwindows/tools-master.zip .
千万别漏了这个.
,这个.
的意思是表示当前目录的意思(上面那个路径是我虚拟机上跟Windows的共享文件夹的路径,每个人的都不尽相同)
2)将压缩包拷贝过来了之后就是将压缩包进行解压了
用指令 unzip tools-master.zip
进行解压
3)解压完了之后进入到交叉编译工具链所在的路径
cd /home/CLC/lessonPi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
进入到这个路径底下之后,用pwd
指令打印出这个路径,然后复制下来
我们看到很多可执行文件(绿色),和软链接(蓝色),红框内的那个软链接就是我们要用到的
用ls -l
来查看一下,软链接实际用的是它所指向的一个可执行文件,软链接不占内存只是一个符号指向了这个位置