自己动手写操作系统(一)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

⾃⼰动⼿写操作系统(⼀)
借着本来现在就在上操作系统内核课的机会,在图书馆借了本于渊的《⾃⼰动⼿写操作系统》,准备⾃⼰亲⾃动⼿写⼀下,提⾼⾃⼰对操作系统的理解。

开篇技术博客来记录⼀下⾃⼰的学习历程。

⼩弟第⼀次写博客,有什么不到的地⽅还请⼤家海涵。

⾃⼰选择的平台是Ubuntu14和Bochs。

具体的Bochs的安装教程见/art/201407/446838_all.htm,这⾥就不做具体的介绍。

第⼀个程序当然是hello world这个经典的⼊门程序,不过这次是使⽤汇编语⾔来编写的⼀个bootloader级别的hello world,根据⾃⼰的操作流程,我把⾃⼰⼤体的步骤说⼀下,以便⼤家有⼀个清晰的认识:
⼀、安装bochs。

⼆、进⼊bochs的安装⽬录使⽤“./bximage”命令制作⼀张空的软盘。

三、在⾃⼰的⼯程⽬录下写⾃⼰的源⽂件(boot.asm),并使⽤下⾯命令将源⽂件进⾏编译得到镜像。

nasm boot.asm -o boot.bin
四、将第三部制作的软盘a.img(默认名字)拷贝到当前⼯程⽬录下。

五、写⼊系统镜像。

dd if=你的镜像路径(即编译得到的boot.bin的路径) of=a.img
六、写⾃⼰的配置⽂件(bochsrc)。

七、按照⾃⼰的配置⽂件执⾏bochs。

bochs -f bochsrc
完成之后的⼯程⽬录⾥⾯应该有⼀下的⼏个⽂件:
下⾯是执⾏完第七步的操作之后的界⾯
c
直接按ENTER,会出现下⾯界⾯,⿊乎乎的,什么也没有
但是在终端中输⼊C就会正确的显⽰出我们想要的东西了
下⾯将上述操作中所涉及到的源⽂件代码贴出来,以便⼤家可以⾃⼰轻松的在⾃⼰的机⼦上轻松的演⽰;
下⾯是我的Bochs配置⽂件,bochsrc
1 ###############################################################
2 # Configuration file for Bochs
3 ###############################################################
4
5 # how much memory the emulated machine will have
6 megs: 32
7
8 # filename of ROM images
9 romimage: file=/usr/share/bochs/BIOS-bochs-latest
10 vgaromimage: file=/usr/share/vgabios/vgabios.bin
11
12 # what disk images will be used
13 floppya: 1_44=a.img, status=inserted
14
15 # choose the boot disk.
16 boot: floppy
17
18 # where do we send log messages?
19 # log: bochsout.txt
20
21 # disable the mouse
22 mouse: enabled=0
23
24 # enable key mapping, using US layout as default.
25 #keyboard_mapping: enabled=1, map=/usr/share/bochs/keymaps/x11-pc-us.map
View Code
boot.asm的源码内容
org 07c00h ; 告诉编译器程序加载到7c00处
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ; 调⽤显⽰字符串例程
jmp $ ; ⽆限循环 $代表当前地址
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 16 ; CX = 串长度
mov ax, 01301h ; AH = 13, AL = 01h
mov bx, 000ch ; 页号为0(BH = 0) ⿊底红字(BL = 0Ch,⾼亮)
mov dl, 0 ; 将DL中的ASCII码显⽰到屏幕,将'\0'送到DL中,并显⽰
int 10h ; 10h 号中断
ret ; 返回到调⽤处
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0 ; 填充剩下的空间,使⽣成的⼆进制代码恰好为512字节
dw 0xaa55 ; 结束标志
View Code
这次就到这⾥,主要是介绍⼀下环境以及有⼀个直观的认识。

以后的内容应该更主要的是代码⽅⾯的内容了。

相关文档
最新文档