../grub-1.99/configure --prefix=/opt/grub-1.99 --target=i686-linux-gnu
Linuxfromscrash empfiehlt: --disable-werror
Sie haben recht:
grub/core/fs/zfs hat ein strict alias - Problem.
In grub-core/Makefile wurde manuell das -Werror - Flag entfernt.
make make install
Dann die Installation auf der gemounteten Platte, die das neue System werden soll:
i686-linux-gnu-grub-install --boot-directory=/mnt/lfs/boot /dev/sdc
Bootet man von der Platte, so wird der grub-Bootmanager geladen werden
Die Erstellung eines Menufiles grub.cfg ist etwas komplexer geworden. Es gibt aber nun i686-linux-gnu-grub-mkconfig. Leider hatten die Autoren den Nutzungsfall: "Installation eines Systems von einem anderen aus, wobei die Root-Platte des Zielsystems in das Buildsystem eingehägt ist" nicht vollständig bedacht: das Script sucht die /boot/-Partition des Buildsystems durch. Eigentlich sollte das Script einen Parameter mit dem Root des Targetsystems bekommen.
Vorerst hilft es, in dem man:
mount /dev/sdc1 /boot cd /boot/ ln -s i686-linux-gnu-grub grub i686-linux-gnu-grub-mkconfig > grub/grub.cfg umount /boot
Zur Laufzeit wird im Buildsystem die /boot-Partition nicht benötigt, damit kann man dies machen.
Vorsicht: Es werden falsche Einträge erzeugt:
Beim Booten stellt nun GRUB das Menu dar und bootet den Kern.
wget von kernel.org, auspacken und dann:
make ARCH=x86 CROSS_COMPILE=i686-linux-gnu- oldconfig make ARCH=x86 CROSS_COMPILE=i686-linux-gnu- menuconfig make V=1 ARCH=x86 CROSS_COMPILE=i686-linux-gnu- bzImage modules make V=1 ARCH=x86 CROSS_COMPILE=i686-linux-gnu- INSTALL_MOD_PATH=/mnt/lfs/root/ modules_install
(Die Variablen ARCH und CROSS_COMPILE sind ein Tip von hier und verifiziert im Linux-Makefile)
Zu beachten:
cd /mnt/lfs/root mkdir -p usr/install cd /mnt/lfs/src/linux-3.4.1/ make headers_check make V=1 INSTALL_HDR_PATH=/mnt/lfs/root/usr/ headers_install
Diese hängt von der libgcc ab, die dann nach dem Auspacken gebaut werden muß.
export TARGET=i686-linux-gnu cd uClibc-0.9.33 make CROSS_COMPILE=${TARGET}- menuconfig
Bemerkungen zur Konfiguration:
Da auf dem Zielsystem eine root-Installation beabsichtigt ist, wird in Library Installation Option folgende Konfigurationen vorgeschlagen:
uClibc runtime library directory | / |
uClibc Development environment | /usr |
Die Installation auf der Platte des Zielsystems wird durch PREFIX= eingestellt.
make V=2 PREFIX=/mnt/lfs/root make PREFIX=/mnt/lfs/root/ install
Achtung: Die Start-Files müssen in /opt/tc47/i686-linux-gnu/lib gelinkt werden, da sie sonst vom Crosslinker nicht gefunden werden:
cd /opt/tc47/${TARGET}/lib ln -s /mnt/lfs/root/usr/lib/crt* .
(Damit kann nun ein Hello-Worldprogramm crosscompilert und statisch gelinkt werden, beim Kopieren auf einen i686-linux-gnu-Rechner kann dieses erfolgreich ausgeführt werden.)
Der debianutils-Teil verwendet eine Funktion tempnam, die veraltet ist, und die nicht in der uClibc enthalten ist. Der busybox-1_20_0.patch.txt verwendet eine andere Funktion.
export TARGET=i686-linux-gnu patch -b < busybox-1_20_0.patch.txt make CROSS_COMPILE=${TARGET}- defconfig make CROSS_COMPILE=${TARGET}- menuconfig
Build Busybox as a static binary | |
Cross Compile Prefix | i686-linux-gnu- |
Path to Sysroot (CONFIG_SYSROOT) | |
Extra CFLAGS (CONFIG_EXTRA_CFLAGS) | "-I/mnt/lfs/root/usr/include" |
Extra LDFLAGS (CONFIG_EXTRA_LDFLAGS) | "-L/mnt/lfs/root/usr/lib" |
Eigentlich wollte ich SYSROOT=/mnt/lfs/root/ und EXTRA_CFLAGS=-I/usr/include, aber das funktioniert nicht mit gcc-4.7.0
make make CONFIG_PREFIX=/mnt/lfs/root/ install