<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>How Linux Is Booted on Ozbem</title><link>https://www.ozbem.com/tags/how-linux-is-booted/</link><description>Recent content in How Linux Is Booted on Ozbem</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>info@ozbem.com (ebeem)</managingEditor><webMaster>info@ozbem.com (ebeem)</webMaster><copyright>© 2026 ebeem</copyright><lastBuildDate>Tue, 23 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.ozbem.com/tags/how-linux-is-booted/rss.xml" rel="self" type="application/rss+xml"/><item><title>Bootloader</title><link>https://www.ozbem.com/posts/tech/linux/bootloader/</link><pubDate>Tue, 23 Jun 2026 00:00:00 +0000</pubDate><author>info@ozbem.com (ebeem)</author><guid>https://www.ozbem.com/posts/tech/linux/bootloader/</guid><description>&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;We discussed earlier the objective of the &lt;code&gt;firmware&lt;/code&gt; which was to test the hardware and run the &lt;code&gt;bootloader&lt;/code&gt;. The &lt;code&gt;bootloader&lt;/code&gt; is a small program that has one objective, to load the kernel properly in RAM hand control to it.&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;code&gt;GRUB&lt;/code&gt; (&lt;code class="verbatim"&gt;GRand Unified Bootloader&lt;/code&gt;) is one of the most popular &lt;code&gt;bootloaders&lt;/code&gt; available for &lt;code&gt;GNU/Linux&lt;/code&gt;, other options like &lt;code&gt;systemd-boot&lt;/code&gt; also exist which are more lightweight.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Objective&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;The &lt;code&gt;bootloader&lt;/code&gt; will perform multiple steps until it hands controls to the kernel.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Loading Kernel &amp;amp; Initramfs&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;The Linux kernel &lt;code&gt;vmlinuz&lt;/code&gt; is the core of kernel. It&amp;#39;s small and contains only essential components. Other modules like drivers and filesystem support are loaded on demand and their extension is &lt;code&gt;.ko&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Initializing RAM&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;The &lt;code&gt;initramfs&lt;/code&gt; (Initial RAM Filesystem) contains the needed modules and drivers required in order to allow the kernel to read your filesystem. This may look a bit confusing as a very valid question will be raised here, why these needed drivers aren&amp;#39;t just part of the kernel itself? and the answer to that is, each machine will require different drivers to boot, disk types and encryption applied to them will make these drivers different. In order to support all of these machines, all the drivers will be loaded which will make the kernel very large. The solution is that each machine will actually build the &lt;code&gt;initramfs&lt;/code&gt; file during the installation process which will contain exactly the drivers it needs to boot. You will notice this file also being generated every time you update your kernel.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-2"&gt;&#10;&lt;h2 id="headline-5"&gt;&#10;Customizing the Bootloader&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;&lt;code&gt;GRUB&lt;/code&gt; is highly customizable, it allows you to reorder the list of operating system to boot, the timeout before selecting the default system to boot, and the parameters to pass to the kernel like recovery mode.&lt;/p&gt;&#10;&lt;p&gt;&#10;All of these parameters and more can be found in the file &lt;code class="verbatim"&gt;/etc/default/grub&lt;/code&gt;. This file has comments explaining each parameter and you can find more in &lt;a href="https://www.gnu.org/software/grub/manual/grub/grub.html#Configuration"&gt;GRUB Manual - Configuration&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;It&amp;#39;s also important to highlight that making changes to this file will not take effect until you regenerate the grub configuration file which is may different based on your distro.&lt;/p&gt;&#10;&lt;p&gt;&#10;Debian / Ubuntu:&lt;/p&gt;&#10;&lt;div class="src src-bash"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo update-grub&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Arch Linux / Manjaro:&lt;/p&gt;&#10;&lt;div class="src src-bash"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo grub-mkconfig -o /boot/grub/grub.cfg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;This process of updating grub via &lt;code class="verbatim"&gt;grub-mkconfig&lt;/code&gt; (Debian actually calls this command if you use &lt;code class="verbatim"&gt;update-grub&lt;/code&gt;) is going to produce a new configuration file in the specified path after the &lt;code class="verbatim"&gt;-o&lt;/code&gt; parameter which is &lt;code class="verbatim"&gt;/boot/grub/grub.cfg&lt;/code&gt; in the case of the Arch Linux example. The new configuration file is going to pull your configuration from &lt;code class="verbatim"&gt;/etc/default/grub&lt;/code&gt; in addition to all files in the directory &lt;code class="verbatim"&gt;/etc/grub.d/&lt;/code&gt; in order by name. In addition to pulling your final configuration file, it scans your disks for other operating systems like &lt;code&gt;Linux&lt;/code&gt; or &lt;code&gt;Windows&lt;/code&gt; and adds them to your boot menu in the final configuration file.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-2"&gt;&#10;&lt;h2 id="headline-6"&gt;&#10;Themes and Visuals&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;There are many available themes that can make your &lt;code&gt;bootloader&lt;/code&gt; look way more interesting. The manual explains in detail how to make your own theme in &lt;a href="https://www.gnu.org/software/grub/manual/grub/grub.html#Theme-file-format"&gt;GRUB Manual - Themes&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;You can find a nice collection of &lt;code&gt;GRUB&lt;/code&gt; themes available on this &lt;a href="https://github.com/Jacksaur/Gorgeous-GRUB"&gt;Github Repository&lt;/a&gt;. Below is a screenshot showcasing one of those creative themes.&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;img src="./imgs/grub-virtuaverse.png" alt="./imgs/grub-virtuaverse.png" title="./imgs/grub-virtuaverse.png" /&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>Firmware (BIOS and UEFI)</title><link>https://www.ozbem.com/posts/tech/linux/firmware/</link><pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate><author>info@ozbem.com (ebeem)</author><guid>https://www.ozbem.com/posts/tech/linux/firmware/</guid><description>&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;In this series, I will try to explain how your system (specifically Linux) is booted from the moment you press that power button until you see your desktop environment. I will also highlight the different software available for each task/step and what customization you can apply.&lt;/p&gt;&#10;&lt;p&gt;&#10;The firmware is the first software to be loaded once you power on your machine, this software exists in your motherboard itself and it usually is proprietary and hard to replace as the motherboard manufacturers don&amp;#39;t share the internals of their chips.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Objective&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;The &lt;code&gt;firmware&lt;/code&gt; has two objectives: to diagnose hardware and to locate and run the &lt;code&gt;bootloader&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Power-On Self Test (POST)&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;The firmware performs the Power-On Self Test (POST) which tests and initializes hardware components like CPU and RAM, it will report a failure if something goes wrong in this step by displaying an error message, digit codes, or producing beeping sounds.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Running the Bootloader&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;The firmware will have to locate and run another specialized program called the &lt;code&gt;bootloader&lt;/code&gt;. This other program will take care of launching the operating system.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-2"&gt;&#10;&lt;h2 id="headline-5"&gt;&#10;BIOS vs UEFI&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;You may hear about these terms quite often in firmware. Computers used the Basic Input/Output System (&lt;code&gt;BIOS&lt;/code&gt;) in the early days. Today, almost all modern computers use the Unified Unified Extensible Firmware Interface (&lt;code&gt;UEFI&lt;/code&gt;). The advantages you will get from using &lt;code&gt;UEFI&lt;/code&gt; include:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Unlimited drive sizes, &lt;code&gt;BIOS&lt;/code&gt; is limited to 2.2 TB&lt;/li&gt;&#10;&lt;li&gt;Modern interface with high resolution and mouse support, &lt;code&gt;BIOS&lt;/code&gt; is keyboard-only and has a retro blue text-based interface.&lt;/li&gt;&#10;&lt;li&gt;Fast booting as it initializes components in parallel, &lt;code&gt;BIOS&lt;/code&gt; does it one component at a time.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-2"&gt;&#10;&lt;h2 id="headline-6"&gt;&#10;Upgrading Firmware&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;Since the &lt;strong&gt;firmware&lt;/strong&gt; is actually a piece of software, regular updates are released for both &lt;code&gt;BIOS&lt;/code&gt; and &lt;code&gt;UEFI&lt;/code&gt;. These updates usually are to patch security vulnerabilities, fix bugs, or add hardware support. This process is usually called &lt;code&gt;flashing the BIOS&lt;/code&gt; and the instructions to perform it varies based on the motherboard.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Warning: Flashing your firmware carries a small amount of risk and it may &amp;#34;brick&amp;#34; your motherboard if you flash incompatible firmware or power goes down during the process. Always ensure your system has stable power and you have identified the correct firmware supply before updating.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-2"&gt;&#10;&lt;h2 id="headline-7"&gt;&#10;Customizing Firmware&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;Many &lt;code&gt;UEFI&lt;/code&gt; interfaces nowadays offer built-in customization options such as boot order, hardware virtualization, and interface theme. However, to really customize the firmware, you must use an open-source one which is usually not possible.&lt;/p&gt;&#10;&lt;p&gt;&#10;Some projects like &lt;code&gt;Coreboot&lt;/code&gt; and &lt;code&gt;Libreboot&lt;/code&gt; try to replace the proprietary, closed-source firmware shipped by motherboard manufacturers. Unfortunately, installing these alternatives requires hardware compatibility and technical expertise. They also may &amp;#34;brick&amp;#34; your motherboard if not done right.&lt;/p&gt;&#10;&lt;p&gt;&#10;The benefits obtained from installing these custom firmware include: much faster boot times because they strip out hidden unwanted code and also give users full transparent control.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;</description></item></channel></rss>