交叉编译
一、交叉编译是什么,为什么要交叉编译
1.交叉编译 是在一个平台上生成另一个平台上的可执行代码。
我们在Windows上面编写C51代码,并编译成可执行代码 如xx.hex
是在C51上面运行,不是在Windows上面运行。
我们在Ubuntu上面编写树莓派的代码,并编译成可执行代码 如a.out,
是在树莓派上面运行,不是在Ubuntu linux上面运行
编译:是在一个平台上生成在该平台上的可执行的代码
C51 交叉编译的发生在Keil集成环境上面
2.为什么要交叉编译
平台上不许或不能够安装我们所需要的编译器比如C51
1.因为目的平台上的资源匮乏,无法运行我们所需要的编译器
2.树莓派是不是就不需要交叉编译?
当然树莓派有时又因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。 操作系统也是代码 也要编译。
平台运行需要两样至少东西:BootLoader(启动引导代码)以及操作系统核心
宿主机(host):编辑和编译程序的平台,一般是基于X86的pc机,通常也被称为主机
目标机(target):用户开发的系统,通常都是非X86平台,host编译得到的可执行代码在target上面运行。
二、交叉编译的工具
交叉编译器 、交叉编译工具链
三、交叉编译工具的安装
https://github.com/raspberrypi/
大家自己去下载吧,下好之后不要忘记将下好的文件放入windows上面的共享文件夹里面(我自己开始的时候没有放入搞了好久都没有成功)
从共享文件夹拷贝到工作目录
cp /mnt/hgfs/showfromwindows/tools-master.zip .
我的共享文件是在showfromwindows里面大家可以根据自己的电脑去查看
如果最开始不知道在那个文件夹里面的话可以先输下面的指令进行查看
cd lessonpi 是我自己先建立一个文件夹然后把后面的文件全部放入里面 从上面我们就可以看出我们的共享文件夹是在showfromwindows里面接着在输入一层命令则看到我们需要的tools-master.zip 压缩包
总体操作步骤如下:
cd /mnt/hgfs/showfromwindows/tools-master.zip .
解压
unzip tools-master.zip
pwd 获取路径
echo $PATH 获得当前环境变量的值
1.临时有效
PATH 环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/lessonpi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
2.永久有效
修改工作目录下的.bashrc隐藏文件配置命令终端的
vi /home/CLC/.bashrc
进入之后在文件最后一行加入上面我们获取的位置:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/lessonpi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
source /home/CLC/.bashrc 加载配置文件,马上生效配置
然后我们可以测试基于树莓派的编译
arm-linux-gnueabhf-gcc -v
四、交叉编译服务端客户端
交叉编译检查工具对不对
arm-linux-gnueabihf-gcc -v
4.8.4
编译
arm-linux-gnueabihf-gcc xxx.c -o xxx
如何把编译生成的可执行文件下载到开发板
scp test_2 pi@192.168.43.71:/home/pi
指令 文件名 开发板用户@地址:开发板绝对路径
在进行文件复制到开发板时我们要检查虚拟机上面的网络是否正常连接一般选择是桥接模式如果没有成功我们在点击编辑->虚拟网络设置 选择无线设置(因为我自己开始连接了很多次都失败了后面改了一下就成功了)
然后我们ping 一下ip地址看是否连接成功
ping 192.168.43.71
如果出现上面这种则说明连接成功了否则的话我们按Ctrl +c
最后我们在树莓派上面在来看一下是否成功了(明显可以看出我们复制的test_2 文件已存在树莓派上 接着编译一下就可以 了)。
加油 冲鸭!~~~~