您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)樹莓派如何構(gòu)建交叉編譯環(huán)境,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
宿主機(jī):CentOS 7 64bit
目標(biāo)硬件平臺(tái):raspberry Pi 2B+
GPIO操作庫:wiringPi
宿主機(jī)工作主目錄:/home/xxxxx/raspberryPi
git的安裝就不說了。
進(jìn)入工作主目錄
1,下載 樹莓官方 交叉編譯工具
git clone git://github.com/raspberrypi/tools.git
進(jìn)入tools/arm-bcm2708/目錄
如果是32位系統(tǒng),使用gcc-linaro-arm-linux-gnueabihf-raspbian/bin
如果是64位系統(tǒng),使用gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin (本例)
把它添加到環(huán)境變量:
sudo nano ~/.bashrc (~表示home目錄)
把 export PATH=$PATH:$HOME/raspberryPi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
添加到文件結(jié)尾,保存退出
使用 source ~/.bashrc 使其生效,或者注銷/重啟
在任意目錄下:輸入 arm-linux-gnueabihf-gcc -v 如果可以找到編譯器,說明OK
返回到工作主目錄
2,下載wiringPi (http://wiringpi.com/download-and-install/)
git clone git://git.drogon.net/wiringPi
在宿主機(jī)上下載是為了用其頭文件,所以不要進(jìn)入目錄 ./build
3,下載自己的開發(fā)目錄,根據(jù)自己的情況
git clone https://git.oschina.net/xxxxx.git
在目標(biāo)硬件平臺(tái)上,
同上下載wiringPi到某個(gè)目錄,然后這里要進(jìn)入目錄去 ./build
這樣在 /usr/local/lib 目錄下 會(huì)生成 libwiringPiDev.so.2.25 和 libwiringPi.so.2.25 (版本號(hào)和lib目錄位置有差異,可以先find一下)
通過某種方式,把這些lib拷貝到宿主機(jī)工作目錄上。比如拷貝到 /home/xxxxx/raspberryPi/rpi2Dev/wiringPi_Lib目錄下
在宿主機(jī)上, 進(jìn)入到/home/xxxxx/raspberryPi/rpi2Dev/wiringPi_Lib目錄下
創(chuàng)建其無版本號(hào)的軟連接:
ln -s libwiringPi.so.2.25 libwiringPi.so
ln -s libwiringPiDev.so.2.25 libwiringPiDev.so
如果源文件要引用此lib庫,則在makefile里面 -L/xxxx/xxxx -lwiringPi, 指定lib的位置
同時(shí),makefile還要指定包含文件的位置, -I 指定到 wiringPi目錄
參考makefile和源文件見結(jié)尾。
注意:其實(shí)理論上第三方的庫是可以在宿主機(jī)上交叉編譯的,而且應(yīng)該是那樣做的。
但是我打開wiringPi的 build看了,也在其目錄下找了, 沒有類似configure這樣的指定工具鏈的東西,
可能是我不懂,反正沒搞定。如果誰知道怎么搞,說出來大家分享下。
如上一切搞定后,就可以編碼編譯了,編譯出的bin如何上傳到樹莓派上,方法就很多了。
說一下我的方法。
因?yàn)閏entos上我有做網(wǎng)絡(luò)程序的開發(fā),所以有安裝nginx.
然后我會(huì)把自己生成bin的目錄軟連接到nginx的web目錄下,
這樣在樹莓派端,使用 curl 等工具就可以下載到可執(zhí)行文件了。非常方便。
在樹莓派上寫個(gè)下載并執(zhí)行腳本,很簡(jiǎn)單的事情。
#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是先在 目標(biāo)平臺(tái)上生成的 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; }
關(guān)于“樹莓派如何構(gòu)建交叉編譯環(huán)境”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。