根据于渊老师的《Orange’s 一个操作系统的实现》我开始了操作系统的制作
首先进行了helloworld的编写,大体过程是:
1.了解什么语言编写操作系统 书中给出:汇编与c++,但是hello'world编写仅仅是汇编,我也看不懂 直接复制粘贴
稍后代码块给出demo
2.寻找一款工具运行操作系统(总不能裸机加载,每次运行都重启) 书中给出一款叫做Bochs的软件,
个人觉得这款软件很老了 应该不是最新使用的工业软件,不过优点很明显,界面简洁。
如果我可以实现将.img或者.bin文件转化成.iso文件,那么我就可以在vm上运行我的操作系统了,但是我现在并没有进行这个工作
软件运行截图
3.汇编语言的安装 nasm直接下载,百度就有了
4然后进行操作系统的编写,这个就是刚才所说的helloworld 命名为boot.asm
org 07c00h ;load os to 7c00
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax ;string address
mov cx, 16 ;cx string size
mov ax, 01301h
mov bx, 00ch
mov dl, 0
int 10h ;No.10 interrupt
ret
BootMessage: db "hello, OS World"
times 510-($-$$) db 0 ;stuff space making result is 512B
dw 0xaa55 ;end
然后进行编译
nasm boot.asm -o boot.bin
如果出现nasm不是外部命令提示,那么就是未将nasm放进环境变量里,加入就可以了
此时出现了boot.bin文件,至此汇编部分完成
5.下一步操作是不同于其他语言编写的步骤,将bin文件写入软盘(类比windows 在安装操作系统的时候需要一个光盘,这个写入的是软盘,不过是虚拟的软盘而已)
然后将虚拟软盘文件在Bochs上运行即可得到helloworld结果
首先我们需要一张虚拟软盘,在bochs安装之后,文件夹内会有一个bximage应用程序,作用就是制作虚拟软盘与硬盘
运行截图:
选择第一个 创建新的软盘(floppy disk)fd
第一个输入fd剩下的直接回车跳过
至此本文件夹下得到一个虚拟软盘 默认a.img(如有需要在创建命令行界面输入名字时,不选择默认 自行输入名字)
第二步将4中编译汇编语言得到的.bin文件写入软盘 再运行软盘即可成功
这一步涉及到安装一个linux中的dd指令 百度自行安装。
然后直接敲
dd if=boot.bin of=E:/file/os/a.img bs=512 count=1
of=后面接的是镜像所在的绝对地址,命令不能多打空格 会出现错误
整个过程如果没有任何问题,那么我们就可以得到一个内嵌有操作系统引导代码,通过虚拟运行就可以展现出红色字体的hello world操作系统
下面就是运行 同样需要几个步骤,
大体分为
1.编写虚拟机引导配置文件(自己起的名 我也不知道叫什么)
当启动bochs时,窗口选项configuration下load是加载配置文件,新建文件bosh.src,与软盘处于同一文件夹下
megs:32
romimage:file=$BXSHARE/BIOS-bochs-latest
vgaromimage:file=$BXSHARE/VGABIOS-lgpl-latest
floppya:1_44=a.img,status=inserted
#软盘映射
boot:floppy
#硬盘
#boot:disk
#分配HD为60M,根据分配硬盘大小,cylinders, heads, spt会变化
#ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
#ata0-master: type=disk, mode=flat, path="boot.img", cylinders=121, heads=16, spt=63
log:bochsout.txt
mouse:enabled=0
keyboard: keymap=$BXSHARE/keymaps/x11-pc-de.map
然后加载,运行该配置文件,得到hello world结果
至此,环境配置完成,下一篇记录一下自己所遇到的bug及解决办法