我知道在 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
和解压缩的 ramdisk 和 cpio-ed 和 gzip-edinit_original
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 的方式有关,还是其他原因?
谢谢!