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

宿主機:CentOS 7  64bitlinux

目標硬件平臺:raspberry Pi 2B+nginx

GPIO操做庫:wiringPigit

宿主機工做主目錄:/home/xxxxx/raspberryPigithub


git的安裝就不說了。web


進入工做主目錄shell

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

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

進入tools/arm-bcm2708/目錄網絡

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

若是是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;
}
相關文章
相關標籤/搜索