以编程方式更改android中tty端口的权限和所有权

时间:2013-02-07 11:51:19

标签: android adb

当我在该端口上写数据时,我需要更改/ 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

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

非常感谢任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:1)

默认情况下(来自Google AOSP sourcesu二进制检查UID正在运行它。仅允许rootshell个用户运行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选项,例如-csu的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.