Linux kernel development enviroment setup

Playing around Linux kernel is always something very interesting to me. In fact, it is very straightforward to run the kernel built by ourself. also in order to play around a linux driver, it is must to have a kernel build enviroment in place first.

Linux kernel dev

Choose a linux distribution to start

There are so many Linux distributions around, and it could be confusing which one to use. After I did a bit homework, I landed with Fedora. Here is the path I walked through: the majorities of linux boxes in my Cisco lab run either Ubuntu or Redhat Enterprise/Centos. Since Redhat/Centos has pretty old version os kernel, I’m not that interested to use that. So initially I wanted to use Ubuntu, I love Ubuntu because it is so easy to get most tools/packages I wanted to be installed. I thought it would be awesome to have my own built kernel running in my boxes. However, after I played around it, I realized there are some wrapper layers around Ubuntu kernel build. If I want to download and build kernel from, which is not going to work straightly. Then I looked into Gentoo and Arch Linux, which are two who are famous for providing the flexibity for the developer to customize what he wants. I did install Gentoo, but felt it was a bit too much for customization as I already used to smoothe installation of ubuntu. I want something in between. I did a bit googling, and found Fedora is the one what I look for. Some peopel said Linus Torvalds is using Fedora too.

linux fedora 23](/uploads/linux/fedora-23.jpg)

Following are the steps to follow to set up a kernel development using Fedora 23.

Download Fedora 23 workstation.

xterm# wget

Download and burn into a DVD if needed.

Install Fedora

There are two ways:

  • Install as virtual machine, e.g. using VirtualBox. It is convient, but could lost some functionality like HPET etc.
  • Install in a bare metal box.

Boot Fedora and rebuild vanilla linux kernel from mainline

  1. Clone Linus' GIT repository from GitHub: git clone
  2. In order to do kernel configuration change through "make menuconfig", ncurses-devel package needs to be installed: dnf install ncurses-devel
  3. By default openssl-devel package is not installed, and which is required by kernel build: dnf install openssl-devel
  4. kernel configuration: copy the kernel configuration file of current running kernel: cp /boot/config-$(uname -r) .config, then invoke "make menuconfig: to adjust the kernel configuration, save it.
  5. make oldconfig && make bzImage
  6. make modules && make modules_install
  7. make install
  8. reboot

Now you should have kernel built by yourself running.

You are ready to build your own kernel driver.