Overview¶
Loader 需要向内核传递一些信息, 包括 内存布局、显示缓冲区...
传递缓冲区¶
为什么需要传入缓冲区? 一个应用情景就是内核在初始时没有文件读写能力, 但是需要使用到硬盘上的文件, 比如说字库文件, 这时需要将缓冲区传入
指针在这里是很难传递的, 主要是因为内核接手后会将页表中的低端地址项全部抹掉, 导致指针失效, 解决方案如下:
- 提前映射到高端地址
- 将缓冲区统一管理, 压缩成一块 (以下称这一块为
ArgStack), 直接传入 ArgStack, 之后由内核来映射到高端地址, 并进行指针修正
以上两个方法都有局限性:
- 内存管理杂乱
- 实现不优雅, 代码复杂, 内存结构杂乱
所以像之前提到的字库之类的文件, 能直接硬编码进内核的就不要折腾了...
但是我还是给一份原始的代码:
Docs/Kernel/textos-argstack.diff