@SiberiaBear
2015-10-05T22:33:43.000000Z
字数 2855
阅读 3003
Edison
author:PWE
最近写Edison的程序,发现可以在电脑上eclipse编译通过的程序,但下载到Edison后运行不通过,发现应该是两个平台的库文件不统一造成的。于是要准备开始更新库文件。当然还有意外收获,找到了intel最近更新的Edison中文学习手册。警告,请在看完全文后在跟着敲命令,否则敲错了请不要骂我。
本文固定链接:https://www.zybuluo.com/SiberiaBear/note/182584
首先请参考英特尔官方的文章:更新和选择针对UPM和MRAA通用库的更新选项,该部分参考这篇文章。
引用:MRAA
I/O 通用库(或 libmraa)是一种低级别通用库,可将通用输入/输出 (GPIO) 接口转换成针脚,以供英特尔® Galileo 或英特尔® Edison 开发板使用。MRAA 有助于开发人员和传感器制造商以更简单的方法在所支持的硬件上映射其传感器和制动器,并通过高级语言和结构控制下层通信协议。
引用:UPM
传感器通用库(或 libupm)是关于传感器表示的资源库,用 C++ 编写而成,并使用 MRAA。UPM 是一种高级别资源库,可支持使用 MRAA 通用库的传感器。各传感器都可链接至 libmraa,但并不意味着它们处于互连状态,尽管有几组传感器可以互连。传感器包含一个标头,支持您与传感器互动。
步骤:
1. 选择 "IOT DevKit > Update libraries"。
2. 如果版本是旧版本,会提示 "Updates available" 窗口,点击 "Yes"。
3. 点击 "OK",完成更新。
首先请参考英特尔官方的文章:更新MRAA I/O 和 UPM 传感器库,该部分参考这篇文章。
MRAA的最新版本可在各自的GitHub页面找到:
https://github.com/intel-iot-devkit/upm/releases
输入如下命令(等每条命令结束后再输入下一条):
echo "src mraa-upm http://iotdk.intel.com/repos/1.1/intelgalactic">/etc/opkg/mraa-upm.conf
opkg update
输入如下命令安装库:
opkg install libmraa0
opkg install upm
检查开发板上安装的MRAA和UPM库的版本:
opkg info libmraa0
opkg info upm
注:截止这篇文章最后修改(2015年10月5日), libmraa0
库的最新版本是:0.7.3
upm
库的最新版本是:0.4.0(依赖于mraa 0.8.0)、0.2.0(依赖于libmraa0 0.6.0),mraa
库的最新版本是:0.8.0
注:后进一步查看后,认为上边的是错误的。在命令echo "src mraa-upm http://iotdk.intel.com/repos/1.1/intelgalactic">/etc/opkg/mraa-upm.conf
中,1.1
需要替换为2.0
,并且我认为需要手动查看最新版本(网络上的教程较多仍为1.1
版本或1.5
版本。从安装输出信息中可以看出,安装2.0
版本后,新的upm和mraa库将替代旧版本库。感谢奈何col
的提醒。
截稿时(2015年10月5日),最新的版本库为:
- upm 0.4.0
- libmraa0 0.7.3
- mraa 0.8.0
为了说明我对这部分还是有点混乱,必须再写点。请参考这篇文章
1. 将/etc/opkg/base-feeds.conf
修改内容为如下:(其他几个在opkg/目录下的文件不需要改动)
2. 运行opkg update
3. 运行opkg install libmraa0
,会发现如下一条输出:
Upgrading libmraa0 from 0.7.3 to 0.8.0+git0+70600dece4-r0 on root.
4. 运行opkg install mraa
,会发现如下一条输出:
Package mraa (0.8.0) installed in root is up to date.
5. 运行opkg install upm
,会发现如下一条输出:
Upgrading upm from 0.4.0 to 0.4.0+git0+ef30ab6fb2-r0 on root.
请问这个该怎么解释?
补充:这里自问自答一下哈,刚才学习了2个小时,找到一篇文章挺好,请参考。想想,可不可以是这样,文章中提到两种源(repo),第一种是opkg官方(如果有“官方”的话)的源,另一种是英特尔官方的源。到底哪个会新不确定了,总之,不要作死好不好,能用就行搞最新的干嘛。下边贴一下这篇文章中对源的添加:
- repo.opkg.net的源
cat /etc/opkg/base-feeds.conf
src/gz all http://repo.opkg.net/edison/repo/all
src/gz edison http://repo.opkg.net/edison/repo/edison
src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32
经查看,该源所下载的库文件的主要维护者(maintainer)是Poky (poky@yoctoproject.org)
cat /etc/opkg/base-feeds.conf
src all http://iotdk.intel.com/repos/2.0/iotdk/all
src core2-32 http://iotdk.intel.com/repos/2.0/iotdk/core2-32
src core2-32-intel-common http://iotdk.intel.com/repos/2.0/iotdk/core2-32-intel-common
src i586 http://iotdk.intel.com/repos/2.0/iotdk/i586
src quark http://iotdk.intel.com/repos/2.0/iotdk/quark
src x86 http://iotdk.intel.com/repos/2.0/iotdk/x86
同理,这里的2.0
也要谨慎些,可能会出新版本。
所以,之所以出现方法2中的问题,是因为最初用英特尔的源更新了mraa库(方法1),libmraa0
是旧版本,后来用opkg的源更新,会提示更新到最新版本,可能是这样吧。
这样说,英特尔的libmraa0
库依然没有opkg的版本更新,那么libmraa0
与mraa
到底是什么关系?
libmraa0
、mraa
和upm
这三个库的关系?尤其是libmraa0
与mraa
是什么关系?