簡體   English   中英

為什么GRUB2不直接將diskboot.img加載到地址0x8000?

[英]Why doesn't GRUB2 load the diskboot.img to address 0x8000 directly?

我正在研究GRUB2的源代碼,並試圖了解為什么boot.S中的代碼首先將diskboot.img(core.img的第一個扇區)加載到地址0x70000,然后使用copy_buffer將其復制到0x8000並跳轉到繼續執行。 為什么不將圖像直接加載到0x8000?

#define GRUB_BOOT_MACHINE_BUFFER_SEG 0x7000帶有注釋:“磁盤緩沖區的長度必須為32K,並且不能跨越64K邊界。” 但是第一個扇區僅占用512字節。

好,讓我們將其表述為答案。 我查看了代碼和git歷史,這是史前的。 它們在多個位置(重新)使用相同的加載代碼,並使用多個加載代碼(取決於環境-軟盤,光盤,LS-120,CD等)加載到同一位置(即GRUB_BOOT_MACHINE_BUFFER_SEG ) 。

  • 在多個地方重復使用同一代碼可能會減輕維護負擔。
  • 某些機器或介質特定的加載例程無法“僅”加載512個字節;它們只能加載512個字節。 它們加載更多(最多32 KiB;例如CD代碼始終加載2048字節的倍數),然后調用方只需復制出所需的數量即可,也可以選擇偏移量。

如果您需要了解更多,我建議聯系Vladimir “φ-coder” Serbinenko <phcoder@gmail.com> ,他們是在這些領域工作最多的人,然后直接問他。 這就是我們可以從代碼中“區分”的全部內容,而無需向作者提出意圖。

暫無
暫無

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

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