RaspberryPi交叉編譯環境配置-Ubuntu & wiringPi & Qt


1、配置RaspberryPi交叉編譯環境:

  在開發RaspberryPi Zero的過程中,由於Zero板卡的CPU的處理性能比較弱,因此其編譯的性能比較弱,需要將代碼在PC電腦上交叉編譯完成之后再拷貝到Zero上調試運行。配置交叉編譯環境的基本步驟如下所示:

Step1:從github網站獲取raspberryPi交叉編譯工具包:https://github.com/raspberrypi/tools

git clone git@github.com:raspberrypi/tools.git

上述文件下載完之后的內容如下所示(其中arm-bcm2708文件夾中的內容為交叉編譯器)

Step2:將交叉編譯器配置到環境變量:

編輯環境變量配置文件.bashrc,在文件的末尾添加如下的代碼(注意路徑,不同的路徑記得修改)

export PATH=$PATH:~/Raspberry_Project/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

配置完成之后,需要執行source指令,讓.bashrc生效:

source ~/.bashrc

Step3:測試交叉編譯環境

如下圖所示,在ubuntu命令行中輸入如下指令:

arm-linux-gnueabihf-gcc -v

有此圖說明配置成功。

2、交叉編譯執行main.c文件:

Step1:編寫了如下的測試文件:

1 #include <stdio.h>
2 
3 int main(void)
4 {
5         printf("Test the cross-compile-env for raspberrypi!\n");
6         return 1;
7 }

Step2:使用如下的指令編譯上述文件:

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

編譯的結果如下:

將編譯生成的main文件拷貝到樹莓派上,修改執行權限,執行即可。

3、交叉編譯過程中需要鏈接第三方的庫文件:

在編寫程序的過程中,我們需要使用到wiringPi庫相關的內容,因此需要將wiringPi的文件引入。

Step1:首先下載wiringPi的程序包:https://github.com/mm1994uestc/WiringPi。可以通過github直接下載源代碼:

git clone git@github.com:mm1994uestc/WiringPi.git

下載完成之后進入文件夾安裝wiringPi的庫,安裝方法參考這里:https://www.cnblogs.com/uestc-mm/p/6290521.html

注:安裝過程中如果出現問題,請使用sudo權限操作,sudo make install

重點:將wiringPi安裝在樹莓派之后,我們可以在其編譯文件夾下面找到編譯成功的wiringPi庫程序或者安裝在/usr/lib當中,如下所示:

libwiringPi是基本的wiringPi程序庫

我們可以將這些文件拷貝到Ubuntu環境下,為交叉編譯做好准備,如下所示:

a. devLib:Raspberry basical hardware driv.

b. examples:Some examples for the wiringPi Lib.

c. gpio:gpio demo to show the control of gpio.

d. libwiringPi.so:Baisic wiringpi library usefull when you are compile the c code.

e. main:Executiable file for Raspberry.

f. main.c:The c source code.

g. Makefile:Used to compile the C Code into executibale binary file.

h. wiringPi:The source Code of wiringPi(include .c & .h file),when you are compile the code,it needed.

i. wiringPiD:Other devices Library Source Code if you used it,you need to include the lib and .h file.

Step2:安裝拷貝完成之后我們編寫如下的程序:

#include <stdio.h>
#include <stdlib.h>
#include "wiringPi.h"

int main(int argc, char **argv)
{
        if(argc<2){
                printf("You should give a param while call the program1\n");
                return 0;
        }
        int pinNumber = atoi(argv[1]);
        printf("The control pin number is:%d\n",pinNumber);
        if(-1 == wiringPiSetup()){
                printf("Setup wiringPi failed!\n");
                return 0;
        }
        pinMode(pinNumber, OUTPUT);
        while(1){
                digitalWrite(pinNumber,0);
                delay(800);
                digitalWrite(pinNumber,1);
                delay(800);
        }
        printf("Hello, you do it succeed!!!\n");
        return 0;
}

Step3:編譯上述程序,這里編寫了簡單的Makefile文件,如下所示:

main:main.c
    arm-linux-gnueabihf-g++ main.c -o main -L. -lwiringPi -IwiringPi
clean:
    rm main

注:這里的路徑-I是wiringPi的安裝路徑。一定要應用wiringPi的相關文件的路徑才能調用wiringPi的庫,舉一反三,其他的庫也可以類似的方式,對於靜態的library,我們可以使用-l的方式來鏈接,如果在RaspberryPi的本地,我們可以使用如下的方式(這里鏈接了math數學庫&wiringPi庫):

gcc -c main.c -o main -lwiringPi -lm

-L.的意義表示,程序調用的庫在當前文件目錄下,如果不再請舉一反三,設置Library庫的絕對路徑。-I的意思是include的意思,將wiringPi的.h文件包括進來。

關於Makefile鏈接相關的內容參考這里:https://www.cnblogs.com/starf/p/3652563.html

Step4:make生成RaspberryPi的可執行文件,通過scp拷貝到Raspberry執行即可:

4、Reference:

交叉編譯參考:https://www.cnblogs.com/xieyajie/p/4699724.html

wiringPi官網:http://wiringpi.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM