Initramfs

Initramfs consists of busybox, a shell script and very few other command-line programs. 
postmarketos-mkinitfs generates the initramfs.
After then, postmarketos-mkinitfs would run boot-deploy and boot-deploy would pack kernel and initramfs into a suitable format and generate config for the bootloader if necessary. Some devices with small boot partitions may need to generate an initramfs-extra by setting deviceinfo_create_initfs_extra=true.
The initramfs takes care of many things during the early booting phase, such as setting up USB networking, resizing the root partition on first boot, unlocking the root filesystem if full disk encryption is enabled, and more. Some of the tasks are listed in detail here, for others refer to the source code for now and consider expanding this article. Furthermore, the initramfs supports hooks, which may be used to work around device specific quirks, for example.
Here is a list of the boot process related to initramfs:
* Load device config from the deviceinfo file
* Initialize busybox
* Mount /dev, /proc, and /sys
* Configure logging
* Enable USB networking support for debug in the initramfs, if applicable
If the device is using an initramfs-extra, then the initramfs will:
* Attempt to mount any subpartitions that exist
* Detect and mount the postmarketOS boot partition and extract the archive
* Run mdev to detect/initialize devices
* Execute jump_init_2nd to continue booting with the steps below as if it were using a single unified initramfs
If the device is using a single unified initramfs archive, then:
* Run hooks
* Launch debug shell if key combo is used
* Find, unlock(if necessary), and mount the postmarketOS root partition. This may also run fsck on filesystems
* Run cleanup hooks
* Switch to the root filesystem, exiting the initramfs, and continue booting the OS
=== Find the boot and root partitions ===
Due to the various possible partition layouts, the initramfs script has to look in various places for the postmarketOS boot and root partitions.
boot partition:
* pmos_boot kernel parameter (from the device specific bootloader)
* Any partition or subpartition with the pmOS_boot label
root partition:
* pmos_root kernel parameter (from the device specific bootloader)
* Any partition or subpartition with the pmOS_root label
* Any partition or subpartition that is encrypted
=== Load initramfs-extra ===
Some Android and ChromeOS devices require a very small initramfs, because otherwise the resulting boot.img file is too big for their boot partition. Therefore, it's possible to split the initramfs into two parts, the tiny initramfs that is potentially placed in such a boot.img file (depending on the bootloader). And the initramfs-extra, which can hold bigger binaries, such as the UI to unlock an encrypted root partition (Unl0kr). mkinitfs can be instructed to split the archive by setting the deviceinfo_create_initfs_extra
=== Switch root ===
At the end of the initramfs script, the root partition is mounted at /sysroot, and the boot partition is mounted at /sysroot/boot. The latter is done, so Init does not need to figure out the correct boot partition later on. Afterwards, the busybox command switch_root is called to switch over and pass control to Init.
=== Kernel cmdline ===
The initramfs parses various options from the kernel cmdline which adapt its behaviour or enable additional functionality. Where multiple forms are available for the same argument, all except the first are deprecated and may be removed in the future. Options ending in an = expect a value to be given.
 Supported kernel cmdline arguments
Argument	Description
 	Causes the initramfs to halt after loading -extra and spawn a shell on all available consoles (as well as over telnet). See #Debugging and Initramfs/Inspecting for more information.
 	Disables the splash screen during boot
 	The UUID of the root partition or crypto_LUKS device containing the root partition. This is set automatically by boot-deploy
 	The UUID of the boot partition
 	Path to the root partition (e.g. /dev/sda2), intended for debug/recovery usecases
 	Path to the boot partition, intended for debug/recovery usecases
 	Additional options to pass when mounting the root partition (set from fstab by boot-deploy)
 	Force resizing the root partition even when it's not in a subpartition
 	Path to block device that should be exposed via USB mass storage when entering the debug-shell. This should generally be a full block device and not a partition.
 	Enable additional informative logging.
 	Boot in "stowaway" mode with no boot partition where the rootfs is a subdirectory of the root partition (specifically in /.stowaways/pmos.
 	Use bootchartd as init to analyze the boot process. Usually systemd-analyze can be used instead.
=== Debugging ===
The initramfs includes a local debug shell that can be launched on boot by holding Volume-Up on a touchscreen-only device or Left Shift on a device with a keyboard.
The debug shell is also run automatically if the initramfs fails boot.
Category:Technical Reference
== See also ==
=== Internal pages ===