《30天自制操作系统》U盘启动,真机运行(16天)
2015-07-10 20:18
316 查看
首先说一下到目前为止U盘启动遇到的问题,首先的一个问题是“system volume information“,目前尚未解决,这个问题可能导致U盘启动失败,我猜测可能是由于每一次重新将OS写到U盘的时候原来的信息没有被清除,导致了在执行的时候把那些没有被覆盖掉的信息当成指令执行了。这个问题我会继续的追踪下去,力求能找到引起这个问题的真正原因是什么,如果有遇到同样问题的朋友,能留言相告。
下面是真机的运行截图(当然纯属装逼,哈哈)
![](http://img.blog.csdn.net/20150710194730792)
下面还是展示ipl10.nas代码
学习这本书到目前为止,还是学到了不少东西,其中包括计算机启动流程、BIOS中断向量表,实模式,保护模式,IDT,GDT,LDT,TSS,内存管理,定时器管理(这个主要是依赖时钟中断,时钟中断可是和任务调度密切相关,需要特别的注意),系统调用API,各种异常中断处理,可执行应用程序的编写(这当中可是和保护模式有很大的联系),还有就是深刻的体验到了模块化编程的各种好处。
在学习此书的过程中,遇到了很多问题,所以在此书的学习过程中,同时也学习了很多相关的数据,包括《linux内核的设计与实现》(PS:学习这本书的原因是因为我选择的课程就是讲授linux的内核,当然还是对此书的学习提供了很多的帮助,主要是概念上的理解和操作系统体系架构的理解);《深入理解linux内核》这本书很厚,但是讲解的比较细,但是如果你对计算机系统结构不是很了解的话,前面和硬件相关的部分理解起来比较困难,这本书对于有一定基础的人应该静下心来细看,肯定是有很大的收获,同时我认为这本书也可以作为内核编程的人的一本参考书籍;还有就是《386intel》手册,对于要学习《30天自制操作系统》的人来说intel386的手册应该静下心来仔细阅读。相信如果你能把这几本书吃透,说明你的基础就真的特别的扎实了,不论你是准备编写应用程序,还是内核编程,还是嵌入式系统设计都不是问题。
平心静气,脚踏实地
下面是真机的运行截图(当然纯属装逼,哈哈)
下面还是展示ipl10.nas代码
; haribote-ipl ; TAB=4 CYLS EQU 10 ; 十个柱面 ORG 0x7c00 ; MBR在内存中的位置为(DS=0,0x07c00=DS+0x7c00) ; 系统相关设置信息 JMP entry DB 0x90 DB "HELLOIPL" ; name of boot sector DW 512 ; size of sector DB 1 ; f DW 1 ; FAT first sector DB 2 ; FAT number DW 224 ; root dir size DW 2880 ; disk size in sector DB 0xf0 ; disk type DW 9 ; FAT length DW 18 ; 18 sector each road DW 2 ; disk up down DD 0 ; no partition DD 2880 ; reclaim the disk size DB 0,0,0x29 ; reserve DD 0xffffffff ; might be column DB "HELLO-OS " ; disk name DB "FAT12 " ; disk fs type RESB 18 ; reserve 18 byte ; init程序入口 entry: MOV AX,0 ; MOV SS,AX MOV SP,0x7c00 ; heap stack init MOV DS,AX ; 初始化代码段的基地址在0x00000 ; 读取磁盘到内存0x08200的位置 MOV AX,0x0820 MOV ES,AX MOV CH,0 ; cylinder number MOV DH,0 ; disk head number MOV CL,2 ; sector number readloop: MOV SI,0 ; failed times ; retry to read disk if failed, read one sector retry: MOV AH,0x02 ; AH=0x02 : 读磁盘 MOV AL,1 ; 1扇区 MOV BX,0 ;MOV DL,0x00 ; A驱动器 MOV DL,0x80 ; 驱动器号很关键 INT 0x13 ; 调用BIOS的函数例程 JNC next ADD SI,1 CMP SI,5 JAE error MOV AH,0x00 ;MOV DL,0x00 MOV DL,0x80 ; 驱动器号很关键 INT 0x13 JMP retry next: MOV AX,ES ADD AX,0x0020 ;每读取一个扇区内存向后偏移(ES+=0x0020)<<4 MOV ES,AX ADD CL,1 CMP CL,62 ;62个扇区 JBE readloop MOV CL,1 ADD DH,1 CMP DH,4 ;4磁头 JB readloop MOV DH,0 ADD CH,1 CMP CH,4 ;4柱面 JB readloop MOV [0x0ff0],CH JMP 0xc200 error: MOV SI,msg JMP putloop ok: MOV SI,msg1 putloop: MOV AL,[SI] ADD SI,1 ; SI设置为1 CMP AL,0 JE fin MOV AH,0x0e ; 在teletype模式下显示字符 MOV BX,15 ; 页码BH=0x00,前景色BL=0x0f INT 0x10 ; BIOS显示服务 JMP putloop fin: HLT ; 暂停处理器 JMP fin msg1: DB 0x0a, 0x0a ; 换行符 DB "READ OKKKK" DB 0x0a ; 换行符 DB 0 msg: DB 0x0a, 0x0a ; 换行符 DB "load error" DB 0x0a ; 换行符 DB 0 RESB 0x7dfe-$ ; (0x7dfe-当前位置)都填充0x00 DB 0x55, 0xaa
学习这本书到目前为止,还是学到了不少东西,其中包括计算机启动流程、BIOS中断向量表,实模式,保护模式,IDT,GDT,LDT,TSS,内存管理,定时器管理(这个主要是依赖时钟中断,时钟中断可是和任务调度密切相关,需要特别的注意),系统调用API,各种异常中断处理,可执行应用程序的编写(这当中可是和保护模式有很大的联系),还有就是深刻的体验到了模块化编程的各种好处。
在学习此书的过程中,遇到了很多问题,所以在此书的学习过程中,同时也学习了很多相关的数据,包括《linux内核的设计与实现》(PS:学习这本书的原因是因为我选择的课程就是讲授linux的内核,当然还是对此书的学习提供了很多的帮助,主要是概念上的理解和操作系统体系架构的理解);《深入理解linux内核》这本书很厚,但是讲解的比较细,但是如果你对计算机系统结构不是很了解的话,前面和硬件相关的部分理解起来比较困难,这本书对于有一定基础的人应该静下心来细看,肯定是有很大的收获,同时我认为这本书也可以作为内核编程的人的一本参考书籍;还有就是《386intel》手册,对于要学习《30天自制操作系统》的人来说intel386的手册应该静下心来仔细阅读。相信如果你能把这几本书吃透,说明你的基础就真的特别的扎实了,不论你是准备编写应用程序,还是内核编程,还是嵌入式系统设计都不是问题。
平心静气,脚踏实地
相关文章推荐
- Linux的SOCKET编程详解
- N皇后问题
- 【算法设计与分析基础】大整数乘法string版
- no installed service named "apache2"
- matlab中实现模糊粗糙集
- Nginx源代码分析之I/O模型细节(七)
- 在iTerm2中使用Zmodem的方法
- 第6章 马尔可夫法(PageRank的孩子) 实例和程序
- 【转】IBatis.Net项目数据库SqlServer迁移至Oracle
- 写sql语句连接的时候注意的一个小细节
- 自学笔记C语言复习2015年7月10日
- RPC原理
- 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ...
- HDU 1044 Collect More Jewels(BFS+DFS)
- ZXing 4.7.4 编译的问题
- 制作PPT时,可能这些小习惯你需要注意
- jquery 对 Json 的各种遍历
- 获取一个想要的指定文件的集合,获取文件夹下(包含子目录的所有.java的文件对象,并存储到集合中)
- 不兼容结构的协调——适配器模式(三)
- 如何做好div+css的浏览器兼容性