抄写Linux源码(Day13:从 MBR 到 C main 函数 (2:研究 setup.s) )

回忆我们需要做的事情:
为了支持 shell 程序的执行,我们需要提供:
1.缺页中断(不理解为什么要这个东西,只是闪客说需要,后边再说)
2.硬盘驱动、文件系统 (shell程序一开始是存放在磁盘里的,所以需要这两个东西)
3.fork,execve, wait 这三个系统调用,也可以说是 进程调度 (否则无法 halt shell 程序并且启动另外的程序)
4.键盘驱动、VGA/console/uart 驱动、中断处理 (支持键盘输入和屏幕显示)
5.内存管理 (shell 启动其它进程时,不能共用内存,而是切换其它进程的页表)
6.为了写代码方便,我们需要从 MBR 进入到 main 函数,这也是从 汇编 切换到 C 语言
7.应用程序申请内存的接口

那么回到最初的问题:
为了实现复杂的内核,毫无疑问我们需要使用 C 语言,需要从汇编跳转到 C 语言。由于 MBR 只有 512 字节,所以我们没法直接把内核写在 MBR,而是需要使用 MBR 加载内核到内存上。那么问题来了,现在我们已经把内核和setup.s 加载到内存上了。为什么不直接 jmp 到内核里的 main 函数,而是要先 jmp 到 setup.s 以及 head.s(system 的 entry)。它们做了些什么?这些事情可以被省略掉吗?我们还需要继续研究。

为什么 setup.s 是不可省略的,为什么不能直接跳转到内核?继续研究 setup.s

看闪客文章第五回:https://mp.weixin.qq.com/s?__biz=Mzk0MjE3NDE0Ng==&mid=2247499558&idx=1&sn=d5d057fae2fb835d38f82804c2649463&chksm=c2c5858bf5b20c9de2db5c31dd34fbe766f6c46cda17f54f4518a75fc1838f2ada6fe5717aad&scene=178&cur_album_id=2123743679373688834#rd

TODO:here

你可能感兴趣的:(抄写Linux内核源码,linux)