5

そのポートにデータを書き込んでいるので、/dev/tty* ファイルの許可を変更する必要があります。root として adb シェルを入力することで、Windows コマンド プロンプトから権限を変更できます。

しかし、デバイスを再起動すると、アクセス許可が保持されません。代わりに、デフォルト値に設定されます。

そのため、再起動後にアプリを実行する必要があるたびに、アクセス許可を変更する必要があります。

メソッドを使用してアプリからadbコマンドを実行しようとしましたがRuntime.exec()、アプリにはファイルの所有権を変更する権限がないため、何も変更されません。

これは、アプリからコマンドを実行する方法です(この場合はエミュレーターでテストしました):

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ユーザーのみが実行できますsu。をチェックしないsuパッチを適用したバイナリをインストールしない限り、アプリケーションから実行することはできません。suUID

コマンドが実行する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

suもう1つのよくある間違いは、のような標準のLinuxオプションを使おうとすること-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 に答える