树莓派WiringPi ARM64支持

您所在的位置:网站首页 树莓派armhf 树莓派WiringPi ARM64支持

树莓派WiringPi ARM64支持

2024-07-12 00:39| 来源: 网络整理| 查看: 265

        写在开头:这篇文章记录了折腾树莓派WiringPi并支持ARM64的过程,如果只想让你的WiringPi支持ARM64而不想看挂神长篇大论叙述的话请跳转到文章底部。

        前阵子挂神在某宝购买了树莓派4B,因为买的是8G版本,必定就要安装64位的系统。于是在官网下载了测试的64位系统(下载地址见文末)。

        学编程从“Hello World!”开始,学嵌入式从点灯做起,既然上手树莓派怎么能不试试GPIO口呢。于是按照网上的一些说法使用了WiringPi库。

        先输入个gpio -v看看。什么情况,我树莓派的内存怎么没显示出来。

gpio -v

        但是这种事情都无伤大雅,我们接着gpio readall看看GPIO口,然后命令行输出了一段“Oops - unable to determine board type... model: 17”,这怎么能行,网上说去官网下载2.52版本的WiringPi安装就行了。

gpio readall

        安装上新版本之后输入gpio readall有GPIO列表了,gpio -v也能正确显示出内存大小。

WiringPi-2.52

        本以为这件事就这么告一段落了。然而大的麻烦还在后面。

        因为某些需求,我使用WiringPi编写了一个PCA9685的驱动文件打包成一个动态库(.so)给别人用。使用g++编译时提示不兼容的WiringPi库,一查发现wiring库是32位的,我g++版本是64位的,编译不了。于是傻傻的想安装32位版本的g++,经过一顿折腾之后装上了32位的g++,还没来得及高兴结果桌面又炸了(想知道炸成啥样的可以试试自己安装g++:armhf及其依赖,装完之后不出意外桌面上的文件管理器和终端就打不开了,reboot一下就会得到一个新的桌面主题。没找到恢复桌面的办法,试完基本上可以重装系统了。为什么说又,因为之前安装OpenCV的时候版本不合适想卸了装其他版本,卸完apt autoremove了一下桌面炸了,查找资料无果之后重装系统了)。

WiringPi不兼容WiringPi.so为32位

        经过这次教训之后我突然意识到了在编程里面有种叫做交叉编译的东西,于是apt list g++*看了一下,不出意外在程序包里有个在arm64为armhf交叉编译的g++-arm-linux-gnueabihf,下载安装之后使用arm-linux-gnueabihf-g++成功编译出了动态库。

WiringPi armhf编译

    动态库编译出来了当然就是看一下能不能用,使用python的ctypes模块加载测试,python说我的库是32位的程序集,无法被调用。做到这里我意识到,我在64位的系统上写程序,虽然64位系统可以兼容32位程序,但是64位的程序却是不能兼容32位库的。于是我只能去查找WiringPi ARM64的包,一路查找到了官网,却看到了作者的一篇名为 wiringPi – deprecated…的文章,具体内容大家可以去官网查看(链接见文末),文章内提及了作者将停止维护WiringPi的公开版本,并且作者也关闭了WiringPi的git库。

python调用测试

        这种消息直接给ARM64上的WiringPi判了死刑,没了源码连自行编译ARM64平台都不行,我在网上大致搜索了一下,大家使用WiringPi都是在官网下载编译好的deb包或者是从官方的git库clone源码进行编译。很明显这两种方法都不适合我,但是我没有放弃,抱着试一试的心态在github上搜索了一下wiringpi,居然有一个Mirror。于是我立刻就把源码下载下来进行了一次编译,编译成功之后程序自动安装,gpio -v显示版本号2.60但是效果却和2.50一样,都无法正确显示设备内存。不过这也不影响,只要能用就行,但是使用的时候发现第一次编译出来的库还是32位,肯定是我有什么东西没设置好,查看了一下newVersion,里面写着一段Architecture: armhf原来指定了armhf架构,于是我把它修改成了Architecture: arm64再次编译安装,一切看起来毫无异常,那么来编译一下程序看看吧。

WiringPi ARM64编译

        一通操作之后32位和64位都无法编译了,错误提示是库的问题,64位找到了32位的库表示不兼容,32位找到了64位的库表示无法识别,于是我顺着库一路查找,终于修复了库路径错误的问题。

WiringPi库架构

        程序也能够正常编译了。

程序正常编译

 

       但是到这个地方事情并没有结束。因为我不止一台树莓派,每台都这么折腾一遍明显不太好,于是我把自己编译出来的库(显示为2.60版本)和作者发布的软件包(2.52版本)整合、并修复了库路径(作者把库放在了/usr/lib目录里,我给移到了对应架构的库文件夹里),打包成了新的安装包(版本2.52-g,MD5:3eff86d8e4d5c7753a1e7791c073e1c8)。

        大家可以使用如下指令安装:

        cd /tmp

        wget https://github.com/guation/WiringPi/releases/download/2.52-g/wiringpi_2.52-g_arm64.deb

        sudo dpkg -i wiringpi_2.52-g_arm64.deb

        如果觉得github下载太慢的话也可以使用我的服务器下载:

        wget http://guation.cn/wiringpi_2.52-g_arm64.deb

        鉴于哔哩哔哩专栏的特殊性(只能修改三次),挂神在GitHub发布了开源项目,以确保WiringPi对ARM64的持续支持。软件的后续修复和更新工作将在GitHub进行,安装修改等操作以仓库README为准。

        GitHub仓库:

        https://github.com/guation/WiringPi-arm64

        但是由于各种原因GitHub访问并不稳定,于是在gitee开设了镜像仓库,镜像仓库可能存在更新不及时问题,仅供参考使用。

        Gitee仓库:

        https://gitee.com/guation/WiringPi-arm64

        安装完成之后使用sudo apt list wiringpi看一下版本:

sudo apt list wiringpi

        因为只是修改了库文件,当然gpio -v还是显示2.52。挂神发布的版本会在版本号尾部加上-g以区别官方版本。

gpio -v

        如果使用的时候出现了问题可以在评论区反馈给挂神,挂神将尽力提供支持。

        最后想说,为了方便大家复制文章内的指令和链接,文章设置的是允许复制,但是这毕竟是挂神的劳动成果,如需转载请在文章下留言或者私信,告诉挂神你把文章转到了哪。

附录:

        树莓派官方64位镜像下载地址:https://www.raspberrypi.org/forums/viewtopic.php?f=117&t=275370

        清华大学开源软件镜像站下载地址:https://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os-images/raspios_arm64/images/

        wiringPi – deprecated…:http://wiringpi.com/wiringpi-deprecated/

        原WiringPi的git库地址:https://git.drogon.net/?p=wiringPi;a=summary

        镜像的WiringPi的git库地址:https://github.com/WiringPi/WiringPi



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3