0%

重新编译Ubuntu内核增加驱动

因为要在Ubuntu下支持新硬件,所以要重新编译当前系统内核。总结了如下操作。

下载内核源代码 两种方法

www.kernel.org 下载需要的内核版本源代码。

直接从Ubuntu源中下载当前内核版本的源代码。

1
2
3
uname -a
sudo apt-cache search linux-source
sudo apt-get install sudo apt-get install linux-source-4.20.5

两种方法都需要使用sudo tar解压缩到当前宿主目录目录。

安装编译过程中所用到的软件

1
2
3
4
5
6
sudo apt-get update 
sudo apt-get install libncurses5-dev libssl-dev
sudo apt-get install build-essential openssl
sudo apt-get install zlibc minizip
sudo apt-get install libidn11-dev libidn11
sudo apt-get install pkg-config libc6-dev bison flex libelf-dev

净化源代码

1
make mrproper

获取当前内核配置

将系统当前正在运行的内核配置复制并且加载

1
2
3
4
cd ~/linux-source-4.18.0
uname -a #查看当前运行的内核版本号
cp /boot/config-4.18.0-25-generic ./.config
make menuconfig #打开内核配置工具选择load加载.config配置文件

执行编译命令生成内核和模块二进制文件

1
make -j4  #这里j4是4线程的意思,根据实际情况更改

安装编译好的模块和内核

1
2
sudo make modules_install   #需要使用root权限必须使用sudo
sudo make install

重启

1
2
reboot   #重新启动
uname -a #查看内核已经和之前不同

后记:

在安装内核过程中提示空间不足错误提示:

1
gzip: stdout: No space left on device

因为我在编译内核的时候把很多驱动直接编译到了内核中,导致内核体积变大,500M的/boot分区都放不下,所以准备取消/boot分区,直接在/下重建。

1
2
3
4
5
6
7
8
9
10
11
sudo rsync -arv /boot /home/用户名/backup    #备份/boot分区
sudo umount /boot/efi #卸载efi,如果efi没有单独分区可以不做
sudo umount /boot #卸载/boot
sudo ln -s /boot/home/用户名/backup/boot /boot #创建/boot软连接
sudo make install #安装内核
sudo rm -rf /boot #删除软连接
sudo rsync -arv /home/zs/backup/boot / #重建/boot目录
sudo rm -rf /boot/efi #删除efi目录,如果efi没有单独分区可以不做
sudo mkdir /boot/efi #重建efi目录,如果efi没有单独分区可以不做
sudo mount /boot/efi #如果efi没有单独分区可以不做
sudo rsync -arv /home/zs/backup/boot/efi /boot #如果efi没有单独分区可以不做