樹莓派交叉編譯環境構建(含 wiringPi)


宿主機:CentOS 7  64bit

目標硬件平台:raspberry Pi 2B+

GPIO操作庫:wiringPi

宿主機工作主目錄:/home/xxxxx/raspberryPi

 

git的安裝就不說了。

 

進入工作主目錄

1,下載 樹莓官方 交叉編譯工具 

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

進入tools/arm-bcm2708/目錄

如果是32位系統,使用gcc-linaro-arm-linux-gnueabihf-raspbian/bin

如果是64位系統,使用gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin (本例)

把它添加到環境變量:

sudo nano ~/.bashrc  (~表示home目錄)

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

添加到文件結尾,保存退出

使用   source  ~/.bashrc  使其生效,或者注銷/重啟

 

在任意目錄下:輸入 arm-linux-gnueabihf-gcc -v  如果可以找到編譯器,說明OK

返回到工作主目錄

 

2,下載wiringPi (http://wiringpi.com/download-and-install/

git clone git://git.drogon.net/wiringPi

在宿主機上下載是為了用其頭文件,所以不要進入目錄 ./build

 

3,下載自己的開發目錄,根據自己的情況

 git clone https://git.oschina.net/xxxxx.git

 

在目標硬件平台上,

同上下載wiringPi到某個目錄,然后這里要進入目錄去 ./build

這樣在 /usr/local/lib 目錄下 會生成 libwiringPiDev.so.2.25 和 libwiringPi.so.2.25 (版本號和lib目錄位置有差異,可以先find一下)

通過某種方式,把這些lib拷貝到宿主機工作目錄上。比如拷貝到 /home/xxxxx/raspberryPi/rpi2Dev/wiringPi_Lib目錄下

 

在宿主機上, 進入到/home/xxxxx/raspberryPi/rpi2Dev/wiringPi_Lib目錄下

創建其無版本號的軟連接:

ln -s  libwiringPi.so.2.25   libwiringPi.so

ln -s  libwiringPiDev.so.2.25   libwiringPiDev.so

如果源文件要引用此lib庫,則在makefile里面  -L/xxxx/xxxx -lwiringPi, 指定lib的位置

同時,makefile還要指定包含文件的位置, -I 指定到 wiringPi目錄

參考makefile和源文件見結尾。

 

注意:其實理論上第三方的庫是可以在宿主機上交叉編譯的,而且應該是那樣做的。

但是我打開wiringPi的 build看了,也在其目錄下找了, 沒有類似configure這樣的指定工具鏈的東西,

可能是我不懂,反正沒搞定。如果誰知道怎么搞,說出來大家分享下。

 

如上一切搞定后,就可以編碼編譯了,編譯出的bin如何上傳到樹莓派上,方法就很多了。

說一下我的方法。

因為centos上我有做網絡程序的開發,所以有安裝nginx.

然后我會把自己生成bin的目錄軟連接到nginx的web目錄下,

這樣在樹莓派端,使用 curl 等工具就可以下載到可執行文件了。非常方便。

在樹莓派上寫個下載並執行腳本,很簡單的事情。

#make file of raspberri pi,cross CC=arm-linux-gnueabihf-gcc   LD=$(CC) TARGET=hello OBJECT=hello.o  RASPBERRY_PI_DIR=/home/xxxxx/raspberryPi WIRING_PI_INCLUDE_PATH=$(RASPBERRY_PI_DIR)/wiringPi/wiringPi #此lib是先在 目標平台上生成的 WIRING_PI_LIB_PATH=$(RASPBERRY_PI_DIR)/rpi2Dev/wiringPi_Lib $(TARGET):$(OBJECT) $(LD) -o $(TARGET) $(OBJECT) -L$(WIRING_PI_LIB_PATH) -lwiringPi hello.o:hello.c  $(CC) -o hello.o -c hello.c -I$(WIRING_PI_INCLUDE_PATH) clean: rm -f $(TARGET) $(OBJECT) install: #sudo cp /home/xxxx/pi/bin/hello hello #cp -f $(TARGET) /usr/bin;chmod -R 777 /usr/bin/pushServer


 

#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <wiringPi.h>  int main(void)   {  int bright ;     printf("System start...\n");      if (wiringPiSetup () == -1) exit (1) ; pinMode (1, PWM_OUTPUT) ; while(1) { for (bright = 0 ; bright < 1024 ; ++bright) {   pwmWrite (1, bright) ;   delay (1) ; } for (bright = 1023 ; bright >= 0 ; --bright) {   pwmWrite (1, bright) ;   delay (1) ; } }    return 0; }


免責聲明!

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



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