diff --git a/chapter06/chapter06.xml b/chapter06/chapter06.xml index e470214f0..f5f587ffe 100644 --- a/chapter06/chapter06.xml +++ b/chapter06/chapter06.xml @@ -34,5 +34,6 @@ + diff --git a/chapter06/grub-cfg.xml b/chapter06/grub-cfg.xml new file mode 100644 index 000000000..dd6207319 --- /dev/null +++ b/chapter06/grub-cfg.xml @@ -0,0 +1,207 @@ + + + %general-entities; +]> + + + + + + grub + &grub-version; +
&grub-url;
+
+ + Making the Temporary System Bootable + + + Introduction + + In a normal LFS building procedure, we will chroot into the + temporary system and continue to build additional temporary tools. + But, as we've explained, in the Cross Edition we need to make the + temporary system bootable and boot it on the target system. + + + + Creating the GRUB Configuration File + + Generate $LFS/boot/grub/grub.cfg: + + cat > $LFS/boot/grub/grub.cfg << "EOF" +# Begin /boot/grub/grub.cfg +set default=0 +set timeout=5 + +menuentry "LFS Temporary System" { + linux /vmlinux root=/dev/sda3 rw init=/bin/bash + boot +} +EOF + + + The meaning of the linux command options: + + + root=/dev/sda3 + + We will use the third parition as the partition for the + root filesystem of the LFS system. + + + + + rw + + Tell the kernel to mount the root filesystem read-write. + In normal distros there is ro instead, so + the kernel will mount the root filesystem read-only. Then + the init process can check the filesystem + integrity and remount it read-write. For the temporary system + it's not needed. + + + + + init=/bin/bash + + By default the kernel runs /sbin/init + as the first process. It's provided by SysVinit or Systemd + package, which is not installed yet. We explicitly tell the + kernel to run /bin/bash instead to start a + shell, so we can run further commands interactively. + + + + + (optional) console=ttyS0,115200 + + Use the serial port at /dev/ttyS0 as + the output console device. It's very useful if the virtual + console is not avaliable (for example, the target system may lack + graphic output, or the framebuffer console may be too slow). + And, by connecting the host system and the target system with a + NULL modem or USB serial converter, it will be able to copy the + commands from the book and paste it into a terminal emulator + (for example, + GNU Screen) + on the host, to execute them on the target system. + 115200 specifies the baudrate, the default + (9600) is too slow for large amount of console output building + LFS. + + + + + From GRUB's perspective, the + kernel files are relative to the partition used. We will use a + a separate /boot partition, so /boot is not needed in the above + linux line. + + + + + + Copy the Temporary System to the Target Machine + + + The commands in the subsection must be performed on the host + system while logged in as user + root + and no longer as user lfs. + Also, double check that $LFS is set in root's environment. + + + Now it's the time to copy the + $LFS hierarchy over to your + target machine. You'll need a moveable device for this. + Using a normal USB stick is likely a bad choice: the USB sticks are + generally not optimized for reading or writing many small files + (which will happen building packages from source). Especially, if a + ext filesystem is used, the performance can be very bad. You may use + a USB to SATA adapter and a HDD or SSD (then you can directly connect + it onto the SATA port of the target system, or continuing to use the + adapter on a USB port of the target system), or a USB stick with an I/O + controller for SSD (these USB sticks are significantly more expansive + than a normal one). + + Create a GUID partition table on the device, and then create + three partitions on it. The first will be used as the BIOS boot + partition, 1 MB is sufficient enough. But if you want to use EFI to + boot your LFS system later, assign 100 MB for it so it will be possible + to convert it into an EFI system partition. The second partition will + be used as the boot partition, 500 MB is sufficient enough. The third + will be the root partition, it should be at least 20 GB. + + Create filesystems for the partitions: + +mkfs.ext4 /dev/sdx2 +mkfs.ext4 /dev/sdx3 + + + It's not needed to create a filesystem for the BIOS boot partition. + But, its type should be set to BIOS boot in + the partition table using fdisk: + + +fdisk /dev/sdx + +Welcome to fdisk (util-linux &util-linux-version;). +Changes will remain in memory only, until you decide to write them. +Be careful before using the write command. + + +Command (m for help): t +Partition number (1-9, default 9): 1 +Partition type or alias (type L to list all): BIOS boot +Changed type of partition 'Linux' to 'BIOS boot'. + +Command (m for help): w +The partition table has been altered. +Calling ioctl() to re-read partition table. +Syncing disks. + + sdx should be replaced with the name + of the device node corresponding to your moveable device. Then mount + the filesystems: + +mkdir -pv /mnt/lfs-target +mount -v -t ext4 /dev/sdx3 /mnt/lfs-target +mkdir -pv /mnt/lfs-target/boot +mount -v -t ext4 /dev/sdx2 /mnt/lfs-target/boot + + Copy the temporary system onto the device, and change the + ownership of the copy to user + root: + +cp -av $LFS/* /mnt/lfs-target +chown -R root:root /mnt/lfs-target + + Install the bootloader onto the device: + +$LFS/tools/sbin/lfs-grub-install \ + --target=i386-pc \ + --boot-directory=/mnt/lfs-target/boot \ + /dev/sdx + + Create the mountpoint for + devtmpfs, so the kernel + will mount it automatically: + +install -v -dm755 /mnt/lfs-target/dev + + Now, unmount the device: + +umount -Rv /mnt/lfs-target + + Now unplug the device and connect it onto the target system, + and boot the target system with this device as the boot device. + Read the manual from the vendor of the target system to know how to + select the boot device. + + + +