start_kernel函数内容很多,在此只对我比较熟悉的函数进行简要注释
start_kernel
|...
|->setup_arch(&command_line) //架构相关的初始化,此函数会解析传递进来的设备树
|->pidhash_init() //构建 PID 哈希表,通过构建哈希表可以快速搜索进程信息结构体
|->console_init() //初始化控制台
|...
|->vfs_caches_init_early() //预先初始化vfs(虚拟文件系统)的目录项和索引节点缓存
|...
|->sched_init() //初始化调度器,主要是初始化一些结构体
|->rest_init()
|...
|->kernel_thread(kernel_init, NULL, CLONE_FS);
|...
kernel_init
|...
|->kernel_init_freeable()
|... |->do_basic_setup()
|->do_initcalls() //大多数设备驱动在此初始化