树莓派wiringPi安装及交叉编译

╰+攻爆jí腚メ 2022-11-18 02:26 330阅读 0赞

1.树莓派wiringPi

1.wiringPi安装

方案A——使用GIT工具

  1. sudo apt-get install git-core
  2. //如果在这个过程中出现错误,尝试更新软件,例如输入以下指令:
  3. sudo apt-get update
  4. sudo apt-get upgrade
  5. //紧接着可以通过GIT获得wiringPi的源代码
  6. git clone https://github.com/WiringPi/WiringPi.git
  7. //若需要更新wiringPi。
  8. cd wiringPi
  9. git pull origin
  10. //进入wiringPi目录并安装wiringPi
  11. cd wiringPi
  12. ./build

安装完成后,在 /usr/lib/ 文件夹下会多出 libwiringPiDev.so libwiringPi.so git-core 三个文件,并且软链接到

  1. lrwxrwxrwx 1 root root 37 Apr 12 04:10 libwiringPiDev.so -> /usr/local/lib/libwiringPiDev.so.2.60
  2. lrwxrwxrwx 1 root root 34 Apr 12 04:10 libwiringPi.so -> /usr/local/lib/libwiringPi.so.2.60

以及下列查找

  1. :/#sudo find . -name libwiring*
  2. ./usr/lib/libwiringPiDev.so
  3. ./usr/lib/libwiringPi.so
  4. ./usr/local/lib/libwiringPi.so.2.60
  5. ./usr/local/lib/libwiringPiDev.so.2.60
  6. ./usr/local/lib/libwiringPiDev.so
  7. ./usr/local/lib/libwiringPi.so
  8. //以下为源码目录
  9. ./home/ /WiringPi/debian/libwiringpi2.shlibs
  10. ./home/ /WiringPi/debian/libwiringpi-dev.dirs
  11. ./home/ /WiringPi/debian/libwiringpi-dev.install
  12. ./home/ /WiringPi/debian/libwiringpi2.install
  13. ./home/ /WiringPi/wiringPi/libwiringPi.so.2.60
  14. ./home/ /WiringPi/devLib/libwiringPiDev.so.2.60
  15. lrwxrwxrwx 1 root root 22 Apr 12 04:10 libwiringPiDev.so -> libwiringPiDev.so.2.60
  16. -rwxr-xr-x 1 root root 27808 Apr 12 04:10 libwiringPiDev.so.2.60
  17. lrwxrwxrwx 1 root root 19 Apr 12 04:10 libwiringPi.so -> libwiringPi.so.2.60
  18. -rwxr-xr-x 1 root root 69852 Apr 12 04:10 libwiringPi.so.2.60
  19. 方案B——直接下载和解压

简单的输入以下网址:

https://git.drogon.net/?p=wiringPi;a=summary

SouthEast

