LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2352|回复: 10

10分钟写一个“操作系统”(《自己动手写操作系统》笔记)

[复制链接]
发表于 2006-6-26 21:05:54 | 显示全部楼层 |阅读模式
《自己动手写操作系统》一书开篇介绍了一个“引导扇区”代码,实现了启动后在屏幕上显示红色“Hello OS world!”的功能。遗憾的是,作者使用的工作平台是Windows,创建软盘镜像等过程太过繁复。我这篇笔记是想说明一下在LINUX平台下做这个实验的步骤。

你需要准备些什么:
1、nasm汇编器,我用的gentoo已经默认就有了
2、vmware workstation,原谅我使用盗版软件。我的qemu没有编译成功,而且vmware工作得也很好,也就没有折腾着一定要装一个开源软件了。

下面编辑一个boot.asm文件如下:

  1.                 org        07c00h
  2.                 mov        ax,        cs
  3.                 mov        ds,        ax
  4.                 mov        es,        ax
  5.                 call        DispStr
  6.                 jmp        $
  7. DispStr:
  8.                 mov        ax,        BootMessage
  9.                 mov        bp,        ax                                ;es:bp = 串地址
  10.                 mov        cx,        16                                ;cx = 串长度
  11.                 mov        ax, 01301h
  12.                 mov        bx,        000ch
  13.                 mov        dl,        0
  14.                 int        10h
  15.                 ret
  16. BootMessage:        db        "Hello, OS world!"
  17.                 times        510-($-$$) db 0        ;填充剩下的空间,使生成的二进制代码恰好为512字节
  18.                 dw        0xaa55
复制代码

用nasm编译:
$ nasm boot.asm -o boot.bin
这样就得到了一个512字节的boot.bin文件了,这个就是软盘启动扇区里面应该放的代码。你可以用下面这个命令生成软盘镜像文件:
$ dd conv=sync if=boot.bin of=boot.img bs=1440k count=1
这样我们就得到软盘镜像boot.img了。注意命令中的conv=sync,使用这个选项后可以使得在把每个输入块填充到ibs个字节时,不足部分用空(NULL)字符补齐。在这个例子里由于输入文件只有512个字节,输出文件却需要1.44MB所以我用了这个选项。

下面,用vmware新建一个虚拟机,把软驱设置为刚才生成的镜像,启动系统,就可以得到预期的效果了。怎么样,是不是很简单呢?
发表于 2006-6-26 21:29:01 | 显示全部楼层
我先赞一个!
回复 支持 反对

使用道具 举报

发表于 2006-6-26 22:41:14 | 显示全部楼层
呵呵,好玩。
从这个贴子里学到了一点dd的用法。。
dd
du
df
都很有用
回复 支持 反对

使用道具 举报

发表于 2006-6-27 18:18:13 | 显示全部楼层
只能说是个bootloader!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-27 18:28:01 | 显示全部楼层
是的,所以我打了个引号。

4年前学的汇编都忘光光了,而且是16位汇编。对于保护模式及保护模式下的汇编很不熟悉,有什么好的资料吗?
回复 支持 反对

使用道具 举报

发表于 2006-6-27 20:09:55 | 显示全部楼层
Post by ifree
是的,所以我打了个引号。

4年前学的汇编都忘光光了,而且是16位汇编。对于保护模式及保护模式下的汇编很不熟悉,有什么好的资料吗?

Intel IA-32 architecture manuals From Volume A to Volume C
回复 支持 反对

使用道具 举报

发表于 2006-7-12 11:24:21 | 显示全部楼层
这个东西.......

不过用vm多麻烦啊,用boch好了,用bximg(好象这个工具,bochs自带的,制作img工具的)工具和dd命令就可以制作软盘和硬盘img文件,我就是用那个,很方便,而且bochs小,速度快!
回复 支持 反对

使用道具 举报

发表于 2006-7-12 12:25:03 | 显示全部楼层
顶一个~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2006-7-13 17:51:43 | 显示全部楼层

顶一下

我也有这本书。边上还有一个UNIX代码分析,刚刚做了一个文件系统的课设。嘿嘿,这个暑假就要开始做系统了。
回复 支持 反对

使用道具 举报

发表于 2006-7-16 17:32:45 | 显示全部楼层
《自己动手写操作系统》看过,但这个程序连bootloader都算不上。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表