Could use a tl;dr guide (if there is such thing) on how to build a kernel.

GustavoM@lemmy.world to Linux 101 stuff. Questions are encouraged, noobs are welcome!@lemmy.world – 13 points –

Title. Basically, a "step-by-step" guide that goes like

$CLI_COMMAND to configure the kernel. `

$CLI_COMMAND to compress the kernel.

And so on, so forth.

Thanks in advance.

4

  1. Linux kernel is mainly C, but it does use some of the GNU extensions, and the most support is available to compile it with GCC. The kernel can be compiled with clang, but I think it's extra work. So step 0: Get a working GCC build system.

  2. Obtain Linux kernel source tarball and extract to a working directory. The official Linux source releases are available at kernel.org. If you are already using a Linux distribution, your distribution has some kind of way to easily get the kernel sources they use, usually through a package management tool (e.g. apt for Debian and Debian derivatives). Note that very few distributions actually distribute real "Linux" as delivered from the authoritative kernel.org source...they all maintain patchsets on top of official Linux that can be very extensive.

1a. A traditional location for source directory is /usr/src/linux-[version]. And /usr/src/linux is traditionally a symlink that points to the "currently active" kernel source.

  1. Configure the kernel. In the kernel tree run one of the following (The actual configuration is stored in [source_path]/.config. You can copy that file from a previous kernel version to the next revision, and it will mostly work):

2a. make config. This is the original configuration script. It asks you about a 1000 yes / no / module questions one at a time. Not recommended.

2b. make menuconfig. This is the same options as make config, but in a text-based menu format, where you can use arrow keys to go back and revisit previous options. Much better.

2c. make xconfig or make gconfig or make qconfig. Same idea as menuconfig but using X Windows, GTK, or Qt, respectively, with actual windows and dialog boxes.

  1. make clean. This deletes stale object files. This is unnecessary if you just extracted the tarball and haven't built anything yet. There's also make mrproper which is deeper than clean.

  2. make.

  3. make modules_install. This copies loadable kernel modules (in *.ko files) that were compiled during make into /lib/modules.

  4. Optional: make install. At least this is available on my distributions sources. If you don't do this, you just need to pull the kernel image out of [source_path]/arch/[your_arch]/boot. The filename depends on which compression was selected in configuration. For me its "bzImage". Take this file and copy it to a location where your bootloader can get to it. Traditionally it also gets renamed to vmlinuz-[version].

  5. Update bootloader menu entries.

Note that most distributions will also do an initramfs, which isn't covered here. Most people don't actually need initramfs, particularly if they compile the key early drivers into the kernel (select "yes" rather than "module"). You may need an initramfs if your root partition is encrypted and you need an early system capable of decrypting it.

Edit: Lemmy ate all my angle bracket paths, and monospace formatting.

That was very informative and effective. Thank you very much.