簡體   English   中英

如何將bin文件(512字節)寫入軟盤的第一個扇區(0扇區)?

[英]How do I write a bin file (512 bytes) to the first sector (sector 0) of a floppy disk?

如何將.bin 文件寫入軟盤/虛擬軟盤/軟盤映像的第一個扇區?

我正在嘗試引導一個簡單的 512 字節引導加載程序。 到處的大小都寫着“512 字節”,所以我應該已經好了。

附加信息:

引導加載程序只顯示一個字符串,我正在學習簡單的匯編。 有些工作是在 Windows 中完成的,有些是在Ubuntu 14.04 (Trusty Tahr) 中完成的(如果這很重要)。

即使它有引導加載程序標志,它也不會引導。

如果您使用的是Linux,則可以使用DD實用程序。 還有一個適用於Microsoft Windows的DD版本。


一般DD用法

如果你想制作一個零填充的虛擬磁盤映像,大小為720K軟盤,你可以像這樣使用dd

dd if=/dev/zero of=disk.img bs=1024 count=720

這將創建一個名為disk.img的文件,其大小為1024 * 720 = 737280字節。 可以創建一個1.44MB的零填充軟盤映像:

dd if=/dev/zero of=disk.img bs=1024 count=1440

將二進制圖像寫入從圖像開頭開始的虛擬軟盤可以這樣做:

dd if=bootload.bin of=disk.img conv=notrunc 

此示例將文件bootload.bin置於磁盤映像的開頭(在本例中稱為disk.img )而不截斷( conv=notrunc )如果在虛擬磁盤映像上不使用conv=notrunc ,它將寫入bootload.bin並將磁盤映像截斷為引導加載程序的大小。


DD還能夠通過跳轉到磁盤開頭以外的位置來寫入磁盤映像的特定部分。 如果您需要在特定扇區中放置信息(代碼/數據),這將非常有用。 此示例可用於在磁盤映像的第一個512字節扇區之后放置引導加載程序的第二個階段:

dd if=stage2.bin of=disk.img bs=512 seek=1 conv=notrunc

bs=512將塊大小設置為512(因為它是大多數軟盤扇區的典型大小,因此更容易)。 seek=1尋找超過圖像開頭的第一個塊(512字節),然后寫入文件stage2.bin 我們需要再次使用conv=notrunc ,因為我們不希望DDstage2.bin結束時截斷磁盤映像。

dd if=stage2.bin of=disk.img bs=512 seek=18 conv=notrunc

此示例與上一個示例類似,但在寫入stage2.bin之前跳過9216字節(512 * 18)


如果你有一個軟盤連接到Linux系統(和root訪問),你可以用類似的東西編寫bootloader

dd if=bootload.bin of=/dev/fd0 

其中/dev/fd0是軟盤的設備。 /dev/fd0通常是軟盤A(如果存在), /dev/fd1是軟盤B(如果存在)。


DD for Windows

如果您在Microsoft Windows上運行,則可以使用實用程序的DD實用程序版本。 最新下載是dd-0.6beta3.zip ,是推薦的最低版本。 它有一些舊的沒有的功能。 只需打開zip文件並將其解壓縮到Windows路徑上的某個位置即可。

這聽起來很迷人。

我在當天寫了許多次寫入軟盤的前512個字節。 我想在更深層次上了解它。

Roadkil的扇區編輯器執行此操作,它讓您在屏幕上打開前512個字節,並將其保存到文件中,並打開前512個字節的文件,並將其保存到軟盤中。

http://www.roadkil.net/program.php?ProgramID=24

有趣的是,有一個關於啟動事物的經典網站,由一個名字與你相似的人,starman .. http://starman.vertcomp.com/asm/mbr/雖然軟盤是非分區媒體,因此沒有MBR 。

我確定我已經從例如Windows 98軟盤中保存了前512個字節,其中說起動Windows 98然后進入C提示。 它可以更改為例如Windows 95軟盤。 你知道如果3個核心文件之一出現問題,XP可以擁有3個文件啟動盤。那么,它有一個獨特的啟動扇區。 它不是dos啟動盤。 我記得XP中的格式命令與98中的格式命令不同.98中的格式命令就像DOS一樣,它有一個格式/ s來制作系統盤。 XP我認為不可能..而且我注意到Win7格式命令也不能。 雖然在XP或7中我認為你可以通過在“我的電腦”中右擊A后勾選一個框來從GUI制作dos啟動盤。 您可以使用的另一件事是* nix style dd命令。 或ddrescue(提供比dd更多的信息)。 一個類似的程序是Bart的BBIE,它可以獲取CD的可引導部分並將其提取出來。 Nero(也許仍然是)能夠獲取512字節的軟盤啟動扇區,並根據它創建一張CD。 因此,如果你有一個可啟動的DOS磁盤,你可以制作一個可啟動的DOS CD。 它有一個選項,讓你可以瀏覽到具有該引導記錄的圖像,或者只是將軟盤放入並讓它提取它。

DOS下的DD

如果您在 DOS 下工作。 我最近偶然發現了這篇文章: https://sourceforge.net/p/freedos/mailman/message/21492772/

這指向 DOS 的 gnu 工具下載: http://www.ibiblio.org/pub/micro/pc-stuff/freedos/gnuish/gnufut21.zip

此命令適用於 MS DOS 6.22,可將您的 .bin 文件寫入 A 驅動器(使用風險自負!)

dd if=c:\wherever\your\bin.bin of=0:

其中 bin.bin 的大小應為 512 字節,而 0: 應指向您的 A 驅動器。

要將文件寫入另一個文件,您可以編寫程序。 以下片段在C中。

char buf[512];
int floppy_desc, file_desc;
file_desc = open("xx.bin", O_RDONLY);
read(file_desc, buf, 512);
close(file_desc);

floppy_desc = open("floppy.img", O_RDWR);
lseek(floppy_desc, 512, SEEK_SET);
write(floppy_desc, buf, 512);
close(floppy_desc);

暫無
暫無

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

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