当我在该端口上写数据时,我需要更改/ 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();
Run Code Online (Sandbox Code Playgroud)
当执行"su"命令时,它会给出错误su: uid 10044 not allowed to su
因此,在执行chown或chmod时会出错Unable to chmod Operation Not permitted
那么,如何更改该文件的权限和所有权?
任何帮助都非常感谢!
谢谢 !!
默认(来自Google AOSP 源)su二进制文件检查UID它正在运行。仅允许root和shell用户运行su。su除非安装不su检查UID.
命令所做的就是adb root在设备上执行以下命令:
setprop service.adb.root 1
stop adbd
start adbd
Run Code Online (Sandbox Code Playgroud)
但我确信你在这里问了一个错误的问题。命令没有理由su不能达到您的目的。
您应该执行来更改 tty 设备权限的命令是:
Runtime.getRuntime().exec("su 0 chmod 777 /dev/ttyS0");
Run Code Online (Sandbox Code Playgroud)
同样在 android 中,.用作命令中用户和组字段之间的分隔符,chown而不是:. 正确的命令是:
su 0 chown root.root /dev/ttyS0
Run Code Online (Sandbox Code Playgroud)
另一个常见的错误是尝试使用标准 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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8011 次 |
| 最近记录: |