【问题标题】:Installing rxtx bundle in my Raspberry在我的 Raspberry 中安装 rxtx 包
【发布时间】:2015-06-19 10:51:25
【问题描述】:

我想在我的树莓派上安装一个 rxtx 包 该捆绑包将在 KURA 平台上运行(Equinox 是 Kura 的 OSGi 容器)

我使用以下方法安装了 rxtx 本机库: sudo apt-get install librxtx-java

.so 安装在目录:/usr/lib/jni/

pi@raspberrypi /usr/lib/jni $ ls
librxtxI2C-2.2pre1.so       librxtxParallel.so     librxtxRS485-2.2pre1.so  librxtxSerial-2.2pre1.so
librxtxI2C.so               librxtxRaw-2.2pre1.so  librxtxRS485.so          librxtxSerial.so
librxtxParallel-2.2pre1.so  librxtxRaw.so  

然后我按照这个链接将 rxtx 库包装在一个包中 http://rxtx.qbang.org/wiki/index.php/Wrapping_RXTX_in_an_Eclipse_Plugin

我在捆绑清单中添加了这个:

Bundle-NativeCode: /usr/lib/jni/librxtxSerial.so;osname="Linux";processor="armv6l"

因为我的操作系统类型是 linux,我的架构是 ARM:

pi@raspberrypi ~ $ cat /proc/sys/kernel/{ostype,osrelease,version}
Linux
3.18.11+
#781 PREEMPT Tue Apr 21 18:02:18 BST 2015

pi@raspberrypi ~ $ arch
armv6l

但我仍然无法安装捆绑包,出现此错误:

!ENTRY  1 0 2015-06-19 10:19:40.982
!MESSAGE [IAgent][RemoteBundleAdminImpl@17f36b1] [startBundle] Bundle cannot be started: Error[code=-6000;message=Failed to start bundle: The bundle "RXTX_Bundle_1.0.0 [77]" could not be resolved. Reason: No match found for native code: /usr/lib/jni/librxtxSerial.so; processor=armv6l; osname=Linux;details=null]
!STACK 0
org.osgi.framework.BundleException: The bundle "RXTX_Bundle_1.0.0 [77]" could not be resolved. Reason: No match found for native code: /usr/lib/jni/librxtxSerial.so; processor=armv6l; osname=Linux
        at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332)
        at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316)
        at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323)
        at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300)
        at org.tigris.mtoolkit.iagent.internal.rpc.RemoteBundleAdminImpl.startBundle(RemoteBundleAdminImpl.java:230)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.tigris.mtoolkit.iagent.internal.pmp.InvocationThread.run(InvocationThread.java:54)
        at org.tigris.mtoolkit.iagent.internal.utils.ThreadPool$Worker.run(ThreadPool.java:179)
        at java.lang.Thread.run(Thread.java:724)

我做错了什么? 非常感谢您的帮助!

更新 在遵循@Jorge Martinez 的建议之后: 这是我更新的清单行:

Bundle-NativeCode: nativelib/librxtxSerial.so;osname="Linux";processor="armv6l"

这里是我的 rxtx 包的内容列表:

【问题讨论】:

  • 此页面有推荐的处理器值列表:osgi.org/Specifications/Reference - 它没有列出 armv61。可能值得尝试 ARM_be 或 ARM_le 吗?此外,可能值得添加有关您如何尝试实施@Jorge Martinez 建议的详细信息 - jar 中的确切位置以及您使用的更新的 Bundle-NativeCode 行。
  • 我尝试了 ARM_be 和 ARM_le 但没有任何效果,我用新配置更新了我的问题。

标签: java linux raspberry-pi osgi rxtx


【解决方案1】:

豪尔赫的回答是正确的。您是否对 Eclipse 创建的包进行了物理检查以确认您的 nativelib 目录存在?从 Eclipse 导出包时,您必须确保指定构建中包含哪些文件夹和文件。这是通过打开 build.properties 文件并在您希望包含的文件夹/文件旁边打勾来完成的。

【讨论】:

  • 非常好。事实上,仔细看截图,我们可以看到 nativelib 目录不在包内 RXTXcomm.jar!!
【解决方案2】:

您需要将本机库嵌入到您的包中(在 jar 中或在片段中)。

即如果你把你的图书馆放在这里:

/this/is/yournative/package/librxtxSerial.so

您可以使用此清单条目:

Bundle-NativeCode: this/is/yournative/package/librxtxSerial.so;osname="Linux";processor="armv6l"

请注意,OSGi 通过将本地库提取到临时文件夹然后加载它们来加载它们。

【讨论】:

  • 感谢您的回复。仍然无法工作:(我复制了 /usr/lib/jni/librxtxSerial.so 中存在的本机库,但没有成功,同样的错误“未找到本机代码的匹配项”
  • 你能把你的 rxtx 包的内容发布在列表里吗?
  • 完成,我用我的 rxtx 包的内容列表编辑了我的问题。
  • 您是否将Bundle-NativeCode 标头更改为指向nativelib/librtxSerial.so 而不是/usr/lib/jni/librxtxSerial.so?
  • 不要认为和KURA平台有关。更有可能与 Java 和本机库之间的 rxtx 版本匹配有关。我建议您首先使用一个简单的 Java 应用程序进行快速测试,以确保一切正常。然后就是打包成一个OSGi模块
【解决方案3】:

使用此捆绑包rxtx osgi。它应该包含你需要的一切。

【讨论】:

    【解决方案4】:

    感谢大家的回复! 捆绑包处于活动状态!

    我使用此链接获取 rxtx 源代码并编译我的本地源代码: https://blogs.oracle.com/jtc/entry/java_serial_communications_revisited

    我更新了 build.properties 以包含本机库。

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多