Deepin内核升级方法

时间:2024-02-20 18:21:56

前奏

①、执行make menuconfig需要安装库libncurses5-dev,执行“sudo apt-get install libncurses5-dev”

②、执行make需要安装库libssl-dev,执行“sudo apt-get install libssl-dev”

③、编译内核出现如下错误“kernel/bounds.c:1:0: error: code model kernel does not support PIC mode”

   修改顶层Makefile文件:

KBUILD_CFLAGS   := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
                   -fno-strict-aliasing -fno-common \
                   -Werror-implicit-function-declaration \
                   -Wno-format-security \
-                  -std=gnu89
+           -std=gnu89 -fno-pie

- KBUILD_AFLAGS   := -D__ASSEMBLY__
+ KBUILD_AFLAGS   := -D__ASSEMBLY__ -fno-pie

 ④、深度内核常识性介绍:https://wiki.deepin.org/wiki/Linux%E5%86%85%E6%A0%B8#.E5.AE.89.E8.A3.85

不进行内核编译升级内核版本参考如下文档:https://bbs.deepin.org/forum.php?mod=viewthread&tid=175411&extra=

手动进行内核获取、编译和内核替换升级

1、获取当前内核版本

think@think-PC:~/Desktop$ sudo uname -r
4.15.0-30deepin-generic
think@think-PC:~/Desktop$ sudo uname -a
Linux think-PC 4.15.0-30deepin-generic #31 SMP Fri Nov 30 04:29:02 UTC 2018 x86_64 GNU/Linux

2、查看当前可用源码包

think@think-PC:~/Desktop$ sudo apt-cache search linux-source
linux-source - Linux kernel source (meta-package)
linux-source-4.15.0 - Linux kernel source for version 4.15.0 with Ubuntu patches
linux-source-4.19 - Linux kernel source for version 4.19 with Debian patches
linux-source-4.9 - Linux kernel source for version 4.9 with Debian patches

3、获取内核源码包

  1)、联网获取

sudo apt-get install linux-source-4.19

会在/usr/src目录下得到"linux-source-4.19.tar.xz"和“linux-patch-4.19-rt.patch.xz”的源码,前一个为内核源码,后一个为当前Deepin系统的补丁文件。这两个文件均采用两层压缩的方式,外层是xz压缩,内层是tar压缩。

  2)、从网络下载的内核压缩包

https://www.kernel.org/网站下载内核源码,具体路径:https://mirrors.edge.kernel.org/pub/linux/kernel/,下载之后上传到Linux系统中进行解压。

4、对源码包进行解压

# 解压外层
think@think-PC:/usr/src$ xz -d linux-source-4.19.tar.xz
# 解压内层
think@think-PC:/usr/src$ tar -xf linux-source-4.19.tar 

5、编译内核

# 打补丁,此过程为可选项。打补丁是为了升级内核,如果不升级内核不需要打补丁。
think@think-PC:/usr/src/linux-source-4.19$ sudo patch -p1 < ../linux-patch-4.19-rt.patch 
#配置内核(确保当前深度内核与将要编译内核版本相同,使用该编译方法会读取当前系统版本内核配置文件,同时去掉当前系统未使用的模块,优化内核编译)
think@think-PC:/usr/src/linux-source-4.19$ sudo make localmodconfig
#编译内核
think@think-PC:/usr/src/linux-source-4.19$ sudo make

6、在lib下创建内核版本目录

think@think-PC:/lib/modules$ sudo mkdir 4.15.0
think@think-PC:/lib/modules$ ls
4.15.0  4.15.0-30deepin-generic

 7、安装驱动到创建的4.15.0目录下

think@think-PC:~/kernel/linux-4.15$ sudo make modules_install

8、安装内核、文件系统、映射到/boot目录。

  安装过程主要包括:

  1)、复制System.map、Vmlinuz和config-4.15.0到/boot目录。

  2)、执行"update-initramfs -c -k 4.15.0"命令,在/boot目录中产生文件系统文件。

  3)、执行“update-grub”命令,更新/boot/grub/grub.cfg文件,产生4.15.0版本的引导项。

