自己寫個作業系統《一》製作啟動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
- BOOTSEG= 0x07c0
- entry start
- start
- jmpi go, BOOTSEG
- go:
- movax,cs
- movdx,ax
- moves,ax
- mov[msg+17],ah
- movcx,
#20
- movdx,
#0x1004
- mov bx,
#0x000c
- movbp,
#msg
- movax,
#0x1301
- int 0x10
- loop0:
- jmp loop0
- msg:
- .ascii "Loading system..."
- .byte 0x0d,
0x0a, 0x00
- .org 510
- .word 0xaa55
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