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の指示に従って、カスタムinit
をinit_original
解凍したramdiskに配置し、cpio-edおよびgzip-edしました。
init_original
execve()を使用してプログラムから正常に呼び出されました。ただし、次の出力が得られます。
[ 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を再パックする方法、または他の何かと関係がありますか?
ありがとう!