Rob Landley published an article about initramfs
(https://landley.net/writing/rootfs-howto.html) which I think is interesting
not just on account of initramfs alone, but also because it answers a whole
bunch of Linux FAQs like how small can you make Linux, how to make a LiveCD,
can Linux exist apart from GNU tools, etc. Everyone should try the exercise in
the article -- it's really short and simple; I took about 15 minutes to do it.
Basically it goes like this (I'm using Lubuntu, you may adjust some details to
fit your system):
Requirements: 64-bit system, UEFI non-secure-boot, a USB stick containing a
FAT32 partition with esp and boot flags turned on.
First make sure your host system has the packages cpio, gcc, libncurses5-dev
and make installed, then download any of the kernel balls from kernel.org.
Create a work directory:
mkdir ~/test
Write a simple C program, source code:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {printf("Hello world\n"); sleep(300);}
and save it as ~/test/hello.c, then compile it:
cd ~/test
gcc -static hello.c -o init
Test run init to make sure the program works, then remove the source file (rm
hello.c). Still inside the test directory, create a couple of device files:
mkdir dev
sudo mknod -m 622 dev/console c 5 1
sudo mknod -m 666 dev/tty0 c 5 0
Now you have the simplest file structure that you can boot into, containing an
init program and two devices to bring up the console. Bundle them up (still in
~/test):
find . | cpio -o -H newc | gzip > ../test.cpio.gz
Now prepare to compile a minimal kernel:
cd ~/Downloads
tar xf linux-4.7.2.tar.xz
cd linux-4.7.2
make mrproper
make allnoconfig
mv ~/test.cpio.gz .
make menuconfig
Configure it thus:
64-bit kernel [*]
General setup → Initial RAM filesystem and RAM disk (initramfs/initrd) support
[*]
General setup → Initramfs source file(s) [set to test.cpio.gz]
General setup → Support initial ramdisks compressed using bzip2/LZMA/XZ/LZO/LZ4
[all n, except gzip y]
Bus options (PCI etc.) → PCI support [*]
Processor type and features → EFI runtime service support [*]
Processor type and features → EFI stub support [*]
Executable file formats / Emulations → Kernel support for ELF binaries [*]
Device Drivers → Input device support → Generic input layer (needed for
keyboard, mouse, ...) [*]
Device Drivers → Character devices → Enable TTY [*]
Device Drivers → Graphics support → Frame buffer Devices → Support for frame
buffer devices [*]
Device Drivers → Graphics support → Frame buffer Devices → EFI-based
Framebuffer support [*]
Device Drivers → Graphics support → Console display driver support →
Framebuffer Console support [*]
Kernel hacking → Magic SysRq key [*]
and then compile it:
make
Now mount your USB stick, say on /mnt and create the required EFI directory:
sudo mkdir -p /mnt/efi/boot
Finally copy the compiled kernel into the stick:
sudo cp ~/Downloads/linux-4.7.2/arch/x86/boot/bzImage /mnt/efi/boot/bootx64.efi
Now shut down, boot into the stick, and see it print "Hello world". To shut
down this minimal environment, hold down Shift + Alt + PrintScreen, and press
one-by-one the keys r, e, i, s, u, o.
--
http://lists.linuxfromscratch.org/listinfo/lfs-chat
FAQ: http://www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page