我们正在开发一个从串行设备读取数据的应用程序。现有的C ++代码被重用为共享库(使用NDK构建libProtocol.so)来读取和解码来自设备的数据并将其传递给应用程序。但是,当连接设备时,由于权限问题,共享库代码无法访问设备。在adb shell命令中,ls -l / dev / ttyUSB0显示“crw ------- root root”。如果我从adb手动使用chmod 777 ttyUSB0,然后运行该应用程序,则可以打开该端口。 (如果我创建一个C ++ exe来访问USB串口并在android环境中运行,它可以访问端口但是从共享库访问失败)
硬件平台:Beagle Board - XM 操作系统:Android Froyo 有人可以帮忙吗?
答案 0 :(得分:1)
您需要弄清楚设备文件的创建位置,并适当设置权限。这可能是/init.rc或类似的,或者可能是在USB设备插入时触发的某些内容。部分设备名称的文件系统的递归grep(由主要用户提供)可以通过帮助您查找出现该字符串的所有内容,在几分钟内得到答案,至少提供它是在本机代码而不是dalvik classfile(我认为不太可能)
Android应用程序通常不以root身份运行;让它们这样做是相当复杂的,因为它们通常不是在正常意义上启动的,而是从受精过程中分离出来(因此可以共享常见的库映射)。但是一个选择是android应用程序可以 - 非正式地 - 启动setuid二进制文件,并使用它们作为代理来做事情,也就是说,你可以有一些东西只是将其stdin上收到的任何内容写入端口并打印从端口接收到的任何东西。标准输出。