操作系统---------题外篇1

在测试阶段我发现几个有趣的问题,先记录下来供大家参考


1在Makefile里面链接部分你会发现有个参数是-N这是因为ld为了内存页对齐设置的,如果不加参数-N会导致生成的kernel过大从而导致grub在加载内核时

不能检测到multiboot2文件头,进而不能正确引导内核,这个是自己进行好几天多阶段排除得来的结果,目前网上这个答案仅此一家,心酸过程就不说了,大家可以试着

取消掉这个参数进行文件大小对比测试.


2在虚拟机上是可以正确检测到内存大小的,但是在真机上不行,mem_upper总是500多M,而且在虚拟上检测的内存map总是相同的不随内存大小变化而变化

在真机上测试发现内存map最后一项总是看不懂,因为最后一项是从0-1M开始的近乎包含所有内存只是最后第二项的基址加上大小就是内存的总大小

所以我将内存map的数量减去1来确定真机的真正内存大小.


3在真机测试阶段我同时发现grub将从BIOS获取的参数同时保存到了grub将内核加载的位置,这是非常麻烦的问题,我不能保证内核数据是否遭到破坏

目前内核还可以正常运行,先记录下来等待错误发生进行处理


4由于第三个问题的原因我先将内存进行地址映射然后才进行启动参数的拷贝,这导致在初始化阶段内存映射固定不变(896M),所以为了简单,我预留了

1M空间存放页表用来映射3G-4G内核空间


5在链接脚本里面你会发现内核是从16M开始的,原先我打算使用文件包含方式把boot.o放在内核文件的头部,但考虑到可以启动阶段会重新改写,从而导致函数和

变量多次定义的问题,所以我将所有的启动代码放在了.text.head段中从而保证在后续代码中链接脚本和代码不会有过大的修改.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值