点击图中的snapshot便可下载最新版本。
你可能下载到一个名为wiringPi-98bcb20.tar.gz的压缩包,需要注意的是98bcb20只是一个版本号,当你下载wiringPi的时候该版本号可能会发生改变。
你需要解压wiringPi源代码并进行安装,可输入以下指令:

  1. tar xfz wiringPi-98bcb20.tar.gz
  2. cd wiringPi-98bcb20
  3. ./build
  4. -rwxr-xr-x 1 agpf agpf 5320 Apr 12 04:09 build
  5. -rw-r--r-- 1 agpf agpf 7651 Apr 12 04:09 COPYING.LESSER
  6. drwxr-xr-x 2 agpf agpf 4096 Apr 12 04:09 debian
  7. drwxr-xr-x 3 agpf agpf 4096 Apr 12 04:09 debian-template
  8. drwxr-xr-x 2 agpf agpf 4096 Apr 12 04:10 devLib
  9. drwxr-xr-x 7 agpf agpf 4096 Apr 12 04:09 examples
  10. drwxr-xr-x 8 agpf agpf 4096 Apr 12 04:09 .git
  11. drwxr-xr-x 3 agpf agpf 4096 Apr 12 04:09 .github
  12. -rw-r--r-- 1 agpf agpf 88 Apr 12 04:09 .gitignore
  13. drwxr-xr-x 2 agpf agpf 4096 Apr 12 04:10 gpio
  14. -rw-r--r-- 1 agpf agpf 667 Apr 12 04:09 INSTALL
  15. -rw-r--r-- 1 agpf agpf 1795 Apr 12 04:09 newVersion
  16. -rw-r--r-- 1 agpf agpf 865 Apr 12 04:09 People
  17. drwxr-xr-x 2 agpf agpf 4096 Apr 12 04:09 pins
  18. -rw-r--r-- 1 agpf agpf 1365 Apr 12 04:09 README.md
  19. -rwxr-xr-x 1 agpf agpf 151 Apr 12 04:09 update
  20. -rw-r--r-- 1 agpf agpf 5 Apr 12 04:09 VERSION
  21. -rw-r--r-- 1 agpf agpf 72 Apr 12 04:09 version.h
  22. drwxr-xr-x 2 agpf agpf 4096 Apr 12 04:10 wiringPi
  23. drwxr-xr-x 2 agpf agpf 4096 Apr 12 04:09 wiringPiD

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.

测试wiringPi是否安装成功

wiringPi包括一套gpio命令,使用gpio命令可以控制树莓派上的各种接口,通过以下指令可以测试wiringPi是否安装成功。

  1. gpio -v
  2. gpio readall

2.wiringPi库交叉编译(交叉编译工具)

首先需要把树莓派的wiringPi的库拿过来用。

将树莓派下该文件移植到Linux操作系统下:./usr/local/lib/libwiringPi.so.2.60

为其创建软链接

  1. //具体用法是:ln -s 源文件 目标文件。
  2. ln -s libwiringPi.so.2.60 libwiringPi.so
  3. //交叉编译
  4. arm-linux-gnueabihf-gcc main.c -I /交叉编译libwiringPi.so存放目录 -L. -lwiringPi

3.静态库与动态库搜索路径设置

1. 连接和运行时库文件搜索路径到设置

  1. 库文件在**链接**(**静态库和共享库**)和**运行**(**仅限于使用共享库的程序**)时被使用,其搜索路径是在系统中进行设置的。一般 Linux 系统把 **/lib** 和 **/usr/lib** 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。设置库文件的搜索路径有下列两种方式,可任选其一使用:

在 /etc/ld.so.conf 文件中添加库的搜索路径。(或者在/etc/ld.so.conf.d 下新建一个.conf文件,将搜索路径一行一个加入-junziyang)
将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择添加方法也极其简单,将库文件的绝对路径直接写进去就OK了,一行一个。例如: 库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。设置库文件的搜索路径有下列两种方式,可任选其一使用:
1、在 /etc/ld.so.conf 文件中添加库的搜索路径。(或者在 etc/ld.so.conf.d 下新建一个 .conf 文件,将搜索路径一行一个加入-junziyang)
将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择添加方法也极其简单,将库文件的绝对路径直接写进去,一行一个。例如:

  1. /usr/X11R6/lib
  2. /usr/local/lib
  3. /opt/lib

