编译Linux Kernel(linux-4.19.178)并制作成rpm文件

本文详细记录了Linux内核从下载到编译再到升级的完整过程,包括安装依赖、配置.config文件、编译打包以及使用grub2设置默认启动内核,为系统管理员提供了清晰的操作指南。

目录

一、安装依赖项

二、下载、解压缩、制作.config文件

三、编译内核及打包

四、升级内核


首次尝试编译Linux内核,记录过程,提供Linux Kernel(linux-4.19.178)下载https://download.youkuaiyun.com/download/qpeity/15637656

一、安装依赖项

安装依赖项ncurses-devel、lfutils-libelf-devel、bc。

yum install ncurses-devel  elfutils-libelf-devel  bc

二、下载、解压缩、制作.config文件

去官网https://www.kernel.org/找合适的Linux Kernel版本,下载后解压缩。从 /boot 目录将现有版本的内核编译config配置文件拷过来到放到新的内核源码解压目录内并重命名为.config的隐藏文件。运行 make menuconfig,开启文本界面的编译选项菜单窗口,可以对内核加载的模块编译选项进行调整。具体选项根据实际需要调整

wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v4.x/linux-4.19.178.tar.xz
tar xvJf linux-4.19.178.tar.xz
cd linux-4.19.178/
cp /boot/config-3.10.0-1127.el7.x86_64 ./.config
make menuconfig

三、编译内核及打包

echo $(nproc)
或者
cat /proc/cpuinfo | grep 'model name'|wc -l     查看CPU硬件条件,最大限度利用硬件。然后make -j编译。

[root@toy SOURCES]# echo $(nproc)
2
[root@toy SOURCES]# cat /proc/cpuinfo | grep 'model name'|wc -l
2

make rpm-pkg  同时构建源和二进制RPM软件包
或者
make binrpm-pkg ##仅构建二进制RPM软件包

[root@toy linux-4.19.178]$ make binrpm-pkg
……
……
……
+ cp System.map /root/rpmbuild/BUILDROOT/kernel-4.19.178-2.x86_64/boot/System.map-4.19.178
+ cp .config /root/rpmbuild/BUILDROOT/kernel-4.19.178-2.x86_64/boot/config-4.19.178
+ bzip2 -9 --keep vmlinux
+ mv vmlinux.bz2 /root/rpmbuild/BUILDROOT/kernel-4.19.178-2.x86_64/boot/vmlinux-4.19.178.bz2
+ /usr/lib/rpm/brp-compress
Processing files: kernel-4.19.178-2.x86_64
Provides: kernel = 4.19.178-2 kernel(x86-64) = 4.19.178-2 kernel-4.19.178
Requires(interp): /bin/sh /bin/sh /bin/sh
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires(post): /bin/sh
Requires(preun): /bin/sh
Requires(postun): /bin/sh
Processing files: kernel-headers-4.19.178-2.x86_64
Provides: kernel-headers = 4.19.178 kernel-headers = 4.19.178-2 kernel-headers(x86-64) = 4.19.178-2
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Obsoletes: kernel-headers
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-4.19.178-2.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-headers-4.19.178-2.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.qFpGsq
+ umask 022
+ cd .
+ rm -rf /root/rpmbuild/BUILDROOT/kernel-4.19.178-2.x86_64
+ exit 0

四、升级内核

rpm -ivh安装新内核,这样的好处是旧内核得以保留,有退回的余地。然后,用grub2-set-default工具设置默认的启动内核,再用grub2-editenv list查看一下,确认无误了再reboot。启动后,默认的内核就是升级后的内核了。

[root@toy x86_64]# rpm -ivh kernel-4.19.178-2.x86_64.rpm

[root@toy ~]# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-1127.el7.x86_64) 7 (Core)

