mirror of
https://github.com/MichielDerhaeg/build-linux.git
synced 2025-09-02 12:42:50 +02:00
docs about building kernel
This commit is contained in:
67
README.md
Normal file
67
README.md
Normal file
@@ -0,0 +1,67 @@
|
||||
Build yourself a Linux
|
||||
======================
|
||||
|
||||
% TODO explain Makefile
|
||||
|
||||
Abstract
|
||||
--------
|
||||
|
||||
*This started out as a personal project to build a very small Linux based
|
||||
operating system that has very few moving parts but is still very complete and
|
||||
useful. Along the way of figuring out how to get the damn thing to boot and
|
||||
making it do something useful I learned quite alot. Too much time has been
|
||||
spent reading very old and hard to find documentation, or when there was none
|
||||
the source code of how other people were doing it. So I thought, why not share
|
||||
what I have learned.*
|
||||
|
||||
The Linux Kernel
|
||||
----------------
|
||||
|
||||
The core component of our operating system, the kernel, that which manages the
|
||||
processes and talks to the hardware on our behalf. You can retrieve a copy of
|
||||
the source code easily from [kernel.org](https://www.kernel.org/). There are
|
||||
multiple versions to choose from, choosing one is usually a tradeoff between
|
||||
stability and wanting newer features. If you look at the
|
||||
[Releases](https://www.kernel.org/category/releases.html) tab, you can see how
|
||||
long each version will be supported and keeps receiving updates. So you can
|
||||
usually just apply the update or use the updated version without changing
|
||||
anything else or having something break.
|
||||
|
||||
So just pick a version and download the tar.xz file and extract it with ``tar
|
||||
-xf linux-version.tar.xz``. To build the kernel we obviously need a compiler and
|
||||
some build tools. Installing ``build-essential`` on Ubuntu (or ``base-devel`` on
|
||||
Arch Linux) will almost give you everything you need. You'll also need to
|
||||
install ``bc`` for some reason.
|
||||
|
||||
The next step is configuring you build, inside the untarred directory you do
|
||||
``make defconfig``. This will generate a default config for your currect
|
||||
architecture and place it in ``.config``. You can edit it directly with a text
|
||||
editor but it's much better to do it with an interface by doing ``make nconfig``
|
||||
(this needs ``libncurses5-dev`` on Ubuntu). Here you can enable/disable features
|
||||
and device drivers with the spacebar. ``*`` means that it will be compiled in
|
||||
your kernel image. ``M`` means it will be compiled inside a seprate kernel
|
||||
module. Which is a part of the kernel that will be put in a seperate file and
|
||||
can be loaded in dynamically in the kernel when they are required. The default
|
||||
config will do just fine for basic stuff like running in a virtual machine. But
|
||||
in our case, we don't really want to deal with kernel modules so we'll just do
|
||||
this: ``sed "s/=m/=y/" -i .config``. Building the kernel is now just running
|
||||
``make``. Don't forget to add ``-jN`` with `N` the number of cores of this might
|
||||
take a while.
|
||||
|
||||
Other useful/interesting ways to configure the kernel are:
|
||||
|
||||
* ``make localmodconfig`` will look at the modules that are currently
|
||||
loaded in the running kernel and change the config so that only those are
|
||||
enabled as module. Useful for when you only want to build the things you
|
||||
need without having to figure out what that is. % TODO LSMOD and caveat
|
||||
|
||||
* ``make localyesconfig``,the same as above but everything gets compiled in
|
||||
the kernel instead as a kernel module.
|
||||
|
||||
* ``make allmodconfig`` generates a new config where all options are enabled
|
||||
and as much as possible as module.
|
||||
|
||||
* ``make allyesconfig``, same as above but with everything compiled in the
|
||||
kernel.
|
||||
|
||||
* ``make randconfig`` generates a random config...
|
Reference in New Issue
Block a user