日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

操作系统引导-----QEMU环境下制作boot引导程序

發布時間:2023/12/20 windows 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统引导-----QEMU环境下制作boot引导程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目標

  • 制作一個光盤實現qemu下操作系統的引導

儲備知識

  • df命令:列出文件系統的整體磁盤使用量

  • du命令:常用于計算目錄所占容量
    -h :以(G/M)方式顯示容量
    -k:以KB方式顯示
    -m:以MB方式顯示

  • mkfs命令:使用指定的文件系統格式化磁盤
    -t :接文件系統格式,如ext3,ext2,vfat等

  • mount命令:將文件系統掛載到指定的目錄下

  • losetup命令:連接文件與循環設備(/dev/loop)
    詳解
    -d 卸除設備。
    -e<加密方式> 啟動加密編碼。
    -o<平移數目> 設置數據平移的數目。
    循環設備可把文件虛擬成區塊設備,籍以模擬整個文件系統,讓用戶得以將其視為硬盤驅動器,光驅或軟驅等設備,并掛入當作目錄來使用。

  • /dev/loop設備
    /dev/loop(或稱vnd (vnode disk)、lofi(循環文件接口))是一種偽設備,這種設備使得文件可以如同塊設備一般被訪問。
    在使用之前,循環設備必須與現存文件系統上的文件相關聯。這種關聯將提供給用戶一個應用程序接口,接口將允許文件視為塊特殊文件(參見設備文件系統)使用。因此,如果文件中包含一個完整的文件系統,那么這個文件就能如同磁盤設備一般被掛載。
    這種設備文件經常被用于光盤或是磁盤鏡像(IOS、IMG)。通過循環掛載來掛載包含文件系統的文件,便使處在這個文件系統中的文件得以被訪問。這些文件將出現在掛載點目錄。
    在一個目錄上掛載包含包含文件系統的文件的步驟:
    使用一個循環設備(/dev/loop)連接文件(使用命令 losetup)
    在目錄上掛載該循環設備(使用命令 mount)

  • 其他/dev虛擬設備

/dev/null: “空”設備,也有人稱它為黑洞。任何輸入到這個“設備”的數據都將被直接丟棄 最常用的用法是把不需要的輸出重定向到這個文件。 /dev/zero:零”設備,可以無限的提供空字符(0x00,ASCII代碼NUL)。常用來生成一個特定大小的文件。 /dev/random和/dev/urandom:隨機數設備,提供不間斷的隨機字節流。二者的區別是/dev/random產生隨 機數據依賴系統中斷,當系統中斷不足時,/dev/random設備會“掛起”,因而產生數據速度較慢,但隨機性 好;/dev/urandom不依賴系統中斷,數據產生速度快,但隨機性較低。

生成一個大小為1.44mb軟盤,并且將其掛載到指定目錄下

實現過程

  • 先生成一個空的大小為1.44MB的磁盤

    mkdosfs命令
    詳解
    -F 指定 FAT 表的大小,通常是 12 或是 16 個位元組。12 位元組通常用于磁碟片,16 位元組用于一般硬盤的分割區,也就是所謂的 FAT16 格式。這個值通常系統會自己選定適當的值。在磁碟片上用 FAT16 通常不會發生作用,反之在硬盤上用 FAT12 亦然。
    xxd命令查看其內容
    xxd -u -a -g l -c 16 floopy

    其前512字節是一個引導扇區(Boot Sector),前62字節是BPB的結構,BPB數據結構的字段是windows文件系統和操作系統約定好的,用于描述磁盤的物理布局,可以適用于FAT系列文件系統和NTFS文件系統。這里我們看到最后的文件系統類型為FAT12

FAT引導扇區結構

詳細介紹鏈接

引導代碼

boot.asm程序:

jmp init; BS_jmpBoot短跳轉指令(加上nop填充后為3個字節) nop Bs_OEMName db "Jiaxgong";Bs_OEMName 廠商名稱 8字節 BPB_BytsPerSec dw 512;每扇區字節數 BPB_SecPerClus db 1;每簇扇區數 BPB_RsvdSecCnt dw 1;保留區中的保留扇區數FAT12必須為1,(引導記錄占用的扇區數) BPB_NumFATs db 2;此卷中FAT表的份數,建議為2 BPB_RootEntCnt dw 512;根目錄中的目錄項數 FAT12中建議取值512 BPB_TotSec16 dw 2880;扇區總數 BPB_Media db 0xf0;BPB_Media 存儲介質f0表示可移動介質,f8表示固定介質 BPB_FATSz16 dw 9;一個FAT表所占的扇區數 BPB_SecPerTrk dw 18;每磁道扇區數 BPB_NumHeaders dw 2;磁頭數 BPB_HiddSec dd 0;FAT分區之前的隱藏扇區數,對于未分區介質必須為0 BPB_TotSec32 dd 0 BS_drveNum db 0;int13得到的驅動器號 BS_Reserved1 db 0;保留(供NT使用) BS_BootSig db 0x29;擴展引導標記,指明此后的3個域可用 BS_VolID dd 0;卷標序列號 BS_VolLab db "VirtualBoot";磁盤卷標,此域必須與根目錄中11字節長的卷標一致 BS_FilSysType db "FAT12 ";文件系統類型init:mov ax, 7c00hmov ds, axmov es, axmov ss, axmov sp, 180hcall DispStrloop:jmp loopDispStr:mov ax, BootMsgmov bp, axmov cx, 16mov ax, 01301hmov bx, 000chmov dl, 0int 10hretBootMsg: db "Hello, OS World!"times 510-($-$$) db 0dw 0xaa55

以上程序寫好后,使用nasm命令匯編成二進制文件
nasm boot.asm -o boot.bin
匯編完成后,可以使用以下命令查看boot.bin的大小,剛好為512字節
wc -c boot.bin

plus:反匯編指令ndisasm boot.bin -o 0x7c00>> disboot.asm可以查看處理過后的匯編代碼

將引導代碼寫入floopy軟盤中

dd if=boot.bin ibs=512 of=floopy obs=512 count=1 seek=0 conv=notrunc
notrunc意味著不縮減輸出文件,也就是說,如果輸出文件已經存在,只改變指定的字節,然后退出,并保留輸出文件的剩余部分。沒有這個選項,dd將創建一個512字節長的文件。

寫入完成后,使用qemu啟動軟盤(a.img就是上面的floppy軟盤,為了和命令區分,改為了a.img)
qemu-system-x86_64 -drive file=a.img,of=floppy

總結

以上是生活随笔為你收集整理的操作系统引导-----QEMU环境下制作boot引导程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。