当我在该端口上写数据时,我需要更改/ dev / tty *文件的权限。我可以通过以root身份输入adb shell来更改Windows命令提示符的权限。
但是当我重启设备时,权限不会保留。相反,它们被设置为默认值。
因此,每次我需要在重启后运行我的应用程序时,我都需要更改权限。
我尝试使用Runtime.exec()
方法从应用程序运行adb命令但由于应用程序无权更改文件所有权权限,因此不会更改任何内容。
这是我从app执行命令的方法(在这种情况下在模拟器中测试过):
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("chown root:root /dev/ttyS0 \n");
os.writeBytes("chmod 777 /dev/ttyS0 \n");
os.writeBytes("exit\n");
os.flush();
os.close();
process.waitFor();
当" su"命令被执行,它给出错误su: uid 10044 not allowed to su
因此,在执行chown或chmod时会出现错误Unable to chmod Operation Not permitted
那么,如何更改该文件的权限和所有权?
非常感谢任何帮助!
谢谢!
答案 0 :(得分:1)
默认情况下(来自Google AOSP source)su
二进制检查UID
正在运行它。仅允许root
和shell
个用户运行su
。除非您安装了未检查su
的修补su
二进制文件,否则您将无法从应用程序运行UID
。
所有adb root
命令在设备上执行以下命令:
setprop service.adb.root 1
stop adbd
start adbd
但我很肯定你在这里提出了一个错误的问题。 su
命令没有理由不能用于您的目的。
您应该执行的更改tty设备权限的命令是:
Runtime.getRuntime().exec("su 0 chmod 777 /dev/ttyS0");
同样在android中,.
用作chown
命令中用户和组字段之间的分隔符,而不是:
。正确的命令是:
su 0 chown root.root /dev/ttyS0
另一个常见错误是尝试使用标准Linux su
选项,例如-c
。 su
的AOSP版本要简单得多:
usage: su [UID[,GID[,GID2]...]] [COMMAND [ARG...]]
Switch to WHO (default 'root') and run the given command (default sh).
where WHO is a comma-separated list of user, group,
and supplementary groups in that order.