文档章节

树莓派交叉编译环境构建(含 wiringPi)

何凯峰
 何凯峰
发布于 2015/12/30 11:52
字数 862
阅读 1599
收藏 5

宿主机: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;
}


© 著作权归作者所有

何凯峰
粉丝 3
博文 16
码字总数 4528
作品 0
高级程序员
私信 提问
树莓派使用DHT11温湿度传感器

一、相关介绍 DHT11介绍: DHT11是一款比较便宜的温湿度传感器模块。读取数据只需要占用一个IO口。能够同时测量温度和相对湿度。 DHT11的数据手册可以看这里:http://wenku.baidu.com/view/1...

李鱼跃龙门
2014/06/07
19.9K
18
香蕉派 banana pi BPI-M2_WiringPI 测试成功 代码已经上传GITHUB

香蕉派 banana pi BPI-M2WiringPI 测试成功,代码已经上传到GITHUB BPI wiringpi 由树莓派最新的WiringPi代码修改过来,完全与树莓派的使用方法一样。 GPIO库与测试代码完全公开在GITHUB上:...

bananapi
2015/08/17
605
0
[翻译完成] 开源LCD触摸屏驱动

让树莓派支持uPD161704A和XPT2046芯片的240×320触摸屏驱动库 这个C库可以让你的树莓派支持µPD161704A和XPT2046芯片. µPD161704A是一个240 x 320像素LCD屏幕控制器 , XPT2046是搭配的触摸屏...

八宝粥
2013/06/29
1K
2
Ubuntu 16.04 MATE 版本为更好支持树莓派

Ubuntu的MATE项目负责人Martin Wimpress今天宣布推出Ubuntu 16.04 MATE第二个Beta版本,Ubuntu 16.04 MATE专门支持树莓派3和树莓派2单板计算机。 支持树莓派的Ubuntu MATE操作系统采用Linux...

linuxprobe
2016/04/10
14.1K
18
[翻译完成] 树莓派LCD显示器适配器

我们之前发布了一款" 树莓派LCD显示器适配器 " , 你可以用我们的LCD屏(ITDB02-2.4E和ITDB02-2.8)直接连上树莓派使用. 在这里我们为这两款屏幕提供一些demo代码 – demo代码由Henning提供的U...

八宝粥
2013/06/29
3.1K
1

没有更多内容

加载失败,请刷新页面

加载更多

JS实现使用Math.random()函数生成n到m间的随机数字

Math.random()函数返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) 生成n-m,包含n但不包含m的整数: 第一步算出 m-n的值,假设等于w 第二步Math.random()*w 第三步Math.random()*w+n...

张兴华ZHero
25分钟前
4
0
入门了解Service Mesh + Istio?从本文开始

下周六,深圳,阔别已久的线下技术沙龙要和你见面啦! 现场有Rancher Labs研发经理demo刚刚发布的Rancher 2.3中的Istio、Windows容器、集群模板等功能及使用,还有k3s首次线下workshop,由R...

RancherLabs
26分钟前
4
0
Gradle 发布 Jar 到 Archiva 时提示不能 Overwriting released artifacts is not allowed

系统提示错误信息: Received status code 409 from server: Overwriting released artifacts is not allowed. 这是在 Archiva 默认的配置下如果你不是使用 snapshot 配置的话,是不允许对仓...

honeymoose
27分钟前
4
0
二维码插件之qrcode.min.js

文件链接百度云地址 https://pan.baidu.com/s/1nWiBuT4Z7WOAMoUEFL8PZg 入门 http://www.jq22.com/jquery-info294 使用jquery.qrcode.min.js实现前台二维码生成(带Logo) https://blog.csd......

木九天
37分钟前
3
0
开源 java CMS - FreeCMS2.8 自定义标签 commentPage

项目地址:http://www.freeteam.cn/ commentPage 根据参数提取评论对象。 参数 说明 siteid 站点id objtype 评论对象类型 objid 评论对象id membername 会员名称 isanonymous 是否匿名 1是 ...

freeteam
37分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部