KernelNewbies
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Kernel Hacking

  • Frontpage

  • Kernel Hacking

  • Kernel Documentation

  • Kernel Glossary

  • FAQ

  • Found a bug?

  • Kernel Changelog

  • Upstream Merge Guide

Projects

  • KernelJanitors

  • KernelMentors

  • KernelProjects

Community

  • Why a community?

  • Regional Kernelnewbies

  • Personal Pages

  • Upcoming Events

References

  • Mailing Lists

  • Related Sites

  • Programming Links

Wiki

  • Recent Changes

  • Site Editors

  • Side Bar

  • Tips for Editors

  • Hosted by WikiWall

Navigation

  • RecentChanges
  • FindPage
  • HelpContents

Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Revision 12 as of 2021-01-10 19:01:52
KernelNewbies:
  • BuildLinux33

by DaveHolt - 2012 May 16

This is a worked example of building a Linux 3.3 kernel in May 2012. It does not try to list all possibilities, but should provide the reader with a clear, specific path to build a modern Linux kernel. I include timing info (and system specs) to give you an idea how long to expect the steps to take on your system.

I started with an uninitialized (VMware) virtual machine (1GB Memory, 2 processors (2.8MHz i5 760), and 32GB disk). I downloaded using a nominal 6Mbps ADSL.

Note that building a single kernel from scratch (using this method) will use about 10GiB of disk. Be sure you have disk space available before starting. (32GiB provided room for the base system plus two kernel trees).

Using an existing system to download the CD image of Ubuntu 12.04 LTS (desktop 32bit edition) from http://www.ubuntu.com took about an hour.

Scratch-installing the CD on the VM took about an hour. This led to a system that boots. All further work was done on this system.

I ran "Update Manager" from "Dash Home" and let it update. That also took about an hour. You may need to let the system reboot once. You now have a current Ubuntu 12.04 system.

Next, I ran firefox, directing it to http://kernel.org . Clicking on "Latest Stable Kernel" caused the 3.3.6 tree to download (default target ~/Downloads/).

I then did

cd ~/Downloads 
tar xf linux-3.3.6.tar.bz2 

which extracted the source tree in ~/Downloads/Linux-3.3.6/ . This took 1 minute.

Next I installed a recommended package for kernel building (sudo for privilege required to install software on system - it may prompt for your password).

sudo apt-get install build-essential 

Hit return to tell it to continue. This took a few minutes.

I then installed ncurses to allow the most basic "graphical" config interface (menuconfig).

sudo apt-get install libncurses5-dev 

This also took a few minutes.

Next go to the kernel tree, and begin the configuration process.

cd linux-3.3.6/
make menuconfig 

In the "General setup" section, select "Local version". Add something to your customized kernel (e.g. initials).

Here are three pictures showing the process:

3.3.6_view_1.png

3.3.6_view_2.png

3.3.6_view_3.png

Exit menuconfig, saving (which writes the hidden file .config ).

Next, begin making the kernel (takes ~90 minutes) with

make 

Now elevate your privileges with sudo to install the kernel:

sudo make modules_install
sudo make install 

These take about 4 and 2 minutes respectively.

Note that this automatically does other necessary updates, including initrd, and updating the grub2 configuration.

After you reboot, as with a command like

sudo shutdown -r now 

(after roughly 5 minutes,) you will come up running your new kernel, which you can verify with

uname -a 

You will see your initials in the name of the running kernel.

Congratulations - you just built a modified Linux kernel!

Now that you have the basic process working, start making more interesting changes.

  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01