【问题标题】:Change the permissions and ownership of tty port in android programmatically以编程方式更改android中tty端口的权限和所有权
【发布时间】:2013-01-22 21:55:49
【问题描述】:

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

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

非常感谢任何帮助!

谢谢!!

【问题讨论】:

  • 模拟器还是设备?如果设备然后植根与否?你说“以编程方式从android app 运行adb root”是什么意思?
  • 它在设备中。为了通过命令提示符更改/dev/tty*文件的权限,我需要在给adb root命令后进入adb shell,即adb必须运行作为root ..如果不是,它不允许我更改权限
  • 我可以通过命令提示符更改权限。但我想通过代码做类似的过程。
  • 是不是root手机?你想从你的应用程序运行adb 命令吗?
  • 是的。这是一部有根电话.. 是的,我想从我的应用程序中运行 adb root 命令

标签: android adb


【解决方案1】:

默认(来自Google AOSP sourcesu 二进制检查 UID 它正在运行。只允许rootshell 用户运行su。除非您安装不检查 UID 的已修补的 su 二进制文件,否则您将无法从您的应用程序运行 su

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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2017-08-10
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2023-03-03
    • 2016-10-29
    相关资源
    最近更新 更多