linux mips内核启动流程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/heyuqian_csdn/article/details/52270634

linux mips内核启动流程


查看根目录Makefile,可知链接脚本为arch/$(SRCARCH)/kernel/vmlinux.lds


Screen Shot 2016-08-22 at 12.08.07 AM.png


打开arch/mips/kernel/vmlinux.lds.S,内核入口点为kernel_entry,kernel_entry位于arch/mips/kernel/head.S

Screen Shot 2016-08-22 at 12.09.51 AM.png


最终跳转到第一个c函数入口start_kernel


Screen Shot 2016-08-22 at 12.14.27 AM.png


最后调用kernel_init init/main.c


start_kernel->rest_init->kernel_init

Screen Shot 2016-08-22 at 12.27.15 AM.png


kernel_init_freeable调用do_basic_setup 完成子系统设备的初始化,其中do_initcalls会调用arch_initcall (init.h)等,如下


详细请参考《LINUX内核中的xx_initcall初始化标号》 田海立@CSDN 2011-07-02


Screen Shot 2016-08-22 at 12.50.44 AM.png


arch/mips/ath79/setup.c为例,arch_initcall中完成了gpio,串口等设备的初始化


Screen Shot 2016-08-22 at 12.54.13 AM.png



kenel_init的最后,启动第一个应用层程序init (首先尝试启动内核参数指定的init程序,如果没有,则尝试其它默认的init程序)




猜你喜欢

转载自blog.csdn.net/heyuqian_csdn/article/details/52270634