嵌入式之路,贵在日常点滴
---阿杰在线送代码
交叉编译是在一个平台上生成另一个平台上的可执行代码。
虽然已经有了主机编译,但目的平台上不允许或不能够安装我们所需要的编译器。
有时是因为目的平台上的①资源贫乏,无法运行我们所需要编译器;
有时又是因为②目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。
树莓派有时因为目的平台还没有建立,连操作系统都没有,操作系统也是代码,也要编译!也要进行交叉编译。
平台运行需要两样至少东西:bootloader(启动引导代码)以及操作系统核心
在工作中使用的设备基本需要进行交叉编译,设备考虑成本问题资源贫乏,没有编译工具
交叉编译器、交叉编译工具链
【tools】>【Code】>【Download Zip】
①将压缩包拷贝进虚拟机linux(直接拖入、共享文件夹、filezilla)
②解压
unzip tools-master.zip
③进入解压后的文件夹
cd tools-master/
④进入arm-bcm2708
cd arm-bcm2708/
⑤进入gcc-linaro-arm-linux-gnueabihf-raspbian-x64
cd gcc-linaro-arm-linux-gnueabihf-raspbian-x64/
⑥进入bin目录
cd bin/
可以看到有很多的可执行文件(绿色),软链接(蓝色)
用ls -l查看
看到这个软链接实际用的是它所指向的一个可执行文件,软链接不占内存只是一个符号指向了这个位置。
⑦使用
./arm-linux-gnueabihf-gcc -v
以前使用的gcc是在本电脑上运行,使用软链接的是在树莓派上运行。
当要使用这个工具时,“藏”得太深,不方便怎么办?作为环境变量即可。

echo $PATH
可以看到各个路径是以:作为分隔符
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/FriendlyARM/toolschain/4.5.1/bin
复制想要添加为环境变量的路径(pwd后复制)

export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

echo $PATH 查看是否添加成功/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
已经添加成功。
这样,在其他路径下也能使用交叉编译的gcc,查看版本号。
arm-linux-gnueabihf-gcc -v

不建议使用,换一个窗口就不行了。下面还介绍永久有效的方法。
.bashrc 隐藏文件 1、修改工作目录下的.bashrc 隐藏文件,配置命令终端
vi /home/CLC/.bashrc
2、把上面用到的配置环境变量的代码在末尾(shift+g快捷键)加入即可
export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

3、使其立即生效(之前没有这步也成功了)
source .bashrc
4、验证
arm-linux-gnueabihf-gcc -v

.c文件,使用gcc进行编译,用file ./a.out查看文件信息
可在电脑上运行
arm-linux-gnueabihf-gcc进行编译,用file ./a.out查看文件信息
可在树莓派运行
树莓派与虚拟机的网络必须在同一个网段
如果不相同,继续执行会出现如下错误。
可用下面的指令修改虚拟机的ip地址
sudo ifconfig eth0 192.168.43.240
scp a.out pi@192.168.225.10:/home/pi
后输入密码
raspberry

在树莓派中运行即可。
EG:使用交叉编译,让树莓派作为服务器端,VM作为客户端,对树莓派的文件进行访问。
把服务端的代码通过交叉编译发送给树莓派,树莓派运行,VM运行客户端连接上即可。
gcc server.c -o serverInX86

arm-linux-gnueabihf-gcc client.c -o clientInPI
从上位机发送编译后的可执行文件到树莓派工作目录
scp clientInPI pi@192.168.225.10:/home/pi
运行结果:
