From ce6926396e23a56cc615020d5a9d7deeb3d3db18 Mon Sep 17 00:00:00 2001 From: Steve Divskinsy Date: Thu, 4 May 2017 10:15:19 +0930 Subject: [PATCH] Bootloader grammar --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 149003c..0a1bd9e 100644 --- a/README.md +++ b/README.md @@ -246,7 +246,7 @@ a binary keymap file I use for belgian azerty. The Boot Loader --------------- -The next step is to install the bootloader, the program that loads our kernel in +The next step is to install the bootloader - the program that loads our kernel in memory and starts it. For this we use GRUB, one of the most widely used bootloaders. It has a ton of features but we are going to keep it very simple. Installing it is very simple, we just do this: @@ -257,7 +257,7 @@ grub-install --modules=part_msdos \ /dev/loop0 ``` The ``--target=i386-pc`` tells grub to use the simple msdos MBR bootloader. This -is often the default but this can vary from machine to machine so you better +is often the default, but this can vary from machine to machine so you better specify it here. The ``--boot-directory`` options tells grub to install the grub files in /boot inside the image instead of the /boot of your current system. ``--modules=part_msdos`` is a workaround for a bug in Ubuntu's grub. When you @@ -266,7 +266,7 @@ think it needs to support msdos partition tables and won't be able to find the root partition. Now we just have to configure grub and then our system should be able to boot. -This basicly means telling grub how to load the kernel. This config is located +This basically means telling grub how to load the kernel. This config is located at ``boot/grub/grub.cfg`` (some distro's use ``/boot/grub2``). This file needs to be created first, but before we do that, we need to figure something out first. If you look at ``/proc/cmdline`` on your own machine you might see @@ -278,14 +278,14 @@ BOOT_IMAGE=/boot/vmlinuz-4.4.0-71-generic root=UUID=83066fa6-cf94-4de3-9803-ace8 These are the arguments passed to your kernel when it's booted. The 'root' option tells our kernel which device holds the root filesystem that needs to be mounted at '/'. The kernel needs to know this or it won't be able to boot. There -are different ways of identifying your the root filesystem. Using a UUID is a +are different ways of identifying your root filesystem. Using a UUID is a good way because it is a unique identifier for the filesystem generated when you do ``mkfs``. The issue with using this is that the kernel doesn't really support it because it depends on the implementation of the filesystem. This -works on your system because it uses an initramfs. But we can't use it now. We +works on your system because it uses an initramfs, but we can't use it now. We could do ``root=/dev/sda1``, this will probably work but it has some other problems. -The 'a' in 'sda' is can depend on the order the bios will load the disk and this -can change when you add a new disk or sometimes the order can change randomly. +The 'a' in 'sda' depends on the order the bios will load the disk and this +can change when you add a new disk, or for a variety of other reasons. Or when you use a different type of interface/disk it can be something entirely different. So we need something more robust. I suggest we use the PARTUUID. It's a unique id for the partition (and not the filesystem like UUID) and this is a @@ -295,9 +295,9 @@ a GPT thing). We'll find the id like this: $ fdisk -l ../image | grep "Disk identifier" Disk identifier: 0x4f4abda5 ``` -Then we drop the 0x and append the partition number as two digit hexidecimal. A +Then we drop the 0x and append the partition number as two digit hexidecimal. An MBR only has 4 partitions max so that it's hexidecimal or decimal doesn't really -matter but that's what the standard says. So the grub.cfg should look like this: +matter, but that's what the standard says. So the grub.cfg should look like this: ``` linux /boot/bzImage quiet init=/bin/sh root=PARTUUID=4f4abda5-01 boot