树莓派与Ubuntu交叉编译学习

文章目录


前言

在日常编写程序的时候,目标开发板没有可编译的平台就需要在另一个平台上交叉编译成目标开发板可以运行的代码,本文记录在Ubuntu上交叉编译给树莓派开发板使用。

一、交叉编译是什么?

        交叉编译就是在一个平台上生成另一个平台上可以运行的代码。在学习c51的时候,我们经常使用keil编写程序,keil在windows上运行,最后生成xx.hex文件,最后这个可执行文件是在c51运行而不是在windows运行,这个过程就需要用到交叉编译,只是keil内部集成了交叉编译,我们看不到而已。

        总之,交叉编译是在一个平台上生成目标平台的可执行代码,比如c51,stm32交叉编译过程在keil内部。

二、为什么要交叉编译?

        交叉编译的原因很简单,平台上不允许或不能够安装我们所需要的编译器,比如C51

        因为目的平台上的资源贫乏,无法运行我们所需要编译器

        树莓派功能强大是不是不需要交叉编译?答案是需要,树莓派有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也是代码,也要编译!

三、交叉编译需要什么?

        交叉编译器、交叉编译工具链。

 下面来介绍一下交叉编译工具链的安装:

        1.https://github.com/raspberrypi/  

            进入网站下载所需要的工具

    

 2.下载成功后可以拷贝到Ubuntu工作目录

3.使用命令解压unzip tools-master.zip

4.进入到下面这个目录中就能找到好多命令,因为是树莓派使用需要arm-linux-gnueabihf-gcc

 cd /home/aqh/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

5.配置环境变量

pwd获得当前路径

/home/aqh/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

echo $PATH 获得当前环境变量的值

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:后面还有不需要关注,只需要关注前面的。

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

这种配置方式是临时有效,当我们误关闭终端或者再打开一个终端,交叉编译命令就失效了。

得换一种永久配置的方式,一劳永逸。

        修改工作目录下的.bashrc 隐藏文件vi /home/aqh/.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-gnueabihf-gcc -v来验证一下是否安装成功,成功可以查看到版本号

三、如何生成树莓派可执行文件并下载到树莓派上?

1.编译生成树莓派可执行程序

        arm-linux-gnueabihf-gcc  xxx.c -o xxx

        使用上面的命令就把xxx.c文件生成xxx,树莓派就能运行这个xxx程序

2.下载可执行程序到树莓派运行

        scp xxx  [email protected]:/home/pi

       scp—— 指令   xxx——文件名

        [email protected]——树莓派用户名@树莓派网络地址

        /home/pi——树莓派的绝对路径

四、带wiringPi库的程序如何交叉编译?

        1.给Ubuntu安装wiringPi库

        2. 先要交叉编译wiringPi库,编译出的库适合树莓派,在交叉编译程序的时候链接的库就是适合树莓派使用的。

        3.通过-I(大写i)  -L来指定库的路径   -l(小写L) 来链库

树莓派方法:   

1.我首先从树莓派上把树莓派拷贝到Ubuntu上,libwiringPi.so.2.50      
 2.给这个库文件创建软链接:

        软链接: 1. 软链接文件有类似于Windows的快捷方式。
                     2. 在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
                     3. 你选定的位置上生成一个文件的镜像,不会占用磁盘空间

        生成软链接:

                ln -s libwiringPi.so.2.50  libwiringPi.so通过ls -l会发现.so文件会有一个箭头指向库文件

        生成硬链接:

                ln  libwiringPi.so.2.50  libwiringPi.so它会在你选定的位置上生成一个和源文件大小相同的文件


软硬链接参考:Linux创建连接命令 ln -s创建软连接 - 张娜nana - 博客园


猜你喜欢

转载自blog.csdn.net/qq_44848795/article/details/122342889