一、交叉编译的概念
交叉编译是在一个平台上生成另一个平台上的可执行代码。
编译:一个平台上生成在该平台上的可执行文件。
例如:我们的Windows上面编写的C51代码,并编译成可执行的代码,如xx.hex.在C51上面运行。
我们在Ubuntu上面编写的树莓派的代码,并编译成可执行代码,如a.out.在树莓派上面运行。
二、为什么要交叉编译
(1)平台上不允许或者不能安装我们所需的编译器,比如51(内存比较小);
(2)因为目的平台上资源贫乏,无法运行我们所需的编译器;
三、平台运行至少需要两样东西
1.bootlosder(启动引导代码)
2.操作系统
四、交叉编译用到什么工具?
交叉编译器、交叉编译工具
五、交叉编译工具链的安装
5.1 工具链下载方式:网站下载
http://github.com/raspberypi/
5.2.把下载的包放到 ubuntu 上,并解压:
unzip tools-master.zip
5.3.进入到 /home/clc/SYSTEM/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin 目录下:
交叉编译工具
此时我们只能在这个目录中进行编译,为了更方便编译和能够让编译工具能在其他目录中进行编译,就要我们配置环境变量。
5.4.配置环境变量
1.永久有效
echo $PATH 显示当下环境变量
export PATH= 配置环境变量
vi /home/clc/.bashrc
G 跳转到文件尾部 gg 跳转到文件开头
2.加载配置文件,马上生效配置
source /home/clc/.bashrc
六、交叉编译的使用
6.1.检查交叉编译工具
arm-linux-gnueabihf-gcc -v (4.8.3的版本)
6.2.交叉编译
arm-linux-gnueabihf-gcc xxx.c -o xxx
6.3.把编译生成的可执行文件发到树莓派上
scp clientInPi pi@192.168.100.3:/home/pi
指令 文件名 开发板用户名@开发板地址:开发板的绝对路径
6.4.带wiringPi库的交叉编译如何进行
正常我们先要交叉编译wiringPi库,编译出的库适合树莓派,这时候交叉编译可执行程序,链接库的格式也是正确的。
通过 来指定
问题记录:
arm-linux-gnueabihf-gcc switchDz.c -I /home/CLC/lessonPI/WiringPi/wiringPi -lwiringPi
/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lwiringPi
collect2: error: ld returned 1 exit status
原因:链接的库的格式不对,是宿主机的平台
如何解决呢?
#通过 -I -L 来指定
arm-linux-gnueabihf-gcc switchDz.c -I /home/CLC/lessonPI/WiringPi/wiringPi -L. -lwiringPi -o crossCompBinswitchDz
/*
1.-I 指定头文件路径
2.-L. 从当前路径去找
3.-o 重命名
*/
6.5 SCP过程中存在的问题
问题一:
解决方案:查看这篇博客 解决scp命令pemission denied,please try again的问题
问题二:SSHD无法重启,权限不足问题
看这篇博客:关于sshd服务无法开启的问题集合_sshd服务启动失败_CheungChunChiu的博客-CSDN博客【代码】关于sshd服务无法开启的问题集合。_sshd服务启动失败https://blog.csdn.net/qq_30883899/article/details/131636656如何修改Linux系统的 /etc/ssh/sshd_config 文件 "/etc/ssh/sshd_config" E212: Can't open file for writin_是丽丽哇的博客-CSDN博客第一步:我们使用命令行vim /etc/ssh/sshd_config 执行修改,强制保持 :wq! 系统不让我们修改这个文件"/etc/ssh/sshd_config""/etc/ssh/sshd_config" E212: Can't open file for writingPress ENTER or type command to continue 既然不让我...https://blog.csdn.net/u010883578/article/details/90201160最后提醒一句一定要查看IP是否正确,踩过坑!