交叉编译概念: 交叉编译是在一个平台上生成另一个平台上的可执行代码。例如:我们在ubnutu上写树莓派代码,并编译成可执行文件,如a.out,是在树莓派上运行,并不是在ubnutu上运行。 编译概念: 在一个平台上生成在该平台上可执行代码。 为什么要交叉编译: 平台上不允许或不能够安装我们所需要的编译器比如C51。 1.因为目的平台上的资源贫乏,无法运行我们所需要编译器。 2.树莓派是不是就不需要交叉编译? 要。树莓派有时有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也是代码,也要编译! 3.平台运行至少需要俩样东西:bootloader(启动引导代码)以及操作系统核心 宿主机:编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。比如windos电脑 目标机:用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。比如树莓派 交叉编译工具:交叉编译器、交叉工具链
如何配置交叉编译器以及环境变量: 交叉编译器下载地址:https://github.com/raspberrypi/tools
创建一个文件夹存放下载好的交叉编译器的压缩包。 从共享文件拷贝到目录:cp /mnt/hgfs/sharew/tools-master.zip2.拷贝过来以后用unzip指令解压压缩包 3.解压完成后cd进压缩包 4.在cd进arm-bcm2708的目录
5.再cd进gcc-linaro-arm-linux-gnueabihf-raspbian-x64目录 再cd进bin目录展开如下:我们用的就是arm-linux-gnueabihf-gcc 6.配置环境变量: (1)先echo $PATH 找到环境变量 (2)在pwd显示当前位置的环境变量 (3)用export PATH=(1)的环境变量的到games: 后面补(2)的环境变量
export PATH=/usr/lib/lightdm/lightdm:/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注意(以上这样子配饰临时的,换个窗口就不认识了)永久配置如下: 1.打开.bashrc文件:vi /home/CLC/.bashrc
2把上面(3)配置环境变量的代码放到.bashrc文件的最后一行。保存退出 3.用source /home/CLC/.bashrc使文件生效。
一。如何用交叉编译器编译项目到树莓派运行? 1.
arm-linux-gnueabihf-gcc xxx.c -I ./ -o xxx //(-I ./是在当前目录下去找头文件)file xxx是查看文件在哪个平台可运行。 2.拷贝到树莓派:
scp clientpi pi@192.168.31.128:/home/pi//pi是树莓派用户名,后面是树莓派IP地址,:/home/pi是拷贝到这个目录拷贝完输入树莓派密码就拷贝过去了。类似于一个带密码的FTP服务器 二。带wiringPi库的如何交叉编译 安装wiringPi库,解压完从共享文件考到文件夹里。 cd进去wiringpi里用.build安装: 安装完还不能用,因为因为链接的库的格式不对,是宿主机的平台,出现以下错误 arm-linux-gnueabihf-gcc demo2.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 要把树莓派的wringPI库拿上来用:树莓派的库在cd /usr/lib/ 里的.so 但是.so又软链接到2.50 把libwiringPi.2.5传给主机,再主机上用软链接弄:
**
** 这就涉及到了软连接和硬链接的概念: 软链接: 参考文章: https://www.cnblogs.com/zhangna1998517/p/11347364.html 概念: 1. 软链接文件有类似于Windows的快捷方式。 2. 在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。 3. 你选定的位置上生成一个文件的镜像,不会占用磁盘空间 如何生成: ln -s libwiringPi.so.2.50 libwiringPi.so 指令 参数 要被链接的文件 软链接文件名字 硬链接:ln libwiringPi.so.2.50 libwiringPi.so 它会在你选定的位置上生成一个和源文件大小相同的文件 软连接生成: 完了从当前路径找库用-L .
linux内核编译: linux 树莓派内核下载地址:https://github.com/raspberrypi 注意要看树莓派内核版本,下载相应的版本。可以用uname-r查看。 编译过程: 1.主机解压内核文件。