Marvell 310 linux的启动过程
首先上电,先加载BootRom,然后加载OBM-> BLOB-> Decompress-> call_kernel-> Switch_data-> start_kernel -> rest_init-> kernel_thread-> init-> do_basic_setup-> do_initcalls.
然后do_initcalls就初始化各个设备和驱动。
initcall_t *call;
for (call = __initcall_start; call < __initcall_end; call++) {
……
……
}
中间是通过编译器,将所有需要初始化的函数都放在start和end之间,网络上有很多的文章介绍过程,这里就不赘述了。
kernel 启动完成后,会主动将控制权移交给 /sbin/init....,继续完成应用层的初始化,启动busybox,加载其他系统进程和用户进程。
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");