1

ubuntu下30天自制os 的学习计划

  • ubuntu 操作系统

30天自制os的学习也告一段落,因为有其它更重要的事情要集中精力去处理,书本从15天开始就是多任务了,但是不得不停下一阵子。

下面总结下学习中遇到的一些问题

  1. 学习这前14天中,问题最大的是关于GDT,IDT的理解,还有段的访问长段,属性的理解。

  2. 这其中遇到的一个现象就是从qemu可以正常启动,但是写到u盘后,从u盘启动时,会不停的重启,可以猜测到是因为产生了一些异常导致电脑重启,但是由于水平有限一直不知道为什么, 后来放下30天这本书,去看了一下,关于GDT的访问属性的问题,发现出现问题的原因如下:

  1. 段的分页位没有开,导致从段基址开始,能访问的空间只有1MB的范围,而博主写的代码与日本作者的有些不同,跳转到c语言写的代码指令已经超过了2MB

  2. 日本作者的代码在初始化GDT,IDT的函数中,对代码段的长度进行了控制

  1. 在10几天的代码中,最难理解理解的还是关于图层刷新的那一块,虽然代码是参考书本上敲的,但是还是有很多不太理解,当然只知道是怎么用的,似乎是基础有点薄弱的原因。

  2. 之前写的512字节的代码是用Intel的汇编语言写的,第二次学习时,全部用GNU的AT&T语法进行了改写,通过对u盘启动的研究,发现了关于U盘的一些CHS的特点,当然这一点为以后学习Linux内核时,修改为从u盘启动是有帮助的。

  3. 学完书本上第14天的内容后,发现之前写的代码有很多bug,当然这些bug在后面都给修复了。不停的修复bug,也为后面的学习提供了一些方便。由于前面的学习过程中没有太注重代码的可读性,当然只为了自己能看懂,写了很多注释。在13天中,对代码的函数进行了分模块的整理,对全局变量的存放位置也有更好的存放位置,代码的结构也更清楚了

  4. 在移植ucgui时,对于静态链接库的使用,也有更深入的理解,因为需要写makefile来编译ucgui,对于makefile文件的编写也有了更深入的了解,当然学习还是不够系统,后面应该找本makefile的书,系统的看一遍。

  5. 关于不同分辨率的显示问题,有些问题,难道不能在32位的模式下,用c语言来进行设置吗?不同的模式,不同的VRAM的地址也不同,所以32位的系统只能用2.6GB 左右的内存,高址的内存有一部分给分配给显存了。关于高分辨率的第14天的关半部分,日本作者写的有点问题,直接给出了VRAM的地址是0xe0000000是不科学的,导致博主认为自己的代码有问题,看了好几次,发现没有问题。于是直接往书的后面看,发现VRAM的地址是通过中断读到的,然后把读到的VRAM地址保存起来,以便后面在c语言的函数中使用。

项目github地址:https://github.com/cherishsir/ubuntu230os

猫哥
305 声望44 粉丝

热衷于研究各类互联网技术,热爱学习,热爱生活!