A questo punto dovremo cambiare la memoria virtuale di mach. Per fare ciò, Samuel Thibault ci offre questa patch:
Index: b/i386/i386at/model_dep.c =================================================================== --- a/i386/i386at/model_dep.c 10 Nov 2008 15:18:47 -0000 1.9.2.19 +++ b/i386/i386at/model_dep.c 11 Jun 2009 00:32:30 -0000 @@ -231,10 +232,10 @@ mem_size_init(void) printf("AT386 boot: physical memory from 0x%x to 0x%x\n", phys_first_addr, phys_last_addr); - /* Reserve 1/16 of the memory address space for virtual mappings. + /* Reserve 1/8 of the memory address space for virtual mappings. * Yes, this loses memory. Blame i386. */ - if (phys_last_addr > (VM_MAX_KERNEL_ADDRESS / 16) * 15) - phys_last_addr = (VM_MAX_KERNEL_ADDRESS / 16) * 15; + if (phys_last_addr > (VM_MAX_KERNEL_ADDRESS / 8) * 7) + phys_last_addr = (VM_MAX_KERNEL_ADDRESS / 8) * 7; phys_first_addr = round_page(phys_first_addr); phys_last_addr = trunc_page(phys_last_addr);
Dopo aver copiato la patch in un file di testo che chiameremo ad esempio bigmem.patch dovremo appunto "patcharla" al mikrokernel. Per fare ciò ci sposteremo nella directory decompressa con i sorgenti (è la prima della lista soprastante, gnumach-1.3.99.dfsg.cvs20090220) e daremo il comando:
# patch -p1 < /locationpatch/bigmem.patch
locationpatch è appunto la locazione dove risiede la patch. Facendo un esempio, se la nostra directory gnumach (quella in cui abbiamo scaricato i sorgenti) è sul desktop, così come bigmem.patch, daremo il comando (sempre da gnumach-1.3.99.dfsg.cvs20090220):
# patch -p1 < ../../bigmem.patch
se tutto sarà funzionato otterremo la scritta:
patching file i386/i386at/model_dep.c
senza nessun seguente errore. A questo punto, sempre dalla directory con i sorgenti (dunque quella nella quale ci troviamo) incominceremo la compilazione dando il comando:
$ dpkg-buildpackage -us -uc -b -rfakeroot
Dopo la compilazione avremo dei binari con il mikrokernel nella directory gnumach (quella creata all'inizio). In ogni caso, non ci interessano. Il mikrokernel compilato per il boot lo troviamo in gnumach/gnumach-1.3.99.dfsg.cvs20090220/debian/gnumach/boot/gnumach.gz. A questo punto potremo montare la partizione nella quale abbiamo installato i pacchetti di debian gnu/hurd con crosshurd e copiare il file citato nella directory di boot. Ad esempio, con la mia partizione (hda4) dove ho lanciato crosshurd e ammettendo che mi trovo nella directory gnumach dell'inizio: