GRUB4DOS(十) 關於grldr.mbr和grldr

grldr.mbr和任何系統都沒有關係,它只負責尋找根目錄下的grldr並將控制權交予它,然後grldr通過LST文件加載引導菜單,當LST文件不存在時則進入命令行由客戶使用命令引導系統。

******************************************************************************
***   grldr.mbr - 怎樣將grldr.mbr寫到硬盤的主引導磁道               ***
******************************************************************************
  grldr.mbr包含能夠用作主引導記錄的代碼。此代碼負責搜索所有分區的grldr,並且在發現
  它後裝載它。現在被支持的分區種類是:FAT12/FAT16/FAT32,NTFS,EXT2/EXT3。在擴展分區
  上的邏輯分區也被支持,條件是此擴展分區與微軟兼容。實際上,搜索機制沒有充分地測試
  分區類型(0x85 )的Linux 的擴展分區。

怎樣將 GRLDR.MBR 寫到硬盤的主引導磁道?

  首先,讀入 Windows 磁盤簽名及分區信息字節(總共72字節,從主引導記錄的偏移
  0x01b8到0x01ff處),並且放置到GRLDR.MBR的開始扇區的相同範圍的偏移0x01b8
  到0x01ff處。

  如果硬盤上的主引導記錄是由微軟的FDISK產生的單一的扇區主引導記錄,
  可以選擇把它複製到GRLDR.MBR的第二扇區。

  GRLDR.MBR的第二扇區叫作“原先的主引導記錄”。當找不到GRLDR後,將從“原先的主引
  導記錄”開始引導。

  不需要其它的步驟,當所有的上述的必要的改變已經完成後,現在只要將GRLDR.MBR寫到
  主引導磁道。這就全部完成了。

注意:主引導磁道表示的是硬盤的第一條磁道。

注意:GRLDR.MBR 的自舉代碼只在分區的根目錄尋找GRLDR。你最好把menu.lst文件和GRLDR
放置在一起。(就是說放在和 GRLDR 相同分區的相同根目錄下。)

“grldr” 文件名在ext2分區中必須是小寫字母,而且grldr的文件種類必須是純普通文件。
其它種類,例如,符號鏈接文件也是不行的。

  更新: bootlace.com 是一個在 DOS/LINUX 下的能把 grldr.mbr 安裝到主引導記錄
  的工具。整個grldr.mbr被嵌入到bootlace.com工具內部,因此 bootlace.com可以獨
  立使用。參見後面。

以下內容供開發人員參考.....
******************************************************************************
***               grldr.mbr - Details about the control bytes              ***
******************************************************************************
                  grldr.mbr - 其控制字節的詳述

Six bytes can be used to control the boot process of GRLDR.MBR.
有六個字節可以控制GRLDR.MBR引導過程。

Offset    Length    Description
偏移量  長度    說明

