从去年就想好好的读一下这本书,跟着书上做一下,但是给耽搁了,现在就好好的开始探索这么书吧!
虽然我很想在这里吹一段这本书有多么的厉害,但是!我第一章都没有看完,吹不了!!!等我读的个七七八八再回来吹吧。
我是在搜索嵌入式的学习路线中发现的这本书,当时他们说这本书很有趣,操作能力强,对操作系统的理解很有帮助,于是上网准备买一本。然鹅,它已经绝版了。好在图书馆可以借到,破费一番周折之后,终于弄到了这本书。这本书的作者很有趣,他所提出的在实践中学习很值得我们学习。
啰嗦了这么多,下面开始对这本书的第一章开始进行总结。
首先介绍一下我使用的环境: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就能跑起来了,这和我们以往的编程是不同的,它是在裸机上面运行的,不依赖任何软件!