怎么样从FireWire 设备引导Linux一旦驱动器已经被识别,就考虑安装的其余部分而言,它应该确实像内置硬盘驱动器一样运转;所以您应该可以根据需要对其进行分区和像平常一样安装 Linux。 不过,提醒一句:当决定安装引导加载程序(通常是 GRUB 或 LILO)的位置时一定要小心 —— 我建议不要将其安装在 Master Boot Record (MBR)(通常默认就是这样)中。而是应该安装在外置驱动器的根分区(或引导分区,如果使用单独的引导加载程序)中。 现在我们已经在设备中安装了 Linux,接着要引导 Linux。从这里可以开始有一些技巧。 引导 在讨论引导新的驱动器之前,需要了解一些引导加载程序理论。 引导加载程序通常安装在计算机第一个硬盘的 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 这种方法基本上可以工作,但有两个问题: 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 映像。 上一篇:教你怎么样从FireWire 设备引导Linux 下一篇:从Linux BIOS的起源 看未来主板框架 更多相关文章
|
推荐文章
精彩文章
|