Note:这种搜索路径的设置方式对于程序链接时的库(包括共享库和静态库)的定位已经足够了,但是对于使用了共享库的程序的执行还是不够的。这是因为为了加快程序执行时对共享库的定位速度,避免使用搜索路径查找共享库的低效率,所以是直接读取库列表文件 /etc/ld.so.cache 从中进行搜索的。/etc/ld.so.cache 是一个非文本的数据文件,不能直接编辑,它是根据 /etc/ld.so.conf 中设置的搜索路径由 /sbin/ldconfig 命令将这些搜索路径下的共享库文件集中在一起而生成的(ldconfig 命令要以 root 权限执行)。

  1. 因此,为了保证程序执行时对库的定位,在 /etc/ld.so.conf 中进行了库搜索路径的设置之后,还**必须要运行 /sbin/ldconfig** 命令更新 /etc/ld.so.cache 文件之后才可以。**ldconfig** ,简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache 以供使用。因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下 /sbin/ldconfig使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果编译过程中抱错,缺少xxx库,去查看发现明明就在那放着,搞的想大骂computer蠢猪一个。
  2. 这种设置方式需要 root 权限,以改变 /etc/ld.so.conf 文件并执行 /sbin/ldconfig 命令。而且,当系统重新启动后,所有的基于 GTK2 的程序在运行时都将使用新安装的 GTK+ 库。不幸的是,由于 GTK+ 版本的改变,这有时会给应用程序带来兼容性的问题,造成某些程序运行不正常。为了避免出现上面的这些情况,在 GTK+ 及其依赖库的安装过程中对于库的搜索路径的设置将采用另一种方式进行。这种设置方式不需要 root 权限,设置也简单。
  3. 在程序链接时,对于库文件(静态库和共享库)的搜索路径,除了上面的设置方式之外,**还可以通过 -L 参数显式指定**。因为用 -L 设置的路径将被优先搜索,所以在链接的时候通常都会以这种方式直接指定要连接的库的路径。

2、 在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径。
设置方式:

  1. export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH

可以用下面的命令查看 LD_LIBRAY_PATH 的设置内容:

  1. echo $LD_LIBRARY_PATH

至此,库的两种设置就完成了。

2.交叉编译时候如何配置连接库的搜索路径

交叉编译的时候不能使用本地(i686机器,即PC机器)机器上的库,但是在做编译链接的时候默认的是使用本地库,即/usr/lib, /lib两个目录。因此,在交叉编译的时候,要采取一些方法使得在编译链接的时候找到需要的库。

  1. 首先,要知道:编译的时候只需要头文档,真正实际的库文档在链接的时候用到。 (这是我的理解,假如有不对的地方,敬请网上各位大侠指教) 然后,讲讲如何在交叉编译链接的时候找到需要的库。
  2. 1)交叉编译时候直接使用 **-L和-I **参数指定搜索**非标准的*库文档 ***和***头文档 ***的路径。例如:
  3. arm-linux-gcc test.c -L/usr/local/arm/2.95.3/arm-linux/lib -I/usr/local/arm/2.95.3/arm-linux/include
  4. 2)使用ld.so.conf文档,将用到的库所在文档目录添加到此文档中,然后使用ldconfig命令刷新缓存。
  5. 3)使用如下命令:
  6. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/2.95.3/arm-linux-lib

通过设定环境变量 LD_LIBRARY_PATH 也可以指定动态库搜索路径。当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号”:”分隔。

  1. 4)交叉编译时使用软件的configure参数。例如我编译minigui-1.3.3,使用如下配置:
  2. #!/bin/bash
  3. rm -f config.cache config.status
  4. ./configure --build=i686-linux --host=arm-linux --target=arm-linux /
  5. CFLAGS=-I/usr/local/arm/2.95.3/arm-linux/include /
  6. LDFLAGS=-L/usr/local/arm/2.95.3/arm-linux/lib /
  7. --prefix=/usr/local/arm/2.95.3/arm-linux /
  8. --enable-lite /
  9. --disable-galqvfb /
  10. --disable-qvfbial /
  11. --disable-vbfsupport /
  12. --disable-ttfsupport /
  13. --disable-type1support /
  14. --disable-imegb2312py /
  15. --enable-extfullgif /
  16. --enable-extskin /
  17. --disable-videoqvfb /
  18. --disable-videoecoslcd

这里我配置了CFLAGS和LDFLAGS参数,这样一来,我就不用去修改每个Makefile里-L和-I参数了,也不用再去配置 LD_LIBRARY_PATH或改写ld.so.conf文档了。

发表评论

表情:
评论列表 (有 0 条评论,330人围观)

还没有评论,来说两句吧...

相关阅读