簡體   English   中英

如何使用匯編(NASM)從CD-ROM將內核加載到內存中

[英]How to load kernel into memory from CD-ROM using Assembly (NASM)

我正在為自己編寫一個引導程序和內核,並且引導程序和內核都將在CD-R上刻錄,並將作為CD-live發揮作用。 它不是linux CD-Live或其他東西,完全是我自己的引導程序和內核。 我不想使用其他布爾加載器(例如GRUB),所以請不要建議我使用它們。

這是我的問題:在我的引導加載程序ASM代碼中,我想將我的內核和內核條目從CD-ROM (而不是從硬盤或軟盤)加載到RAM中,並假設我們知道內核確切地位於驅動器上。 CD-ROM(扇區號)。 據我所知,我必須使用int 0x13,AH = 02h,它將從Drive讀入RAM的扇區。 為了使用此中斷服務,我必須設置以下將在列表中列出的寄存器:參數:AH 02h要讀取計數CX軌道+扇區的AL扇區/請參見備注DH頭DL驅動器ES:BX緩沖區地址指針

我的問題是關於DL和DH。為了指向要讀取的第一個硬盤驅動器,我們可以將其設置為80h,對於軟盤,我們可以將其設置為00h。 但是我想從CD-ROM中讀取內容,我不知道必須為DH和DL使用什么值。

為了從CD-ROM讀取幾個扇區到RAM ,這是一個正確的中斷(int 0x13)嗎? 如果是,我應該為DH和DL設置什么值。

問候,Pooria。

為了使BIOS從CD加載引導扇區,您需要使用“ El Torito”標准使CD可引導。

使用后,您有兩種選擇
一種。 仿真-BIOS仿真軟盤或硬盤驅動器,您可以通過INT13調用(使用設備00或設備80)讀取內核。
b。 該設備不會模擬,您可以使用INT13 ExtendedRead函數直接從CD讀取。

要查看如何完成此操作,請查看Linux“ ISOLINUX”加載程序-ISOLINUX.ASM

為了提供更具體的出發點,請參閱El Torito規范第5.3節:

Once the system jumps to segment:0, the program can retrieve its boot
information by issuing INT 13, Function 4B, AL=01.  After the boot process
has been initiated the INT 13 Extensions (functions 41-48) will access the
CD using 800 byte sectors and the LBA address provided to INT 13 is an
absolute sector number. This gives any program running in no emulation mode
the ability to locate the boot catalog, and any other information on the
CD, without providing a device driver.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM