由於我們的根文件系統是ext3文件系統,我們發現在/boot/grub/下除了stage1,還有e2fs_stage1_5這個文件,這個文件的作用是識別ext3文件系統的。 我們知道GRUB開始沒有OS,也沒有文件系統的概念。 stage 1-52025 這就是stage1.5乾的事情,stage1.5過後,GRUB就能識別文件系統了,就能在磁盤上識別加載文件了。 Start.S加載的磁盤上的那些扇區的內容,就是文件系統的代碼。 把這0xe也就是14個扇區的內容加載到內存後,就具備了操作啓動設備上面文件的功能了。
- 但是文件系統千千萬,我們不可能把所有文件系統的功能文件放在磁盤的扇區裏面,那怎麼辦呢?
- 買了之後,看了一點,發現真得非常適合我,現在只是看到第二章(GRUB),但是真得受益匪淺。
- 上一篇博文介紹了GRUB源碼的stage1.S會彙編成一段446字節的sourcecode,stage1,grub會將這個stage1放入MBR中。
- 當時買這本書的原因是,網上評論這本書適合已經入門但是呢對Linux又是一知半解的人。
- 這部分纔是真正放在MBR中的bootloader。
- 手頭剛買了一本書,書名爲《Linux操作系統之奧祕》,作者是邱世華,是臺灣的一個資深工程師。
江湖上風傳已久的stage1.5是什麼東東,stage2又是幹什麼的?
stage 1-5: Grub 加載系統的三個階段
上一篇博文介紹了GRUB源碼的stage1.S會彙編成一段446字節的sourcecode,stage1,grub會將這個stage1放入MBR中。 我們通過分析,知道這段代碼的唯一作用就是將第二個扇區(0柱面 0 磁道 stage 1-5 2扇區)處的512字節加載到內存中去。 stage 1-52025 所有的部分都是相同的,只有最後一行的0x1fc位置不同,那一個位置我們已經討論過了,blocklist_default_len,就是需要拷貝扇區的個數。 但是文件系統千千萬,我們不可能把所有文件系統的功能文件放在磁盤的扇區裏面,那怎麼辦呢? stage 1-5 Grub 執行setup的時候,能夠識別啓動設備的文件系統,比如我們,是ext3文件系統,所以只需要將ext3部分的e2fs_stage1_5放入扇區。
事實上,GRUB管理開機啓動的過程分成了三個階段,分別是stage1/stage1.5/stage2。 stage 1-52025 其中,stage1主要負責BIOS和GRUB之間的交接,載入存放於各個分區中的開機文件(我的理解是,例如Linux下/boot/grub/..下面的一些文件)。 這部分纔是真正放在MBR中的bootloader。 而後stage1.5是連接stage1和stage2之間的通道,起着過渡的作用。 stage 1-52025 最後纔是GRUB中真正核心的部分stage2,它可以讓用戶以選項的方式將操作系統加載、修改選項以及新增參數。 stage 1-52025 stage 1-5 stage 1-5 下面我們看下我們磁盤的start.S對應的二進制文件,我們知道,start.S對應磁盤512~1024部分。
stage 1-5: Grub 加載系統的三個階段
Firstlist對應上圖中的0x200位置,那麼blocklist_default_seg就是最後2個字節0220h。 從此處可以看出,對於我們的start.S中#ifdef stage 1-52025 STAGE1_5這個宏是打開的。 另外我們可以從上圖中的loading stage 1-5 stage1.5可以看出。 工作內容不一樣,所以把窄依賴的rdd劃分一個stage,寬依賴的rdd依賴關係作爲劃分stage的依據。 手頭剛買了一本書,書名爲《Linux操作系統之奧祕》,作者是邱世華,是臺灣的一個資深工程師。
當時買這本書的原因是,網上評論這本書適合已經入門但是呢對Linux又是一知半解的人。 買了之後,看了一點,發現真得非常適合我,現在只是看到第二章(GRUB),但是真得受益匪淺。 stage 1-5 一個問題就來了這個512個字節是從何而來,這512個字節又意欲何爲?