nasm實(shí)現(xiàn)的用vmware運(yùn)行自做的linux啟動(dòng)盤的引導(dǎo)代碼
當(dāng)計(jì)算機(jī)電源被打開(kāi)后,它會(huì)先進(jìn)行加電自檢(POST),然后尋找啟動(dòng)盤,如果是選擇從軟盤啟動(dòng),計(jì)算機(jī)就會(huì)查找軟盤的0面0磁道1扇區(qū),如果發(fā)現(xiàn)它以0xAA55結(jié)束,則BIOS認(rèn)為它是一個(gè)引導(dǎo)扇區(qū),然后BIOS就會(huì)把引導(dǎo)扇區(qū)的前512字節(jié)的引導(dǎo)代碼拷貝到內(nèi)存的0000:7c00處并將控制器徹底交給這段引導(dǎo)代碼。
簡(jiǎn)單的引導(dǎo)代碼如下所示:
org 07c00h ;告訴編譯器加載到07c00h處
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ;調(diào)用顯示字符串函數(shù)
jmp $; 無(wú)限循環(huán)
DispStr:
mov ax, BootMessge
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessge: db "hello, OS world!"
times 510 - ($ - $$) db 0
dw 0aa55h
這段代碼時(shí)用nasm寫的,它類似于masm的語(yǔ)言。org 07c00h命令就是將命令后面的代碼中的偏移地址都加上07c00h,這樣程序就相當(dāng)于在0000:7c00出執(zhí)行了。按書(shū)中所講的,用命令nasm bootsector.asm -o boot.bin生成引導(dǎo)代碼boot.bin,然后將boot.bin寫入軟盤的0面0磁道1扇區(qū)就可以了。問(wèn)題就來(lái)了,我沒(méi)有軟盤怎么搞,不過(guò)在wmware虛擬機(jī)中貌似可以用軟盤的映像文件來(lái)啟動(dòng),所以就想到自己制作一個(gè)映像文件來(lái)代替軟盤來(lái)作為啟動(dòng)盤,不過(guò)怎么創(chuàng)建這個(gè)映像文件呢?
以前記得用linux下的dd命令做過(guò)linux的啟動(dòng)盤,dd應(yīng)該是可以制作的,于是在網(wǎng)上找了下dd制作映像文件,果然是可以的,制作方法如下:
1 先制作一個(gè)空的軟盤映像文件diska.img(1.44Mb的軟盤映像文件):
dd if=/dev/zero of=diska.img bs=512 count=2880
2 制作一個(gè)包含boot.bin的映像文件boot.img:
dd if=boot.bin of=boot.img bs=512 count=1
3 將diska.img中1個(gè)扇區(qū)后面的數(shù)據(jù)拷貝到boot.img的后面
dd if=diska.img of=boot.img skip=1 seek=1 bs=512 count=2879
這樣就做成了一個(gè)大小為1.44Mb的包含引導(dǎo)代碼的映像文件。
后面的事就好辦了,直接在wmware創(chuàng)建一個(gè)空的虛擬機(jī),在設(shè)置中將Floppy的路徑設(shè)置為上面制作的引導(dǎo)扇區(qū)的路徑就ok了,如下圖那樣:
設(shè)置Floppy連接,斷開(kāi)CD/DVD連接,啟動(dòng)虛擬機(jī)就可以看到下面的畫面了:
總結(jié):這個(gè)小的代碼的編寫和運(yùn)行還是能讓自己對(duì)系統(tǒng)啟動(dòng)有一個(gè)更深的認(rèn)識(shí),不過(guò)有個(gè)不懂的就是怎么用ISO鏡像文件啟動(dòng),怎么將引導(dǎo)代碼寫入ISO鏡像文件,依然沒(méi)有找到很好的方法解決。
- PHP程序員玩轉(zhuǎn)Linux系列 nginx初學(xué)者引導(dǎo)
- Linux的引導(dǎo)過(guò)程剖析
- Linux管理員手冊(cè)(5)--引導(dǎo)和關(guān)機(jī)
- linux系統(tǒng)命令筆記整理
- Linux系統(tǒng)用戶管理命令小結(jié)
- Linux系統(tǒng)清除緩存的方法總結(jié)
- linux系統(tǒng)sudo命令詳解
- Linux系統(tǒng)刪除文件夾和文件的命令
- linux系統(tǒng)下dd命令的使用方法
- Linux系統(tǒng)中sudo命令的十個(gè)技巧總結(jié)
- linux引導(dǎo)系統(tǒng)的方法分析
相關(guān)文章
淺談服務(wù)發(fā)現(xiàn)和負(fù)載均衡的來(lái)龍去脈
單機(jī)時(shí)代,傳統(tǒng)軟件大多是單體/巨石架構(gòu)(Monolithic)。大家往一個(gè)代碼倉(cāng)庫(kù)提交CODE,這會(huì)導(dǎo)致應(yīng)用膨脹,以及擴(kuò)展受限,無(wú)法按需伸縮等諸多問(wèn)題。單體架構(gòu)怎么解決多人合作的問(wèn)題?模塊化,按功能拆分,模塊之間定義編程接口(API)。本篇文章帶你詳細(xì)了解。2021-05-05300行代碼讓外婆實(shí)現(xiàn)語(yǔ)音搜索購(gòu)物功能
這篇文章主要介紹了300行代碼讓外婆實(shí)現(xiàn)語(yǔ)音搜索購(gòu)物功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Cordova插件實(shí)現(xiàn)JavaScript與Java的通信的詳細(xì)過(guò)程
本文將結(jié)合最常用的華為推送服務(wù)Cordova插件,介紹HMS Core用到的JS-Java消息交互方式,講解在JS側(cè)如何調(diào)用Java側(cè)接口,最終實(shí)現(xiàn)HMS Core能力,感興趣的朋友一起學(xué)習(xí)下吧2021-06-06詳解Python OpenCV數(shù)字識(shí)別案例
信用卡識(shí)別的案例用到了圖像處理的一些基本操作,對(duì)剛上手CV的人來(lái)說(shuō)還是比較友好的。2021-05-05ascii碼表(二進(jìn)制 十進(jìn)制 十六進(jìn)制)詳細(xì)介紹
這篇文章主要介紹了ascii碼表二進(jìn)制 十進(jìn)制 十六進(jìn)制詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-01-01