从上述代码可见,initcall_levels数组中的元素为initcall_t类型的指针,回到do_initcalls()函数中,该函数的核心操作是:按顺序从__initcall0_start开始,到__initcall_end结束的节段(称为初始化调用段)中取出不同段之间的函数,并执行。 存在这几个初始化调用段之间的函数都是内核中各个模块的初始化函数,而这些函数是...
内核是通过do_initcalls函数循环调用执行initcall.init section内的函数的,流程如下: start_kernel -> rest_init -> kernel_thread -> init -> do_basic_setup -> do_initcalls 这里要分析两个函数: kernel_thread和do_initcalls,这两个函数都定义在init/main.c内 1) kernel_thread 1.static void noinline re...
intxboot_main(intargc,char* argv[]){structruntime_trt;/* Create runtime */runtime_create_save(&rt,0,0,0,0);/* Do initial kobj */do_init_kobj();/* Do all initial calls */do_initcalls();/* Mount root filesystem */do_system_rootfs();/* Display system logo */do_system_logo...
内核是通过do_initcalls函数循环调用执行initcall.init section内的函数的,流程如下: start_kernel -> rest_init -> kernel_thread -> init -> do_basic_setup -> do_initcalls 这里要分析两个函数: kernel_thread和do_initcalls,这两个函数都定义在init/main.c内 1) kernel_thread 1.static void noinline re...
do_initcalls由do_basic_setup()调用: do_basic_setup()由kernel_init()代表的内核init线程函数间接调用(在kernel_init_freeable()被调用)。在调用do_basic_setup之前,处理器已经被初始化了,CPU子系统已经启动并且运行,内存和进程管理工作也工作正常,但是系统中的设备还没有被初始化,故而do_basic_setup正作用于此...