使用VMware运行最简单的操作系统
《使用VMware运行最简单的操作系统》
网上找的代码,自己做了一遍,发现挺好玩的,虽然离真正的操作系统还很遥远。
1,首先看下编译代码的操作系统信息。
[root@xxx myos]# uname -a
Linux xxx 2.6.27 #1 SMP Sat Jul 2815:10:09 CST 2012 i686 i686 i386 GNU/Linux
[root@xxx myos]# cat /etc/issue
CentOS release 5.4 (Final)
Kernel on an m
[root@xxx myos]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr00:0C:29:08:6E:41
inet addr:192.168.147.2 Bcast:192.168.147.255 Mask:255.255.255.0
[root@xxx myos]# pwd
/root/study/myos
2,新建os.asm文件,内容如下显示,如果要显示多点内容,把36改大些就行。
[root@xxx myos]# cat os.asm
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 36
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "Hello, world! rosetta2012-12-29"
times 510-($-$$) db 0
dw 0xaa55
此段代码,一开始指定了内存段地址07c00h,这也是Linux-0.11一开始加载第一扇区代码的位置,然后主要是利用BIOS 10h中断,AH=13H功能号,显示字符串,ES:BP为需要显示的字符串地址,CX为字符串的长度,DX为显示的位置,详细信息如下:
功能13H
功能描述:在Teletype模式下显示字符串
入口参数:AH=13H
BH=页码
BL=属性(若AL=00H或01H)
CX=显示字符串长度
(DH、DL)=坐标(行、列)
ES:BP=显示字符串的地址 AL=显示输出方式
出口参数:无
3,生成供VMware运行的img文件。
[root@xxx myos]# nasm os.asm -o os.bin
[root@xxx myos]# dd conv=syncif=os.bin of=os.img bs=1440k count=1
[root@xxx myos]# ls
os.asm os.bin os.img
os.img就是最终需要的文件。
4,VMware中新建,下一步,操作系统类型和版本都是other
5,选择刚生成的os.img
6,启动虚拟机就可以显示信息了。