我有两个 HDD 映像文件,每个文件都有 2 个分区。
在每个映像上,第一个分区是 grub 引导分区,第二个分区包含文件和内核。第一个映像上的第二个分区包含 2.4 内核,第二个映像上的第二个分区包含 2.6 内核。
我试图将它们放在一个驱动器上,以便我可以选择启动 2.4 内核和文件或 2.6 内核和文件。
我已将第一个映像写入驱动器,然后使用 gparted 将第二个分区从第二个映像复制到驱动器上,这样它现在就有 3 个分区(grub、2.4、2.6)。
我添加了一个 grub 引导条目,使用 (hd0, 2) 作为 root、内核等的分区,并将 root=/dev/hda3 添加到我认为所谓的 cmdline 中。
第一个 grub 条目适用于第一个分区,但是当尝试运行第二个条目时,它会启动,但似乎无法访问任何文件,并在检查 /dev/hda 时给出 DMA 错误。然后应用程序会失败,因为它无法写入或读取某些文件。
如果我尝试相反的方式,首先对第二个映像进行映像,然后添加第一个映像中的分区,则会发生相同的错误,我可以启动我编写的第一个映像,但不能启动复制的分区。
我正在运行内核 2.4/2.6 的非常封闭的系统上尝试此操作,因此我可以进行的挖掘工作受到限制,但如果需要,可以稍后通过拍照来读取特定的 DMA 错误。
答案1
我已经解决了这个问题,虽然这是一个不寻常的问题,但它可能会帮助那些尝试在嵌入式系统上工作的人,这些人写得和我正在使用的系统一样糟糕。
启动时,initrd(初始 ram 磁盘)映像会被挂载,并运行其根目录中名为 linuxrc 的文件。该文件负责挂载 HDD 分区并启动操作系统。就我而言,通常会挂载 cmdline 中定义为 root= 的任何分区的行被注释掉,并且添加了始终静态挂载 /dev/hda2 的行,这可能就是它无法启动的原因。