5

当我在该端口上写入数据时,我需要更改 /dev/tty* 文件的权限。我可以通过以 root 身份输入 adb shell 从 Windows 命令提示符更改权限。

但是当我重新启动设备时,权限不会保留。相反,它们被设置为默认值。

所以,每次我需要在重启后运行我的应用程序时,我都需要更改权限。

我尝试使用Runtime.exec()方法从应用程序运行 adb 命令,但这并没有改变任何东西,因为应用程序没有更改文件所有权权限的权限。

这就是我从应用程序执行命令的方式(在这种情况下是在模拟器中测试的):

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

那么,如何更改该文件的权限和所有权?

任何帮助都非常感谢!

谢谢 !!

4

1 回答 1

1

默认(来自Google AOSP 源su二进制检查UID它正在运行。只有rootshell用户被允许运行susu除非您安装不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

另一个常见错误是尝试使用标准 Linuxsu选项,例如-c. AOSP 版本su要简单得多:

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.
于 2013-02-07T18:18:39.297 回答