30天自制操作系统第六天学习笔记(u盘软盘双启动版本)

暑假学习小日本的那本书:30天自制操作系统

qq交流群:159336168   ,更多学习中的问题、资料,群里分享

environment:开发环境:ubuntu


代码下载地址:百度云中去下载吧,传到csdn速度太慢了.

百度云:用户名:397916230@qq.com

           密码:397916230

从第一天到第九天的代码和笔记全部在百度云盘中


第六天的学习笔记:


要有一个态度,有一个好的心态,问题越多,学到的越多。坚持下去就行了。

目前学到的知识:
今天是新的一天,一切从新开始,但是已经学到了不少东西,从bootloader里学到的汇编的知识,如何利用int0x13读软盘和u盘,如何利用int0x10显示字符串,对软盘,u盘的chs寻址,关于fat12文件系统的了解,产生一个fat12文件系统的软盘镜像,挂载镜像后copy kernel to os.img,利用qemu运行软盘镜像。

利用bochs调试这个os.img的程序,查看内存的内容,查看segment的内容。

进入了32位模式之后,需要用ljmp来实现的跳转, ljmp    $(2*8), $protcseg,此处的2就是改变cs的选择子了,低三位没用,所以要乘8。在打开pe位时,一定要先建立一个临时的dgt和idt(idt可不要)



主要文件功能回顾:
bootloader.asm:是用nasm来编译的,包含的内容就是fat12的文件系统和复制软盘上10x2x18个扇区的内容到0x8000的内存地址,然后跳转到kenel位置的0xc400处执行entry.s的代码


entry.s:用gnu的汇编写的,用gcc编译,主要任务是,打开a20,加载临时的gdt,打开pe位后进入32位模式,复制kernel中用c语言写的函数的这一部分到0x280000的物理地址处,然后把软盘上复制到0x8000内存的内容搬到内存0x100000地址处,最后中转到c代码的bootmain地址处。


后面的c代码从main.c的bootmain函数开始,完了ascii字库的制作,打印函数sprint的编写,调色板的前16个color的初始化,画了一个简单的window,实现mouse的logo的显示。
实现了keyboard的中断服务程序的成功调用。此过程中学到了c函数指针直接指向内存地址,写内容到内存,如建立dgt,idt表,知道如何用struct来组织复制的数据结构,对c的理解更深入。
对数组,指针的利用更成熟了。学会了如何在c中调用汇编的方法,包含如何调用gas,intel格式的汇编代码。对32位模式的cs,ds作为的selector有了更直观的了解,
对中断的remap有了一定的了解,remap的过程就是对8259的再编程。知道了8259是如何向cpu发现中断指令的。

后面还有更多内容,学习就是积累的过程,不要放弃就行了。

/**************************************************************************/

照旧上一张u盘启动的图片:

下面是代码的下载地址:http://download.csdn.net/detail/h397916230/5967811

/***********************************************************************/

产生软盘镜像
sudo -s
make
make copy      //这一步如果没有建立挂载点,需要建一个文件夹,mkdir /tmp/floppy
make run

产生从u盘启动的镜像:
sudo -s
make usb=1  
make copy    //这一步如果没有建立挂载点,需要建一个文件夹,mkdir /tmp/floppy
make u
make dd         //这个命令是写os.img到u盘

更多学习资料见百度云盘:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值