[root@toy ~]# cat /boot/grub2/grub.cfg | grep menuentry
if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
menuentry 'CentOS Linux (4.19.178) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1127.el7.x86_64-advanced-090a39b5-e2e5-4aff-8305-b92138c900de' {
menuentry 'CentOS Linux (3.10.0-1127.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1127.el7.x86_64-advanced-090a39b5-e2e5-4aff-8305-b92138c900de' {
menuentry 'CentOS Linux (0-rescue-853cf882e9e4451c87d05c2a97af6f78) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-853cf882e9e4451c87d05c2a97af6f78-advanced-090a39b5-e2e5-4aff-8305-b92138c900de' {

[root@toy ~]# grub2-set-default 'CentOS Linux (4.19.178) 7 (Core)'
[root@toy ~]# grub2-editenv list
saved_entry=CentOS Linux (4.19.178) 7 (Core)

[root@toy ~]# reboot
Connection closing...Socket close.

[root@toy ~]# uname -msr
Linux 4.19.178 x86_64

 

<think>嗯...用户在KylinOS上安装CUDASDK时遇到内核模块编译失败的问题,具体错误是"KERNEL_DIRisnotavalidkernelheadertree",这确实是典型的内核开发包不匹配问题。用户应该正在部署深度学习环境,从路径/dl/cuda10.0来看可能是在搭建特定版本的训练环境。用户上次已经提供了详细的错误日志,其中关键点是:-系统内核版本:4.19.90-89.11.v2401.ky10.x86_64-编译中断位置:/dl/sdk/kernel/denglin-根本错误:内核头文件路径无效考虑到KylinOS的特殊性,常规的CentOS/RHEL解决方案可能不完全适用。需要特别注意:1)麒麟系统的内核头文件可能存放在非标准路径2)其软件仓库命名规则可能不同3)安全加固特性可能影响编译从技术角度,问题核心在于三点:-缺失kernel-devel和kernel-headers包-现有开发包版本与运行内核不匹配-/lib/modules/$(uname-r)/build符号链接损坏最棘手的可能是——如果麒麟官方仓库没有提供对应v2401补丁版本的内核开发包。这种情况下需要:1)检查是否存在kernel-devel-4.19.90-89.11.v2401.ky10.x86_64.rpm2)若不存在,考虑从源码编译或联系供应商3)临时解决方案是使用最接近版本手动调整版本号需要提醒用户:强行使版本不一致的包工作可能导致运行时崩溃,尤其在GPU驱动这种内核态组件。不过对于实验环境可以临时使用。计划在回复时重点强调:1)使用uname-r精确匹配的必要性2)麒麟系统特有的仓库启用命令3)修复符号链接的关键操作4)DKMS的长期管理建议另外注意到用户使用了非标准安装路径/dl,需确认NVIDIA驱动是否支持此路径,可能需要额外指定--kernel-install-path参数。</think> 在 Kylin OS 上解决 CUDA 安装时的内核模块编译失败问题(错误:`KERNEL_DIR is not a valid kernel header tree`),需确保内核头文件与开发包匹配。以下是完整解决方案: --- ### 1. **确认运行中的内核版本** ```bash uname -r # 输出示例:4.19.90-89.11.v2401.ky10.x86_64 ``` --- ### 2. **安装匹配的内核开发包** ```bash sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) ``` - ✅ **验证安装**: ```bash rpm -qa | grep kernel-devel # 应显示版本如:kernel-devel-4.19.90-89.11.v2401.ky10.x86_64 ``` --- ### 3. **修复内核头文件路径** 修复符号链接到正确路径: ```bash sudo rm -f /lib/modules/$(uname -r)/build # 删除无效链接 sudo ln -s /usr/src/kernels/$(uname -r) /lib/modules/$(uname -r)/build ``` - ✅ **验证路径**: ```bash ls -l /lib/modules/$(uname -r)/build # 应指向有效目录 ``` --- ### 4. **重新执行 CUDA 安装** 显式指定内核路径(关键步骤): ```bash sudo sh denglin_hamming-*.run \ --target /dl \ --kernel-source-path=/lib/modules/$(uname -r)/build \ --kernel-install-path=/lib/modules/$(uname -r)/extra ``` --- ### 5. **手动编译驱动模块(可选)** 若安装仍失败: ```bash cd /dl/sdk/kernel/denglin sudo make KERNEL_DIR=/lib/modules/$(uname -r)/build -j$(nproc) sudo make install ``` --- ### 6. **验证安装结果** ```bash lsmod | grep nvidia # 检查驱动加载 nvidia-smi # 验证 GPU 识别 ``` 出现 GPU 信息表(如 CUDA 版本、显存等)表示功[^1]。 --- ### ⚠️ **特殊场景处理** - **麒麟系统专属开发包缺失**: ```bash # 1. 联系厂商获取专用 RPM 包 # 2. 或启用麒麟软件仓库后重试 sudo yum --enablerepo=kylin-devel install kernel-devel ``` - **SecureBoot 导致模块签名失败**: ```bash sudo mokutil --disable-validation # 临时禁用验证 ``` ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦行僧(csdn)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值