扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
1. 因为 SBP 支持使用 SCSI 仿真,为了检测磁盘和允许安装 /dev/sda1,需要“重新扫描”仿真的 SCSI 总线。这种扫描使用一组简单的命令执行。不过,遗憾的是,使用一阶段引导,我们不能运行任何命令,直到内核已经完成引导,而内核直到安装了根文件系统才能完成引导 —— 典型的自相矛盾困境。令人感到高兴的是,对于导致 SCSI 总线在启动时被扫描的 2.4 内核有可用的修补程序(有关更多详细信息,请参阅参考资料)。通过应用此修补程序,我可以使外置驱动器在引导过程中由内核自动检测,而不需要任何重新扫描命令。这使我们进入了下一个问题。
2. 内核中有定时窗口,这意味着内核经常在其能够被正确的监测和初始化之前尝试安装根设备。对于此问题,也有可用的修补程序(请参阅参考资料获得相关链接),它只是使内核在启动时等待很短的时间,并使其在安装根文件系统失败时重试(为外置驱动器提供时间识别)。
通过应用这两个修补程序,我可以成功地在可引导软盘上构建内核,其将引导,然后使用外置 FireWire 驱动器作为根。
这种方法的主要问题是需要我们给内核源码打补丁 —— 这最多是一件痛苦之事(当发行新的内核版本时),严重时会是个大问题(如果没有维护补丁程序与内核发生的其他更改保持一致的话)
您可能已经想到如果我们的 BIOS 支持 USB 或 FireWire 且我们直接引导,我们就可以避免这两个问题。不幸的是,情况并不是这样:虽然此方法在引导过程中使用 BIOS 调用来访问磁盘,一旦内核开始初始化,将不再使用 BIOS,而是使用内核驱动器访问磁盘 —— 这样就会遇到相同的问题。
两阶段引导
到了内核版本 2.0.X,向 Linux 内核添加了一项引人注意的能力 —— 使用“initial RAM disk”(或 initrd)提供两阶段引导过程。
简而言之,内核像平常一样引导;但不安装“真实的”根文件系统,而是在 RAM 中创建微型根文件系统并安装该系统。在安装真实的根、切换为使用真实的根并销毁 initial RAM disk 之前,任何步骤都可以在此初始环境中执行。
这在各种环境中都有用,但是为了便于说明,我们将仅使用我们的迷你环境重新扫描 SCSI 总线,等待外置磁盘被识别,然后切换为使用该磁盘作为真实的根继续引导。
为了使用这种方法,我们需要创建两项,内核和 initrd 映像。
内核就是具有内置 initrd 支持的普通内核。initrd 映像是包含我们的迷你根文件系统的回送文件系统映像(此映像可以使用 gzip 进行压缩以减少其大小)。
有关创建或定制自己的 initrd 映像的详细信息,可以查看参考资料部分。
在 initrd 映像中,有一个名为 linuxrc 的文件。当加载 initrd 时会执行此文件,所以确保其具有执行权限!我们为了进行说明,所以 linuxrc 非常简单:
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者