1. 程式人生 > >自己寫個作業系統《一》製作啟動U盤,真機啟動

自己寫個作業系統《一》製作啟動U盤,真機啟動

網路上不少介紹寫個簡易作業系統的文章,大都是製作一個軟盤映像檔案,然後從虛擬軟碟機中啟動。我希望能直接將系統放入U盤,直接從U盤啟動。經過一番嘗試,成功了。

1、一臺centos linux物理機

2、as86、ld86工具

下載地址 ftp://rpmfind.net/linux/centos/6.8/os/x86_64/Packages/dev86-0.16.17-15.1.el6.x86_64.rpm

安裝  rpm -ivh dev86-0.16.17-15.1.el6.x86_64.rpm

3、新建彙編檔案 boot.s

  1.     BOOTSEG= 0x07c0
  2.     entry     start
  3. start
    :
  4.     jmpi    go, BOOTSEG
  5. go:
  6.     movax,cs
  7. movdx,ax
  8. moves,ax
  9. mov[msg+17],ah
  10. movcx, #20
  11. movdx, #0x1004
  12. mov     bx, #0x000c
  13. movbp, #msg
  14. movax, #0x1301
  15. int     0x10
  16. loop0:
  17.     jmp     loop0
  18. msg:
  19.     .ascii    "Loading system..."
  20. .byte     0x0d, 0x0a, 0x00
  21. .org      510
  22. .word     0xaa55
4、新建Makefile檔案

boot.bin: boot.o
        ld86 -0 -d -s -o boot.bin boot.o

boot.o: boot.s
        as86 -0 -o boot.o boot.s

5、執行make,得到boot.bin

6、機器上插入u盤

7、切換到root使用者

8 、fdisk指令檢視U盤裝置名稱,我這裡查到的是 /dev/sdb

9、將boot.bin寫入到u盤

dd if=boot.bin of=boot.bin bs=512 count=1

10、重啟系統,將u盤設定為啟動裝置

11、大功造成

可以看到系統啟動起來,螢幕上顯示 紅色的 Loding system...

附:

如果是製作軟體映像檔案Makefile可以這樣寫

boot.img: boot.img_
        dd if=/dev/zero of=boot.img seek=1 bs=512 count=2879

boot.img_: boot.bin
        dd if=boot.bin of=boot.img_ bs=512 count=1

boot.bin: boot.o
        ld86 -0 -d -s -o boot.bin boot.o

boot.o: boot.s
        as86 -0 -o boot.o boot.s