当时买这本书的原因是,网上评论这本书适合已经入门但是呢对Linux又是一知半解的人。 买了之后,看了一点,发现真得非常适合我,现在只是看到第二章(GRUB),但是真得受益匪浅。 stage 1-5 stage 1-52025 一个问题就来了这个512个字节是从何而来,这512个字节又意欲何为? stage 1-5 江湖上风传已久的stage1.5是什么东东,stage2又是干什么的?
- 最后才是GRUB中真正核心的部分stage2,它可以让用户以选项的方式将操作系统加载、修改选项以及新增参数。
- 工作内容不一样,所以把窄依赖的rdd划分一个stage,宽依赖的rdd依赖关系作为划分stage的依据。
- 我们知道GRUB开始没有OS,也没有文件系统的概念。
- Firstlist对应上图中的0x200位置,那么blocklist_default_seg就是最后2个字节0220h。
- 其中,stage1主要负责BIOS和GRUB之间的交接,载入存放于各个分区中的开机文件(我的理解是,例如Linux下/boot/grub/..下面的一些文件)。
- 从此处可以看出,对于我们的start.S中#ifdef STAGE1_5这个宏是打开的。
由于我们的根文件系统是ext3文件系统,我们发现在/boot/grub/下除了stage1,还有e2fs_stage1_5这个文件,这个文件的作用是识别ext3文件系统的。 stage 1-52025 我们知道GRUB开始没有OS,也没有文件系统的概念。 这就是stage1.5干的事情,stage1.5过后,GRUB就能识别文件系统了,就能在磁盘上识别加载文件了。 Start.S加载的磁盘上的那些扇区的内容,就是文件系统的代码。
stage 1-5: Grub 加载系统的三个阶段
Firstlist对应上图中的0x200位置,那么blocklist_default_seg就是最后2个字节0220h。 从此处可以看出,对于我们的start.S中#ifdef STAGE1_5这个宏是打开的。 另外我们可以从上图中的loading stage 1-52025 stage 1-52025 stage 1-5 stage 1-5 stage1.5可以看出。 工作内容不一样,所以把窄依赖的rdd划分一个stage,宽依赖的rdd依赖关系作为划分stage的依据。 手头刚买了一本书,书名为《Linux操作系统之奥秘》,作者是邱世华,是台湾的一个资深工程师。
- Grub 执行setup的时候,能够识别启动设备的文件系统,比如我们,是ext3文件系统,所以只需要将ext3部分的e2fs_stage1_5放入扇区。
- 但是文件系统千千万,我们不可能把所有文件系统的功能文件放在磁盘的扇区里面,那怎么办呢?
- 我们通过分析,知道这段代码的唯一作用就是将第二个扇区(0柱面 0 磁道 2扇区)处的512字节加载到内存中去。
- 下面我们看下我们磁盘的start.S对应的二进制文件,我们知道,start.S对应磁盘512~1024部分。
把这0xe也就是14个扇区的内容加载到内存后,就具备了操作启动设备上面文件的功能了。 上一篇博文介绍了GRUB源码的stage1.S会汇编成一段446字节的sourcecode,stage1,grub会将这个stage1放入MBR中。 我们通过分析,知道这段代码的唯一作用就是将第二个扇区(0柱面 0 stage 1-5 磁道 2扇区)处的512字节加载到内存中去。 所有的部分都是相同的,只有最后一行的0x1fc位置不同,那一个位置我们已经讨论过了,blocklist_default_len,就是需要拷贝扇区的个数。 但是文件系统千千万,我们不可能把所有文件系统的功能文件放在磁盘的扇区里面,那怎么办呢? Grub 执行setup的时候,能够识别启动设备的文件系统,比如我们,是ext3文件系统,所以只需要将ext3部分的e2fs_stage1_5放入扇区。
stage 1-5: Grub 加载系统的三个阶段
事实上,GRUB管理开机启动的过程分成了三个阶段,分别是stage1/stage1.5/stage2。 其中,stage1主要负责BIOS和GRUB之间的交接,载入存放于各个分区中的开机文件(我的理解是,例如Linux下/boot/grub/..下面的一些文件)。 这部分才是真正放在MBR中的bootloader。 stage 1-5 而后stage1.5是连接stage1和stage2之间的通道,起着过渡的作用。 最后才是GRUB中真正核心的部分stage2,它可以让用户以选项的方式将操作系统加载、修改选项以及新增参数。 下面我们看下我们磁盘的start.S对应的二进制文件,我们知道,start.S对应磁盘512~1024部分。