接第一篇,当android系统在启动时我们没有传入install参数,则继续执行下面的内容:

load_modules
mount_data
mount_sdcard
setup_tslib
setup_dpi
post_detect
find_network_dev_name

if [ 0$DEBUG -gt 1 ]; then
        echo -e "\nUse Alt-F1/F2/F3 to switch between virtual consoles"
        echo -e "Type 'exit' to enter Android...\n"

        debug_shell debug-late
fi

[ -n "$DEBUG" ] && SWITCH=${SWITCH:-chroot}

# We must disable mdev before switching to Android
# since it conflicts with Android's init
echo > /proc/sys/kernel/hotplug

exec ${SWITCH:-switch_root} /android /init

# avoid kernel panic
while :; do
        echo
        echo '  Android-x86 console shell. Use only in emergencies.'
        echo
        debug_shell fatal-err
done

开头的几个函数主要是挂载分区,加载模块等,我们主要看一下最后调用init这一段,也就是这一句

exec ${SWITCH:-switch_root} /android /init

这一句的调用意味着我们的系统内核已经启动程序,开始启动系统程序,这个调用的是ramdisk.img中的init文件,这个文件是一个init二进制文件,是从android的init.c 编译而来的,这就是linux系统所谓的init进程。到这里我们总结一下以上的流程,完事咱们在继续往下看,在这里我将画一个流程图。

接下来我们将分析系统的init文件。