网站建设价格标准方案,申请学校网站建设申请书,乔拓云微信小程序,软件开发 网站建设1、普通用户登录系统
查看当前内核版本
$ uname -r
5.15.0-118-generic
2、下载内核源码
www.kernel.org
用户home目录新建子目录linux#xff0c;下载并解压 linux-5.15.165.tar.xz
3、创建起始的配置文件.config
Configuration targets #xff08;见linux kernel i…1、普通用户登录系统
查看当前内核版本
$ uname -r
5.15.0-118-generic
2、下载内核源码
www.kernel.org
用户home目录新建子目录linux下载并解压 linux-5.15.165.tar.xz
3、创建起始的配置文件.config
Configuration targets 见linux kernel in a nutshell
configUpdates the current kernel configuration by using a line-oriented program.menuconfigUpdates the current kernel configuration by using a text-based menu program.xconfigUpdates the current kernel configuration by using a QT-based graphical program.gconfigUpdates the current kernel configuration by using a GTK-based graphical program.oldconfigUpdates the current kernel configuration by using the current .config file and prompting for any new options that have been added to the kernel.silentoldconfigJust like oldconfig, but prints nothing to the screen except when a question needs to be answered.randconfigGenerates a new kernel configuration with random answers to all of the different options.defconfigGenerates a new kernel configuration with the default answer being used for all options. The default values are taken from a file located in the arch/$ARCH/defconfig file, where $ARCH refers to the specific architecture for which the kernel is being built.allmodconfigGenerates a new kernel configuration in which modules are enabled whenever possible.allyesconfigGenerates a new kernel configuration with all options set to yes.allnoconfigGenerates a new kernel configuration with all options set to no.
$ cd linux-5.15.165
三种方法创建.config文件
1使用源码自带的defconfig文件。适合嵌入式系统。
$ sudo make defconfig
2使用当前系统的config文件
$ cp /boot/config-$(uname -r) ./.config
一些新内核新增加的配置需要手工配置。
3使用localmodconfig 获取精简的编译配置本文使用
发布版的内核包含很多内核模块但是对某个特定机器实际用到的模块只是其中的极小一部分。 重新构建内核时对不使用的模块进行编译就会浪费时间。 将localmodconfig作为make的目标kbuild系统会获取一个当前在用的模块的列表 生成仅以正在使用的内核模块为对象的.config文件减少编译时间。
localmodconfig 也是使用 /boot/config-$(uname -r) 作为基准的。
$ lsmod /tmp/mod
$ sudo make LSMOD/tmp/mod localmodconfig
4、按需修改配置
$ sudo make menuconfig
按/输入配置项名称可以省略CONFIG_前缀回车搜索 按搜索结果旁的数字可跳转至配置项输入y、m、n更改配置 按Esc直至返回到初始页 继续下一个配置项 选择Save输入新文件名
5、构建内核
Build targets见linux kernel in a nutshell
allBuilds all of the different targets needed for this kernel to be able to be used. This includes both the modules and the static portion of the kernel.vmlinuxBuilds just the static portion of the kernel, not any loadable modules.modulesBuilds all of the loadable kernel modules for this configuration.modules_installInstalls all of the modules into the specified location. If no location is specified with the INSTALL_MODULE_PATH environment variable, they are installed in the default root directory of the machine.dir/Builds all of the files in the specified directory and in all subdirectories below it.dir/file.[o|i|s]Builds only the specified file.dir/file.koBuilds all of the needed files and links them together to form the specified module.tagsBuilds all of the needed tags that most common text editors can use while editing the source code.
$ sudo make
问题 scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: No such file or directory 解决 sudo apt install libssl-dev
问题 stdin:1:10: fatal error: libelf.h: No such file or directory 解决 sudo apt install libelf-dev
问题 make[1]: *** No rule to make target debian/canonical-certs.pem, needed by certs/x509_certificate_list. Stop. 解决 vi .config CONFIG_SYSTEM_TRUSTED_KEYSdebian/canonical-certs.pem 改为 CONFIG_SYSTEM_REVOCATION_KEYSdebian/canonical-revoked-certs.pem 改为
问题 net/core/rtnetlink.c:3528:1: warning: the frame size of 1112 bytes is larger than 1024 bytes [-Wframe-larger-than] 解决 vi .config CONFIG_FRAME_WARN1024 改为 4096
问题 arch/x86/kernel/head_64.o: warning: objtool: .text0x5: unreachable instruction arch/x86/kernel/smp.o: warning: objtool: sysvec_reboot()0x54: unreachable instruction arch/x86/kernel/smp.o: warning: objtool: sysvec_reboot()0x4c: unreachable instruction
解决TODO
6、安装构建的所有模块
几乎所有发行版都附带一个名为 installkernel 的脚本/usr/sbin/installkernel内核构建系统可以使用该脚本自动将构建的内核安装到正确的位置并修改引导加载程序开发人员无需执行任何额外操作。提供 installkernel 的发行版通常会将其放在名为 mkinitrd 的包中因此如果在机器上找不到该脚本请尝试安装该包。
$ sudo make modules_install INSTALL /lib/modules/5.15.165/kernel/drivers/net/dummy.koINSTALL /lib/modules/5.15.165/kernel/drivers/net/vxlan/vxlan.koINSTALL /lib/modules/5.15.165/kernel/drivers/thermal/intel/x86_pkg_temp_thermal.koINSTALL /lib/modules/5.15.165/kernel/fs/efivarfs/efivarfs.koINSTALL /lib/modules/5.15.165/kernel/net/ipv4/netfilter/iptable_nat.koINSTALL /lib/modules/5.15.165/kernel/net/ipv4/udp_tunnel.koINSTALL /lib/modules/5.15.165/kernel/net/ipv6/ip6_udp_tunnel.koINSTALL /lib/modules/5.15.165/kernel/net/netfilter/nf_log_syslog.koINSTALL /lib/modules/5.15.165/kernel/net/netfilter/xt_LOG.koINSTALL /lib/modules/5.15.165/kernel/net/netfilter/xt_MASQUERADE.koINSTALL /lib/modules/5.15.165/kernel/net/netfilter/xt_addrtype.koINSTALL /lib/modules/5.15.165/kernel/net/netfilter/xt_mark.koINSTALL /lib/modules/5.15.165/kernel/net/netfilter/xt_nat.koINSTALL /lib/modules/5.15.165/kernel/net/sched/act_bpf.koINSTALL /lib/modules/5.15.165/kernel/net/sched/act_gact.koINSTALL /lib/modules/5.15.165/kernel/net/sched/act_police.koINSTALL /lib/modules/5.15.165/kernel/net/sched/cls_bpf.koINSTALL /lib/modules/5.15.165/kernel/net/sched/sch_sfq.koDEPMOD /lib/modules/5.15.165
将模块放在文件系统中的适当位置以便新内核正确找到。 模块位于 /lib/modules/kernel_version 目录中其中 kernel_version 是刚构建的新内核的版本。
7、安装主内核镜像
将启动以下过程 1内核构建系统将验证内核是否构建成功。 2构建系统会将 static kernel 部分安装到 /boot 目录下并根据构建内核的内核版本命名这个可执行文件。 3将使用刚刚在 modules_install 阶段安装的模块自动创建任何所需的初始 ramdisk 映像。 4bootloader程序将被正确通知存在新内核并将其添加到相应的菜单中以便用户可以在下次引导机器时选择它。 5完成此操作后内核安装成功您可以安全地重新启动并试用新的内核映像。 请注意此安装不会覆盖任何较旧的内核映像因此如果新内核映像出现问题可以在引导时选择旧内核。
$ sudo make install
arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support
sh ./arch/x86/boot/install.sh 5.15.165 \arch/x86/boot/bzImage System.map /boot
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 5.15.165 /boot/vmlinuz-5.15.165
update-initramfs: Generating /boot/initrd.img-5.15.165
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 5.15.165 /boot/vmlinuz-5.15.165
run-parts: executing /etc/kernel/postinst.d/update-notifier 5.15.165 /boot/vmlinuz-5.15.165
run-parts: executing /etc/kernel/postinst.d/xx-update-initrd-links 5.15.165 /boot/vmlinuz-5.15.165
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 5.15.165 /boot/vmlinuz-5.15.165
Sourcing file /etc/default/grub
Sourcing file /etc/default/grub.d/init-select.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.165
Found initrd image: /boot/initrd.img-5.15.165
Found linux image: /boot/vmlinuz-5.15.165.old
Found initrd image: /boot/initrd.img-5.15.165
Found linux image: /boot/vmlinuz-5.15.0-118-generic
Found initrd image: /boot/initrd.img-5.15.0-118-generic
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done
问题 arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support 解决 安装binutils 或者 找到arch/x86/Makefile的142行注释掉CONFIG_X86_X32相关配置。
问题 Warning: os-prober will not be executed to detect other bootable partitions. 解决 vi /etc/default/grub 添加 GRUB_DISABLE_OS_PROBERfalse sudo update-grub
$ sudo make install
sh ./arch/x86/boot/install.sh 5.15.165 \arch/x86/boot/bzImage System.map /boot
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 5.15.165 /boot/vmlinuz-5.15.165
update-initramfs: Generating /boot/initrd.img-5.15.165
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 5.15.165 /boot/vmlinuz-5.15.165
run-parts: executing /etc/kernel/postinst.d/update-notifier 5.15.165 /boot/vmlinuz-5.15.165
run-parts: executing /etc/kernel/postinst.d/xx-update-initrd-links 5.15.165 /boot/vmlinuz-5.15.165
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 5.15.165 /boot/vmlinuz-5.15.165
Sourcing file /etc/default/grub
Sourcing file /etc/default/grub.d/init-select.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.165
Found initrd image: /boot/initrd.img-5.15.165
Found linux image: /boot/vmlinuz-5.15.165.old
Found initrd image: /boot/initrd.img-5.15.165
Found linux image: /boot/vmlinuz-5.15.0-118-generic
Found initrd image: /boot/initrd.img-5.15.0-118-generic
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
done
8、重启系统
# reboot
查看当前内核版本
# uname -r 5.15.165
9、实现开机进入grub引导菜单选择可用内核启动
# vi /etc/default/grub 注释 GRUB_TIMEOUT_STYLEhidden GRUB_TIMEOUT 改为 30 GRUB_CMDLINE_LINUX_DEFAULT 改为 text
# update-grub Sourcing file /etc/default/grub Sourcing file /etc/default/grub.d/init-select.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-5.15.165 Found initrd image: /boot/initrd.img-5.15.165 Found linux image: /boot/vmlinuz-5.15.165.old Found initrd image: /boot/initrd.img-5.15.165 Found linux image: /boot/vmlinuz-5.15.0-118-generic Found initrd image: /boot/initrd.img-5.15.0-118-generic Warning: os-prober will be executed to detect other bootable partitions. Its output will be used to detect bootable binaries on them and create new boot entries. done
# reboot 选择第二项显示可选的启动内核项