think@think-PC:~/kernel/linux-4.15$ sudo make install
sh ./arch/x86/boot/install.sh 4.15.0 arch/x86/boot/bzImage \
    System.map "/boot"
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 4.15.0 /boot/vmlinuz-4.15.0
run-parts: executing /etc/kernel/postinst.d/dkms 4.15.0 /boot/vmlinuz-4.15.0
Error!  Build of huawei-wmi.ko failed for: 4.15.0 (x86_64)
Consult the make.log in the build directory
/var/lib/dkms/huawei-wmi/1.0/build/ for more information.
Error!  Build of mincores.ko failed for: 4.15.0 (x86_64)
Consult the make.log in the build directory
/var/lib/dkms/mincores/0.2.0/build/ for more information.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.15.0 /boot/vmlinuz-4.15.0
update-initramfs: Generating /boot/initrd.img-4.15.0
WARNING: Setting CRYPTSETUP in /etc/initramfs-tools/initramfs.conf is deprecated and will stop working in the future. Use /etc/cryptsetup-initramfs/conf-hook instead.
loadkeys is missing. Please install the \'kbd\' package.
W: plymouth: The plugin label.so is missing, the selected theme might not work as expected.
W: plymouth: You might want to install the plymouth-themes package to fix this.
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
run-parts: executing /etc/kernel/postinst.d/reconfigure-dde-daemon 4.15.0 /boot/vmlinuz-4.15.0
fix systemd/logind config
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 4.15.0 /boot/vmlinuz-4.15.0
Generating grub configuration file ...
Found theme: /boot/grub/themes/deepin/theme.txt
Found linux image: /boot/vmlinuz-4.15.0-30deepin-generic
Found initrd image: /boot/initrd.img-4.15.0-30deepin-generic
Found linux image: /boot/vmlinuz-4.15.0
Found initrd image: /boot/initrd.img-4.15.0
done

 GRUB启动说明

Grub启动主要从两个文件夹进行修改:/etc/default/grub和/etc/grub.d

1、/etc/default/grub文件

DEEPIN_GFXMODE_DETECT=1

#手动添加内核启动参数         
GRUB_CMDLINE_LINUX=""

#添加内核启动参数,这个为默认
GRUB_CMDLINE_LINUX_DEFAULT="splash quiet "

#默认启动项,这个值为0就是默认启动第一个,为1默认启动第二个
GRUB_DEFAULT=0

#获得发行版本(此行将追加到所有的linux 定义内核行的后面,不论是救援模式还是一般模式)
GRUB_DISTRIBUTOR="`/usr/bin/lsb_release -d -s 2>/dev/null || echo Deepin`"

#启动的分辨率
GRUB_GFXMODE=2560x1600,1920x1440,1856x1392,1792x1344,1920x1200,1600x1200,1680x1050,1400x1050,1280x1024,1440x900,1280x960,1360x768,1280x800,1152x864,1280x768,1024x768,auto

#启动的主题,是各种图片和各种显示的字体
GRUB_THEME=/boot/grub/themes/deepin-fallback/theme.txt

#等待时间,5秒未操作直接进入默认系统。改为-1是一直等待。
GRUB_TIMEOUT=5

2、/etc/grub.d

00_header                         # 配置初始的显示项目,如默认选项,时间限制等,一般由/etc/default/grub导入,一般不需要配置
05_debian_theme        #  配置引导画面,文字颜色等主题
10_linux                            #定位当前操作系统使用中的root设备内核的位置,包含deepin 启动项和advanced里面的启动项
15_linux_bar                  # 救援模式的启动项
20_linux_xen                 # 虚拟机监视器的东西,(暂时不知有什么用
30_uefi-firmware       # “system setup” 的启动项
35_os-prober               #   windows的启动项一般在这个里面
40_custom                   # 用来加入用户自定义的启动项,将会在执行update-grub时更新至grub.cfg中
41_custom                  # 判断custom.cfg此配置文件是否存在,如果存在就加载它
前面的数字是对文件排列执行的顺序进行排序,可进行更改,比如你想把windows启动项调到第一个,就把35_os-prober前面那个数字改成5到10的数字,比如06、07、08、09.

 存在多个系统启动项时选择启动选项

按照上述方案创建的多个系统启动项会放置到启动界面的Advanced options选项中,启动时需要手动选择启动项。在实际应用中需要设定某一版本的系统自动启动,此时需要更改启动选项,更改步骤如下:

①、将需要自动启动的内核启动项从/boot/grub/grub.cfg文件的submenu中找到。

②、将其复制到/etc/grub.d/40_custom文件,修改之后文件内容如下所示。

③、修改/etc/default/grub文件的default值为2,执行update-grub命令。

 /etc/grub.d/40_custom文件内容如下:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the \'exec tail\' line above.

menuentry \'Deepin 15.10.1 GNU/Linux, with Linux 4.15.0\' --class deepin --class gnu-linux --class gnu --class os $menuentry_id_option \'gnulinux-4.15.0-advanced-c270f13a-54cd-4258-b179-e0f36e41abba\' {
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_msdos
        insmod ext2
        set root=\'hd0,msdos1\'
        if [ x$feature_platform_search_hint = xy ]; then
                search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  c270f13a-54cd-4258-b179-e0f36e41abba
        else
                search --no-floppy --fs-uuid --set=root c270f13a-54cd-4258-b179-e0f36e41abba
        fi
        linux   /boot/vmlinuz-4.15.0 root=UUID=c270f13a-54cd-4258-b179-e0f36e41abba ro  splash quiet  DEEPIN_GFXMODE=$DEEPIN_GFXMODE
        initrd  /boot/initrd.img-4.15.0
}