交叉编译等


前言

交叉编译概念、安装、使用


一、交叉编译概念

交叉编译概念:是在一个平台上生成另一个平台上的可执行代码。

常见交叉编译例子:
1、在Windows PC上,利用ADS(ARM开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。
2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。
3、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。

为什么要交叉编译:
  目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;
  目的平台上的资源贫乏,无法运行我们所需要编译器;
  目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。

宿主机:编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。
目标机:用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。

二、交叉编译工具链

1.下载安装

树莓派github中tool一栏,下载安装包,放到虚拟机的共享文件夹中

https://github.com/raspberrypi

在这里插入图片描述
在虚拟机中,先将共享文件夹中的安装包cp到工作目录下的文件夹,对其进行解压

unzip tools-master.zip

进入到bin文件夹
在这里插入图片描述
查看工具链是否可用(通过查看工具链的版本)

>./arm-linux-gnueabihf-gcc -v

在这里插入图片描述

2.使用

将其配置到环境变量中,不用每次使用arm-linux-gnueabihf-gcc时都进入到bin文件夹中

1>.临时有效,重新开启一个终端,便不可用

打印出此时的绝对路径

>pwd
/home/hekun/A-MYFILE/tool-master/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

修改环境变量

>export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/hekun/A-MYFILE/tool-master/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

切换文件夹,查看工具链是否可用(通过查看工具链的版本)

>arm-linux-gnueabihf-gcc -v

在这里插入图片描述

2>.永久有效

修改工作目录下的.bashrc 隐藏文件

>cd 
>vi .bashrc

在其末尾加上

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/hekun/A-MYFILE/tool-master/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

保存退出后让其立即生效,即可在多个终端直接使用

>source .bashrc

三、带wiringPi的库的交叉编译,

  正常来说,要先交叉编译wiringPi库,编译出的库适合树莓派,链接库的格式也是适合树莓派的的。

  可以直接将树莓派的wringPI库拿过来用
在树莓派中

>cd /lib
>scp libwiringPi.so.2.52 hekun@192.168.1.108:~/A-MYFILE/recive

在虚拟机中生成软链接

>ln -s libwiringPi.so.2.52 libwiringPi.so 

在虚拟机中生成树莓派上可执行的文件

>arm-linux-gnueabihf-gcc demo1.c -I /home/hekun/A-MYFILE/WiringPi/WiringPi/wiringPi -L /home/hekun/A-MYFILE/recive -lwiringPi

总结

1.平台运行需要两样至少东西:bootloader(启动引导代码)以及操作系统核心

2.修改环境变量也可以:export PATH = $PATH:XXX
PATH决定了shell到哪些目录里寻找命令或程序
env查看所有的环境变量,包括PATH,SHELL,HOME,LANGUGE等等
查看单个环境变量:echo $PTAH
export表示临时修改环境变量
长久有效需修改配置文件:/etc/profile是针对所有用户有效
           ~/.bashrc是针对当前用户有效

3.touch:创建新的空文件

4.file查看文件属性:查看可执行文件是在x86上还是在arm上运行

5.-I(大写i):指定寻找头文件的路径
 -L:制定寻找库文件的路径

6.grep gcc* -nir:在当前文件夹中的所有文件中查找gcc  n:显示行号,i:不区分大小写,r:递归查找

7.在虚拟机中使用scp指令时,出现以下报错:
在这里插入图片描述
解决方法:修改配置文件

>sudo vim /etc/ssh/ssh_config

在文件末尾添加

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

8.在树莓派中使用scp命令时,出现以下报错:
在这里插入图片描述
解决方法:打开虚拟机的22号端口

>sudo apt-get install openssh-server
>sudo apt-get install ufw
>sudo ufw enable
>sudo ufw allow 22

9.ubuntu下解压rar文件:

>sudo apt install rar  //安装rar解压工具
>rar x test.rar  //保持原来的目录结构解压

10.软链接:类似于Windows的快捷方式;文件实际上是一个文本文件,其中包含的有另一文件的位置信息;在选定的位置上生成一个文件的镜像,不会占用磁盘空间
 硬链接:在选定的位置上生成一个和源文件大小相同的文件。硬连接的作用是允许一个文件拥有多个有效路径名,防止“误删”的功能。当对应该目录的索引节点有一个以上的连接,只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放

>ln -s libwiringPi.so.2.50 libwiringPi.so  //生成软链接
>ln libwiringPi.so.2.50 libwiringPi.so   //生成硬链接

11.scp指令:

>scp clientInPi pi@192.168.43.30:/home/pi
//指令 文件名 开发板用户名@开发板地址:文件发送到开发板的指定路径
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值