- A+
在内核启动的主函数中
start_kernel() { vfs_caches_init_early(); vfs_caches_init(); rest_init(); } rest_init() { kernel_init(); } kernel_init() { kernel_init_freeable(); }
在启动过程中相关的函数差不多就这样了。
vfs_caches_init_early 进行早期的初始化
vfs_caches_init 这里面主要是初始化inode 缓存 dentry的缓存等等。
主要关键的很难理解的是rest_init
而rest_init 又调用了kernel_init 然后又调用了kernel_init_freeable,这里面做什么事情呢?
做一件非常关键的事情,就是第一次开机在什么都没有的情况下,相当于硬盘是空的。
OK,描述下这个过程
1、硬盘是空的,怎么办
2、从flash中加载initramfs 到内存,在内存中临时建立一个 "/" 根文件系统,将初次需要的一些操作,在这个内存的fs里面做。比如sys设备。
3、完成内核的最后阶段要去执行第一个进程/init 的时候,把这个内存里的 fs,送到硬盘。OK完成第一次启动。
4、第二次或者以后还要启动的时候,检查硬盘是不是空的,不是空的,检查硬盘里面有没有init,有就直接启动init完成后续启动。
# Linux必备书籍推荐
《LINUX内核源代码情景分析(上册) 》毛德操,胡希明 >>>京东购买 >>>淘宝购买
《LINUX内核源代码情景分析(下册) 》毛德操,胡希明 >>>京东购买 >>>淘宝购买
《嵌入式Linux应用开发完全手册 》韦东山 著 >>>京东购买 >>>淘宝购买 (领券)
《深入理解Linux内核第3版》(美)博韦 >>>京东购买 >>>淘宝购买
《鸟哥的Linux私房菜:基础学习篇(第四版)》鸟哥 >>>京东购买 >>>淘宝购买

扫一扫关注微信公众号,上述5本电子书免费领取。
https://pan.baidu.com/s/1q5IjXAmybs8NBseR4R8Ksg
扫码关注微信公众号,回复“Linux” ,即可获取提取码
--- Linux文件系统学习系列笔记 ---
(原创笔记,转载请联系博主授权)
Linux文件系统学习:io的plug过程-request请求(9)
Linux文件系统学习:io的plug过程-blk_init_queue(10)
Linux文件系统学习:io的plug过程-blk_flush_plug_list的情况(11)
Linux文件系统学习:io的plug过程-queuelist的问题(12)
<欢迎关注微信公众号,第一时间查看最新内容>
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