接第一篇,当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文件。