使用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,启动虚拟机就可以显示信息了。


经验分享 程序员 微信小程序 职场和发展