To complete the boot process, the block device which holds the SquashFS loopdata container sysrcd.dat must be located. This is accomplished by enumerating all eligible devices from /dev, which is populated by udevd and which, in turn, depends on all necessary chipset drivers (kernel modules) to be available. In the case of the Cypress chipset, for example, the appropriate chipset module ums-cypress.ko is not present in either the embedded initram, nor in the external initram.igz. This prevents any boot from an optical drive using this chipset from completing. It seems logical to assume that other USB chipsets are affected, as well.
Include all essential device driver modules into the initram[.igz]. Since these modules are kernel-specific, to keep with the new policy of minimizing the size of the initram.igz, they are probably best placed in the embedded initram.
As I obviously have one of the affected USB optical drives, I observed that a standard systemrescuecd-x86-1.6.0.iso image would not successfully boot from my CD drive. When this same distro was booted by PXE, however, the USB drive was properly enumerated. This suggested that while the proper driver was ultimately present, it was not available to the early boot environment. To test a fix, I rolled a customized version of the ISO which included a number of additional kernel modules in the external initram.igz. The modules themselves were copied from the SquashFS filesystem in sysrcd.dat. The external initram.igzwas chosen merely for the sake of simplicity to avoid a complete kernel generation. It should be noted that the embedded initram and the external initram.igz are merged by the kernel in a manner similar to a UnionFS.
This is a list of the additional kernel modules included in the initram.igz of my customized ISO:
Code: Select all
Although not strictly necessary for this test, I included the above modules for each of the following kernels:
Code: Select all
Note that any directories missing in the initram.igz were created as needed. Once this test ISO was regenerated and burned to CD, it was able to find the USB optical drive, mount the SquashFS sysrcd.dat loopback container, and boot normally.
Forum thread: http://www.sysresccd.org/forums/viewtopic.php?f=14&t=3154