1

我们正在开发一个从串行设备读取数据的应用程序。现有的 C++ 代码作为共享库(libProtocol.so 使用 NDK 构建)被重用,以读取和解码来自设备的数据并将其传递给应用程序。但是当设备连接时,由于权限问题,共享库代码无法访问设备。在 adb shell 命令 ls -l/dev/ttyUSB0 中显示“crw------- root root”。如果我手动使用 adb 中的 chmod 777 ttyUSB0 并运行应用程序,它就可以打开端口。(如果我创建一个 C++ exe 来访问 USB 串行端口并在 android 环境中运行,它可以访问端口但从共享库访问失败)

  1. 是否可以永久更改权限?
  2. android 是否以 root 或任何其他用户身份运行?
  3. 一般 ttyUSB0 属于拨出组,为什么它显示为 root 和 crw------- 而不是 crw-rw---- ?
  4. 为什么从 exe 访问有效,从共享库访问失败?

硬件平台:Beagle Board - XM OS:Android Froyo 有人可以帮忙吗?

4

1 回答 1

0

您需要弄清楚设备文件的创建位置,并适当地设置权限。这可能在 /init.rc 或类似文件中,也可能在插入 USB 设备时触发的东西中。对部分设备名称(由特权用户)的文件系统的递归 grep 可以帮助您找到出现该字符串的所有内容,至少在本机代码中而不是在本机代码中,而不是dalvik 类文件(我认为不太可能)

Android 应用程序通常不会以 root 身份运行;让它们这样做非常复杂,因为它们通常不会在正常意义上启动,而是从 zygote 进程中分叉出来(因此可以共享公共库映射)。但一个选项是,android 应用程序可以 - 非官方地 - 启动 setuid 二进制文件,并将它们用作代理来做事,即,您可以拥有一些东西,它只需将在其标准输入上接收到的任何内容写入端口,并在其上打印从端口接收到的任何内容。标准输出。

于 2011-05-31T21:00:43.940 回答