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

时间:2022-11-08 08:30:49

从去年就想好好的读一下这本书,跟着书上做一下,但是给耽搁了,现在就好好的开始探索这么书吧!

虽然我很想在这里吹一段这本书有多么的厉害,但是!我第一章都没有看完,吹不了!!!等我读的个七七八八再回来吹吧。

我是在搜索嵌入式的学习路线中发现的这本书,当时他们说这本书很有趣,操作能力强,对操作系统的理解很有帮助,于是上网准备买一本。然鹅,它已经绝版了。好在图书馆可以借到,破费一番周折之后,终于弄到了这本书。这本书的作者很有趣,他所提出的在实践中学习很值得我们学习。

啰嗦了这么多,下面开始对这本书的第一章开始进行总结。

首先介绍一下我使用的环境:VMware + ubuntu,版本分别是10.0.1/14.04(ubuntu版本查看方式 cat /stc/issue)

翻开书的第一章,WTF???第一个要求就是准备一张软盘?软盘是我们计算机基础老师用来忆苦思甜的玩意儿了好吗?我去哪里弄块软盘来?有问题问度娘,发现这个问题很好解决嘛,用虚拟机就不没事了,虚拟软盘嘛。但是操作方法嘛,我这里提供一种在linux系统内实现的方法。

使用下列工具,就可以实现软盘引导。

1.dd:在指定大小内对一个文件进行拷贝,并在拷贝的同时进行指定的转换。

http://www.cnblogs.com/dkblog/archive/2009/09/18/1980715.html

这个链接对dd进行了详细的讲解。

2.nasm:汇编的编译工具,可以生成.bin文件。

3.qemu:通过阅读一些大牛的博客,我现在将它大致理解为虚拟机。

http://www.cnblogs.com/youxia/p/linux019.html

这个链接对qemu进行了概述。

好了,既然环境、工具都准备好了,那我们便开始编写Helloworld吧!

1.编写Helleworld的代码

1.1.创建asm文件


vi boot.asm


1.2.编写boot.asm文件


        org 07c00h
        mov ax,cs
        mov ds,ax
        mov es,ax
        call DispStr
        jmp $
DispStr:
        mov ax,BootMessage
        mov bp,ax
        mov cx,16
        mov ax,01301h
        mov bx,000ch
        mov dl,0
        int 10h
        ret
BootMessage:    db "Hello,OS world!"
times 510-($-$$) db 0


dw 0xaa55



1.3.编写boot.asm文件并生成boot.bin文件

nasm boot.asm -o boot.bin

1.4.生成boot.img镜像文件

dd conv=sync if=boot.bin of=boot.img bs=1440k count=1

1.5.将helloworld跑起来

qemu-system-x86_64 -fda boot.img -boot a -m 64 -localtime

好了,这样helloworld就能跑起来了,这和我们以往的编程是不同的,它是在裸机上面运行的,不依赖任何软件!