build ubuntu 18.04 kernel

虽然是在 Ubuntu 18.04 上的实验,但是其他版本应该也适用。

安装环境

安装 linux 和 linux image 依赖

sudo apt-get build-dep linux linux-image-$(uname -r)

在能成功运行上面的命令之前,可能需要编辑/etc/apt/sources.list,把其中deb-src的行的注释都去掉,然后

1
sudo apt-get update

继续安装

1
2
sudo apt-get install linux-source kernel-package
sudo apt-get install libncurses-dev

准备代码

  • 进入 /usr/src/linux-source-4.15.0目录,其中,linux-source-4.15.0 也是当前 Ubuntu 18.04 默认使用的内核版本,这可以通过 uname -r 来进行确认。

  • 解压缩文件linux-source-4.15.0.tar.bz2:

    1
    sudo tar jvcf linux-source-4.15.0.tar.bz2
  • 复制当前的配置文件到源码目录

    1
    sudo cp /boot/config-4.15.0-99-generic .config
  • 把上面复制的旧的配置文件应用到内核代码中

    1
    sudo make oldconfig
  • 配置内核

    1
    make menuconfig

    编译内核

    运行下面的命令开始编译代码。其中,deb-pkg 参数会在/usr/src/下生成几个 deb 安装包,之后可以通过 dpkg -i linux-*.deb 来安装内核。

1
2
sudo make clean
sudo make -j2 deb-pkg LOCALVERSION=-custom

-custom参数可以自己设定,会在内核版本后面添加该字符串,也就是运行uname -r看到的 generic 这样的字符串。

如果需要编译模块,可以运行:

1
2
sudo make modules
sudo make modules_install

make modules_install是模块编译完成后进行安装到对应目录。

安装内核

编译好的内核文件默认放在上一级目录,共有4个 deb 文件。安装命令入下:

1
2
cd ..
sudo dpkg -i linux-*.deb

安装后,新的内核文件会出现在/boot目录下,同时/boot/grub/menu.lst中还会添加新的内核启动入口,在系统启动的时候按住shift键可以选择使用哪个内核,默认使用新内核。

参考