1

Androidの起動シーケンスで、Linuxカーネルが起動した後、を検索することを知っていますinit

initカスタムCアプリケーションに置き換えましたmyapp。でmyapp、ユーザー入力を5秒間待ちます。何も受信されない場合は、元のを実行したいのですが、名前を。initに変更しましinit_originalた。ユーザーの入力を受け取ったら、続けて自分の仕事をしたいと思います。

http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Imagesの指示に従って、カスタムinitinit_original解凍したramdiskに配置し、cpio-edおよびgzip-edしました。

init_originalexecve()を使用してプログラムから正常に呼び出されました。ただし、次の出力が得られます。

[    3.851928] cpuidle: initiated for CPU0.
[    3.857116] cpuidle: initiated for CPU1.
[    3.862579] Freeing init memory: 320K

===============================================================================


Application started
Press enter in 1 second to enter test tool...
1 second is up, starting normal init

[    4.883422] init: /init.rc: 865: ignored duplicate definition of service 'ril-daemon'
[    8.247894] av8100_hdmi av8100_hdmi.3: HDMI display probed
[    9.694915] init: Timed out waiting for /dev/.coldboot_done
[    9.839630] init: cannot find '/system/bin/logwrapper', disabling 'cspsa'
[    9.847137] init: cannot execve('/system/bin/logwrapper'): No such file or directory
[    9.855102] init: /system/bin/logwrapper terminated with status 127.
[    9.869934] init: cannot find '/system/xbin/watchdog-kicker', disabling 'watchdog-kicker'
[    9.887695] init: cannot find '/system/bin/ifconfig', disabling 'shrm-netdev'
[    9.894836] init: cannot find '/system/bin/sh', disabling 'modem'
[    9.907714] init: cannot find '/system/bin/modem-supervisor', disabling 'modem-supervisor'
[    9.916015] init: cannot find '/system/bin/copsdaemon', disabling 'copsd'
[    9.922851] init: cannot find '/system/bin/cn_server', disabling 'cn_server'
[    9.929931] init: cannot find '/system/bin/simd', disabling 'simd'
....

何が問題なのか分かりますか?私が呼び出す方法init_original、またはramdisk.imgを再パックする方法、または他の何かと関係がありますか?

ありがとう!

4

3 に答える 3

0

わかりました、答えを見つけました。

私は逆にそれをしました、オリジナルinit.cは代わりに呼び出すように編集されますmyapp

androidの/system/ core / init:で、行の後init.cに呼び出しますmyapp

/* clear the umask */
umask(0);
// call program here

myappが前に呼び出された場合umask(0)、上記と同じエラーが発生します。なぜそれがこのように機能するのか私にはわかりません。誰かが私に何をしているのかumask(0)(許可を設定するなど)説明してくれれば、私は感謝します。

于 2012-08-15T06:11:56.930 に答える
0

の出力を指示し ls -lたり、出力ストリームやファイルに類似したものを送信したりするなど、非常に基本的なことを試すことができます。独自のアプリケーションを実行しようとする場所からこの呼び出しを行い、実行するための適切なファイル権限があるかどうかを確認します。

を使用 umask(0)すると、ユーザーが作成するファイルのファイル権限が設定されます。これは、使用するのと似て chmod()いますが、ファイルが実際に作成される前に実行します。したがって、あなたの場合、これを使用 umask(0)する とファイルの'777'アクセス許可が得られ、必要なファイルのアクセス許可があるため、アプリケーションを実行できます。

于 2012-08-17T01:57:06.603 に答える
0

同じ問題がありました。/sbinでは、ueventdとwatchdogdは../initへのシンボリックリンクです。

したがって、これらを変更します。ln -s ../init_originalを実行し、myappでinit_originalを呼び出すと機能するはずです。=)

于 2013-06-12T17:24:05.090 に答える