Aanmaken van de Linux KernelIk maakte het loopback-device met Linux-kernel versie 2.0.31, ook andere
versies zouden moeten werken, maar op z'n minst moeten de volgende opties
opgenomen zijn.De kernel-opties die je zal moeten activeren zijn:
RAM disk support (CONFIG_BLK_DEV_RAM).Initial RAM disk (initrd) support (CONFIG_BLK_DEV_INITRD).Loop device support (CONFIG_BLK_DEV_LOOP).fat fs support (CONFIG_FAT_FS).msdos fs support (CONFIG_MSDOS_FS).De eerste twee zijn voor het RAM-diskdevice zelf en voor het initiële
ramdisk-device.
De volgende is de optie voor het loopback bestandssysteem. De laatste twee
bestaan uit de ondersteuning voor het msdos bestandssysteem welke nodig is
voor het mounten van de DOS-partitie.Een kernel compileren zonder modules is de eenvoudigste optie, alhoewel
het mogelijk zou moeten zijn als je modules wilt, ik heb het echter niet
geprobeerd. Als er modules worden gebruikt, dan zou je ervoor moeten zorgen
dat je de bovenstaande opties hebt meegecompileerd en niet als modules.Mogelijk moet je afhankelijk van de door jouw gebruikte kernel een kernelpatch
toepassen. Het is een zeer eenvoudige patch die het je mogelijk maakt het
loopback-device als root-bestandssysteem te gebruiken.
Kernelversies voor 2.0.0; hierover heb ik geen informatie.Kernelversie 2.0.0 tot 2.0.34; je moet een kernelpatch toepassen voor
2.0.x kernels zoals hieronder wordt getoond.Kernelversie 2.0.35 tot 2.0.x; een kernelpatch is niet nodig.Kernelversie 2.1.x; je moet een kernelpatch toepassen voor 2.0.x of
2.2.x kernels zoals hieronder wordt getoond, afhankelijk van de exacte 2.1.x
versie.Kernelversie 2.2.0 tot 2.2.10; je moet de kernelpatch toepassen voor
2.2.x kernels zoals hieronder getoond.Kernelversie 2.3.x; je moet de kernelpatch toepassen voor 2.2.x kernels
zoals hieronder getoond.Bij 2.0.x kernels moet er in het bestand /init/main.c een enkele
regel worden toegevoegd zoals is weergegeven in de hieronder gewijzigde versie.
De regel met "loop", 0x0700 is de regel die werd toegevoegd.static void parse_root_dev(char * line)
{
int base = 0;
static struct dev_name_struct {
const char *name;
const int num;
} devices[] = {
{ "nfs", 0x00ff },
{ "loop", 0x0700 },
{ "hda", 0x0300 },
...
{ "sonycd", 0x1800 },
{ NULL, 0 }
};
...
}Bij 2.2.x kernels moeten aan het bestand /init/main.c drie regels
worden toegevoegd zoals door de gewijzigde versie hieronder wordt getoond.
De regel waarin staat "loop",
0x0700 en de regel ervoor en erna zijn degenen die moeten worden
toegevoegd.static struct dev_name_struct {
const char *name;
const int num;
} root_dev_names[] __initdata = {
#ifdef CONFIG_ROOT_NFS
{ "nfs", 0x00ff },
#endif
#ifdef CONFIG_BLK_DEV_LOOP
{ "loop", 0x0700 },
#endif
#ifdef CONFIG_BLK_DEV_IDE
{ "hda", 0x0300 },
...
{ "ddv", DDV_MAJOR << 8},
#endif
{ NULL, 0 }
};Zodra de kernel is geconfigureerd, kan het worden gecompileerd waarmee
een bestand zImage wordt geproduceerd
(make zImage). Dit bestand zal na de compilatie te vinden zijn in
arch/i386/boot/zImage.