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

比特币
• 阅读 3191

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
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
Stella981 Stella981
3年前
Python Challenge Level 18
初学Python,挑战一下流行的PythonChallenge,很不幸,卡在了18关~~被字符字节码之间的转换搞得焦头烂额,不过终于搞定了还是很happy的~~~主要的问题就是16进制形式的字符如何转成字节码(注意:不是encoding)如:\'89','50','4e','47','0d','0a','1a','0a','00
Stella981 Stella981
3年前
Python+Selenium自动化篇
本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子。0.元素定位方法主要有:id定位:find\_element\_by\_id('')name定位:find\_element\_by\_name('')class定位:find\_element\_by\_class\_name(''
Stella981 Stella981
3年前
Scapy 从入门到放弃
0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os
Stella981 Stella981
3年前
Flutter混合开发踩坑指北
2020年这个长假因为新型冠状病毒疫情显得格外不一样,好多小伙伴应该已经闲的长毛了,再坚持一下,相信国家很快就会控制住的。这两天实在不知道做啥了,开始跟着keep计划健身,为即将来临的工作热身,今天学习了一下Flutter的混合开发知识。Flutter与Android的原生混合开发学习中遇到一些问题,现在记录如下。首先看一下如何创建一个Flutter
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n