动手写操作系统2----环境搭建&OS HELLO WORLD

利用virtualBox虚拟机来模拟操作系统运行过程,主要使用工具

1.virtualBox

2.Ubuntu

在windows上安装virtualBox

https://www.virtualbox.org/wiki/Downloads

在virtualBox上安装ubuntu操作系统

https://ubuntu.com/download  可以下载最新桌面版Ubuntu 19.10

https://blog.csdn.net/scene_2015/article/details/83025750

设置ubuntu操作系统

安装基本工具 vim  nasm  hexedit 

1.窗口分辨率调整

https://blog.csdn.net/swingboard/article/details/49967239

2.安装搜狗输入法

https://www.cnblogs.com/zhuangmingnan/p/9496499.html

3.查看二进制文件 

安装hexedit   sudo apt-get install hexedit

使用vim。先用vim -b file打开文件。然后输入:%!xxd命令转换为十六进制。输入:%!xxd -r返回原显示文件

4.主机与虚拟机文件共享

https://blog.csdn.net/hi_bigguy/article/details/79691309

实现OS hello world

新建一个汇编文件boot.asm  实现如下:

org  0x7c00

jmp  entry
db   0x90
DB   "OSKERNEL"
DW   512
DB   1
DW   1
DB   2
DW   224
DW   2880
DB   0xf0
DW   9
DW   18
DW   2
DD   0
DD   2880
DB   0,0,0x29
DD   0xFFFFFFFF
DB   "MYFIRSTOS  "
DB   "FAT12   "
RESB  18

entry:
    mov  ax, 0
    mov  ss, ax
    mov  ds, ax
    mov  es, ax
    mov  si, msg

putloop:
    mov  al, [si]
    add  si, 1
    cmp  al, 0
    je   fin
    mov  ah, 0x0e
    mov  bx, 15
    int  0x10
    jmp  putloop

fin:
    HLT
    jmp  fin

msg:
    DB    0x0a,  0x0a
    db    "hello, world"
    db    0x0a
    db    0
TIMES 0x1fe-($-$$) DB 0x00
DB 0x00, 0x00

执行汇编命令nasm

nasm boot.asm -o boot.img

可以利用hexedit查看boot.img文件如下:

00000000   EB 4E 90 4F  53 4B 45 52  4E 45 4C 00  02 01 01 00  02 E0 00 40  0B F0 09 00  12 00 02 00  .N.OSKERNEL........@........
0000001C   00 00 00 00  40 0B 00 00  00 00 29 FF  FF FF FF 4D  59 46 49 52  53 54 4F 53  20 20 46 41  ....@.....)....MYFIRSTOS  FA
00000038   54 31 32 20  20 20 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  B8 00 00 8E  T12   ......................
00000054   D0 8E D8 8E  C0 BE 71 7C  8A 04 83 C6  01 3C 00 74  09 B4 0E BB  0F 00 CD 10  EB EE F4 EB  ......q|.....<.t............
00000070   FD 0A 0A 68  65 6C 6C 6F  2C 20 77 6F  72 6C 64 35  35 32 0A 00  00 00 00 00  00 00 00 00  ...hello, world552..........
0000008C   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
000000A8   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
000000C4   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
000000E0   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
000000FC   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
00000118   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
00000134   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
00000150   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
0000016C   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
00000188   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
000001A4   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
000001C0   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
000001DC   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ............................
000001F8   00 00 00 00  00 00 00             

利用virtualBox新建一个windows64位操作系统,设置从软盘启动,软盘文件选择boot.img

                     

最终结果运行如下:

                               

至此hello world实现完成,这里模拟一张软盘,将汇编代码写在第一个扇区,然后启动虚拟机由程序来执行,FAT12格式的软盘有特定格式,这里经过试验发现只要保证生成的软盘文件至少有512字节即可,可能与虚拟机加载软盘与实际物理机不同有关,参考其他资料,软盘大小应为1440KB,并且引导扇区最后字节应为0x55AA,这里可能与虚拟机实现机制有关,并不需要严格的软盘格式,后面继续研究主要研究一下上面代码含义以及软盘加载读写机制。

发布了302 篇原创文章 · 获赞 93 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/u014106644/article/details/104184949
今日推荐