如何在Debian/Ubuntu Linux上编译安装内核 v4.9.11

时间:2019-11-20 08:53:07  来源:igfitidea点击:

在Debian Linux中,如何编译和安装最新版本的Linux内核?
如何在基于Debian或Ubuntu Linux的系统上构建和安装自定义Linux内核?

下面在Debian Linux v8.x和Ubuntu Linux v14.04.4/16.04.2 LTS中编译安装新内核:

安装所需的软件包

执行以下apt-get命令, 安装用于构建Linux内核的必需软件包:

$ sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc

安装kernel-package软件包:

$ sudo apt-get install kernel-package

或者

$ sudo apt-get --no-install-recommends install kernel-package

下载Linux内核源代码

执行以下wget命令,下载源代码和pgp密钥:

$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.11.tar.sign
$ wget wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.11.tar.xz

使用GnuPG验证内核签名:

$ unxz linux-4.9.11.tar.xz
$ gpg --verify linux-4.9.11.tar.sign

从PGP密钥服务器获取公共密钥:

$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 00411886

再次验证:

$ gpg --verify linux-4.9.11.tar.sign

解压Linux内核包

$ tar xvf linux-4.9.11.tar
$ ls
$ cd linux-4.9.11/
$ ls

配置Linux内核

复制现有的Linux内核配置文件

$ cd linux-4.9.11
$ cp -v /boot/config-$(uname -r) .config

配置内核:

$ make menuconfig

删除驱动程序需要小心,否则可能导致内核损坏。例如,删除了ext4驱动程序,则系统可能无法启动。

保存并退出menuconfig。

编译Linux内核

清理源代码树并重置内核软件包参数:

$ make-kpkg clean

编译内核:

$ fakeroot make-kpkg --initrd --revision=1.0.NAS kernel_image kernel_headers

如果想加快编译速度,可以使用-j选项指定编译的CPU内核数

$ fakeroot make-kpkg --initrd --revision=1.0.NAS kernel_image kernel_headers -j 16

fakeroot在拥有root权限的环境下运行make-kpkg的命令。
make-kpkg命令从Linux内核源代码和选项构建Debian/Ubuntu内核软件包:

  • --initrd:创建一个initrd图像。
  • --revision = 1.0.NAS:设置自定义内核版本。
  • kernel_image:这个目标产生Linux内核源映像的Debian软件包,以及在内核配置文件.config中配置的任何模块。
  • kernel_headers:这个目标产生Linux内核头文件映像的Debian软件包。

验证内核deb文件:

$ ls  ../*.deb
`../linux-headers-4.9.11_1.0.NAS_amd64.deb  ../linux-image-4.9.11_1.0.NAS_amd64.deb`

安装自定义内核

执行以下dpkg命令,在系统上安装定制内核:

$ cd ..
$ sudo dpkg -i linux-headers-4.9.11_1.0.NAS_amd64.deb
$ sudo dpkg -i linux-image-4.9.11_1.0.NAS_amd64.deb

重启系统

执行以下命令:

$ sudo reboot

或者

$ sudo shutdown -r now

检查新内核

验证新内核是否正常运行:

$ uname -a
$ uname -r
$ uname -mrs
$ dmesg | more
$ dmesg | egrep -i --color 'error|critical|failed'