扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在讨论引导新的驱动器之前,需要了解一些引导加载程序理论。
引导加载程序通常安装在计算机第一个硬盘的 MBR 中。调用引导加载程序时(BIOS 自动执行 MBR 中的代码),它通常显示可以引导的 OS 的菜单。选择一个给定 OS 引导。
关于此场景应该注意两点:
- OS 选择菜单(通常)从磁盘加载。
- 要引导相关 OS,引导加载程序需要从磁盘读取相关内核。
由于以上操作在加载 OS 之前发生,它意味着所有磁盘读取都必须通过 BIOS 调用的方式发生。这会涉及严重的问题:即为了直接引导磁盘,您的 BIOS 必须支持通过 FireWire 或 USB 连接的磁盘。这通常可以看作从这些类型的磁盘引导的一个 BIOS 选项。实际上 FireWire BIOS 支持当前很少见,但 USB 支持正在变得相当普遍。因此,如果您在相对较新的计算机中使用 USB,应该可以直接在 Linux 中引导驱动器。
在外置驱动器的 MBR 中安装了 GRUB 之后,当通过 USB 连接时,我可以直接引导该驱动器。当引导连接的磁盘时很简单地进入了 BIOS 设置程序。外置磁盘将显示为普通的硬盘驱动器:移动该磁盘使它在引导顺序中位于内置驱动器之前。
我也可以在内置驱动器的 MBR 中安装引导加载程序,并使用它引导 USB 驱动器(这时它在 GRUB 中显示为 hd1 in GRUB)。如果您使用 FireWire,有可能 BIOS 不能直接引导驱动器,将需要一些其他操作。
幸运地是,因为 Linux 的灵活性,如果您不能直接引导(使用 PCMCIA FireWire 卡,我的情况肯定是这样!),会有相当简单的解决方案。可以从支持的设备(如软盘驱动器、CD、USB key 或主驱动器上的微小分区)执行初始引导步骤,然后使用外置驱动器进行其他操作。
构建引导映像
可以使用两种方法引导:
一阶段引导
内核引导、安装根文件系统,并通过调用初始化脚本(通常是 /sbin/init)继续进行初始化。
两阶段(initrd)引导
内核引导、安装初始 ram 磁盘(initrd),执行进一步的可定制初始化,然后安装根文件系统并继续进行初始化(通常也是通过调用 /sbin/init)
这两种方法都有自己的优点和缺点。
一阶段引导
为了使用一阶段引导,我们需要构建内核,其具有安装内置根文件系统所需的所有驱动器(其他任何驱动器都可以在正常初始化过程中,在能够从根分区加载的模块中构建)。
如果我们要从非常小的设备引导(如软盘),最好的方法是构建的内核仅具有足够使我们可以安装根外置文件系统的内置驱动器 —— 然后将其他所有项构建为模块。例如,我内置了 SCSI 支持、PCMCIA 支持、IEE1394、SBP 和类似支持,但是其他所有项(包括显卡支持、网络设备支持等等)都作为模块构建,这些模块存储在根分区(在外置驱动器上)中,而不是软盘上。
使用简单(一阶段)引导过程,我们应该能够构建具有所需支持的内核,将其放在软盘驱动器中,在软盘中安装引导加载程序(我使用 GRUB,但还有其他选择,如 LILO),然后使用与此内核(对于 GRUB)相似的内核引导:
root (fd0)
kernel (fd0)/boot/bzImage root=/dev/sda1
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者