======    ======    ==============================================================
02h    1    bit0=1: disable the search for GRLDR on floppy
        bit0=0: enable the search for GRLDR on floppy
                  第 0 位=1 :允許搜索軟盤上的GRLDR 。
                  第 0 位=0 :禁止搜索軟盤上的GRLDR 。

        bit1=1: disable the boot of PREVIOUS MBR with invalid
            partition table(usually an OS boot sector)
        bit1=0: enable the boot of PREVIOUS MBR with invalid
            partition table(usually an OS boot sector)
                  第 1 位=1 :禁止引導分區表無效的原主引導記錄
                            (通常是一個操作系統的引導扇區)
                  第 1 位=0 :允許引導分區表無效的原主引導記錄
                            (通常是一個操作系統的引導扇區)

        bit2=1: disable the feature of unconditional entrance to
            the command-line(See below `--duce')
        bit2=0: enable the feature of unconditional entrance to
            the command-line(See below `--duce')
                  第 2 位 = 1 :禁止無條件進入命令行 (見下面的`--duce')
                  第 2 位 = 0 :允許無條件進入命令行(見下面的`--duce')

        bit3=1: disable geometry tune(See below `--chs-no-tune')
        bit3=0: enable geometry tune(See below `--chs-no-tune')
                  第 3 位= 1 :禁止改變磁盤幾何參數(見下面的 `--chs-no-tune')
                  第 3 位= 0 :允許改變磁盤幾何參數(見下面的 `--chs-no-tune')

        bit4 - bit6: reserved
                  第 4 位到第 6 位:被保留

        bit7=1: try to boot PREVIOUS MBR after the search for GRLDR
        bit7=0: try to boot PREVIOUS MBR before the search for GRLDR
                  第 7 位=1:在搜索 GRLDR 之後嘗試引導原先的主引導記錄
          第 7 位=0:在搜索 GRLDR 之前嘗試引導原先的主引導記錄

03h    1    timeout in seconds to wait for a key press. 0xff stands for
        waiting all the time(endless).
                等待鍵被按下時的暫停秒數。0xff代表始終暫停(即無休止的)。


04h    2    hot-key code. high byte is scan code, low byte is ASCII code.
        the default value is 0x3920, which stands for the space bar.
        if this key is pressed, GRUB will be started prior to the boot
        of previous MBR. See "int 16 keyboard scan codes" below.
                熱鍵代碼。高字節是掃描碼,低字節是ASCII碼。默認值是0x3920,代
                表的是空格鍵。如果此鍵被按下,GRUB將在引導原先的主引導記錄之前
        啓動。見“ int16 鍵盤掃描碼”。

06h    1    preferred boot drive number, 0xff for no-drive
                優先引導的驅動器號,0xff 代表沒有。

07h    1    preferred partition number, 0xff for whole drive
                優先引導的分區號,0xff 代表整個驅動器。

        if the preferred boot drive number is 0xff, the order of the
        search for GRLDR will be:
                如果優先引導的驅動器號是0xff,搜索 GRLDR 的順序是:

            (hd0,0), (hd0,1), ..., (hd0,L),(L=max partition number) 
            (hd1,0), (hd1,1), ..., (hd1,M),(M=max partition number)
            ... ... ... ... ... ... ... ... 
            (hdX,0), (hdX,1), ..., (hdX,N),(N=max partition number)
                               (X=max harddrive number)
            (fd0)

        otherwise, if the preferred boot drive number is Y(not equal to
        0xff) and the preferred partition number is K, then the order of
        the search for GRLDR will be:
                否則,如果優先引導的驅動器號假定爲Y (且不等於0xff),而優先引導
                的分區號爲K,那麼搜索 GRLDR 的順序是:

            (Y) if K=0xff; or (Y,K) otherwise
            (hd0,0), (hd0,1), ..., (hd0,L),(L=max partition number) 
            (hd1,0), (hd1,1), ..., (hd1,M),(M=max partition number)
            ... ... ... ... ... ... ... ... 
            (hdX,0), (hdX,1), ..., (hdX,N),(N=max partition number)
                               (X=max harddrive number)
            (fd0)
              
        Note: if Y < 0x80, then (Y) is floppy, else (Y) is harddrive,
              and (Y,K) is partition number K on harddrive (Y).
                注意:如果Y小於0x80 ,那麼這個(Y)驅動器代表軟驅,否則就是硬盤驅動器。
                      而(Y,K)代表Y號硬盤驅動器上的 k 號分區。

 

 

******************************************************************************
***        List of binary files and their corresponding source files       ***
******************************************************************************
           二進制文件及對應的源代碼文件列表

binary file        main source file    other included source or binary files
二進制文件      源代碼主文件            包含的其他源代碼或二進制文件
-------------        ----------------          -------------------------------------

bootlace.com    bootlacestart.S        bootlace.inc, grldrstart.S

grldr                  grldrstart.S               pre_stage2(binary, See note below)

grldr.mbr           mbrstart.S                grldrstart.S

grub.exe           dosstart.S                pre_stage2(binary, See note below)

hmload.com     hmloadstart.S

-----------------------------------------------------------------------------
注意:pre_stage2 是GNU GRUB的主體程序,它以二進制格式被簡單的添加到grldrstart
      及dosstart部分,形成我們的grldr和grub.exe 。

注意:GRUB (無.exe後綴)在Linux下是一個靜態鏈接的 ELF 格式的可執行文件,它
可以被GRUB Shell正常調用。GRUB Shell 是一個啓動管理軟件,但並不是一個引導裝
載器(boot 命令在GRUB Shell裏不能執行)。GRUB.EXE (通過KEXEC)能作爲一個引
導裝載器直接在 Linux 下使用。

 


******************************************************************************
***                     GRUB4DOS and Windows Vista                         ***
******************************************************************************
                        GRUB4DOS 與 Windows Vista

首先,使用以下命令來建立一個啓動項:

    bcdedit /create /d "GRUB for DOS" /application bootsector

執行結果看起來類似這樣:
The entry {05d33150-3fde-11dc-a457-00021cf82fb0} was successfully created.

其中長字串{05d33150-3fde-11dc-a457-00021cf82fb0} 是這個項的數字標識{id}。

然後,通過以下命令來設置啓動參數:
    bcdedit /set {id} device boot
    bcdedit /set {id} path \grldr.mbr
    bcdedit /displayorder {id} /addlast
請用先前的命令所返回的實際的id 來替換掉 {id}。

最後,複製 GRLDR.MBR 到 你引導分區的根目錄下,並且將 GRLDR 和 menu.lst 複製到
任意一個 FAT16/FAT32/EXT2/NTFS 的分區根目錄下。

注意:引導分區必須是含有 BOOTMGR 的激活的主分區。

注意:  你只需要指定BCD的位置就可以修改另一個操作系統的BCD 啓動項:
    bcdedit /store D:\boot\BCD ...

注意: 執行這些命令需要提高權限,它們必須是“以管理員身份運行”於cmd.exe中。

注意:已有人報告說,即使使用管理員身份,Vista的某些版本也不支持在C盤根目錄下建立
無擴展名的文件。你既可以複製grldr到另外的一個分區來解決這個問題,也可以將 grldr 
重命名,比如爲 grub.bin 。如何改名,請參見下節。

 

******************************************************************************
***                      How to rename grldr                               ***
******************************************************************************
                         怎樣重命名 grldr

  grldr 和 grldr.mbr引用引導文件內部的文件名來決定裝載哪個文件,所以假如你
  想更換它們的名字,那麼你也必須要修改那些內嵌在文件內部的設置。你可以使用
  輔助程序grubinst 來做到這些,grubinst 可以在以下網址下載到:

http://download.gna.org/grubutil/

  grubinst 能生成自定義的grldr.mbr:

    grubinst -o -b=mygrldr C:\mygrldr.mbr

  grubinst 也能編輯一個既有的 grldr 或 grldr.mbr:

    grubinst -e -b=mygrldr C:\mygrldr

    grubinst -e -b=mygrldr C:\mygrldr.mbr

在這種情況中,你必須使用一個和 grub4dos 版本兼容的grubinst,否則修改將會失敗。

  所以,在命令中通過加載mygrldr來代替grldr ,你可以使用下面的方法之一:

1.使用已定製好的grldr.mbr 來加載 mygrldr 。在這種情況下,你需要修改內嵌在
  grldr.mbr中的引導文件名。grldr.mbr的名字可以被任意的改變。

2.直接使用mygrldr 。在這種情況下,你需要將 mygrldr 中內嵌的引導文件名改爲
  一個合適的名字。

注意: 引導文件名必須遵循 8.3 文件名規範。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章