我们正在开发一个从串行设备读取数据的应用程序。现有的C ++代码可作为共享库(使用NDK构建的libProtocol.so)重用,以读取和解码设备中的数据并将其传递给应用程序。但是,连接设备后,由于权限问题,共享库代码无法访问该设备。在adb shell命令中,ls -l / dev / ttyUSB0显示“ crw ------- root root”。如果我手动使用adb的chmod 777 ttyUSB0,然后运行该应用程序,则它可以打开该端口。 (如果我创建一个C ++ exe来访问USB串行端口并在android环境中运行,则它可以访问该端口,但无法从共享库访问)
是否可以永久更改权限?
android是否以root或任何其他用户身份运行?
通常ttyUSB0属于拨出组,为什么它显示为root和crw -------而不是crw-rw ----?
为什么可以从exe访问并可以从共享库错误访问?
硬件平台:Beagle Board-XM
操作系统:Android Froyo
谁能帮忙吗?
最佳答案
您需要确定在哪里创建设备文件,并适当设置权限。这可能在/init.rc或类似文件中,也可能在USB设备插入时触发的某事中。一部分设备名称的文件系统的递归grep(由特权用户使用)可以帮助您在几分钟内找到所有出现该字符串的内容,至少可以在本地代码中找到它,而不是通过dalvik类文件(我认为不太可能)
Android应用程序通常不以root用户身份运行;这样做很复杂,因为它们通常不是从正常意义上启动的,而是从合子过程中分叉出来的(因此可以共享公共库映射)。但是一个选择是,Android应用程序可以-非官方地-启动setuid二进制文件,并将其用作代理来执行操作,即,您可以拥有一些将标准输入中接收到的任何内容写到端口上,并在其标准输出上打印从端口接收到的任何内容的东西。标准输出。