深度操作系统DeepinV23安装最新的linux内核
深度操作系统DeepinV23安装最新的linux内核
!usrbinenvbashUpgradeLinuxKernel最新代码位于:https:jihulab。comsnippets2310checkapt(){commandvaptdevnull21}installdeps(){aptyinstalllibncurses5devopenssllibssldevbuildessentialopensslpkgconfiglibc6devbisonlibidn11devlibidn11minizipflexlibelfdevzlibc}upgrade(){pushd。linux{VERSION}devnull21exit1makecleantimemakemrproperprintf:::::::makemrproper:::::::cpbootconfig{CURRENTKERNEL}。。configtimemakemenuconfigLoad(。config)OKSAVE(。config)OKEXIT选择(使用Tab键):选择Load回车回车选择Exit回车回车printf:::::::makemenuconfig::::::::timemakebzImagej{CPUCOUNT}printf:::::::makebzImage::::::::timemakemodulesj{CPUCOUNT}printf:::::::makemodule::::::::timemakeINSTALLMODSTRIP1modulesinstallprintf:::::::installmodule::::::::timemkinitramfslibmodules{TARGETKERNEL}obootinitrd。img{TARGETKERNEL}printf:::::::mkinitramfskernel::::::::cparchx86bootbzImagebootvmlinuz{TARGETKERNEL}cpSystem。mapbootSystem。map{TARGETKERNEL}updategrub2popddevnull21exit1}main(){seteif!checkapt;thenprintfonlyaptpackagemanagerissupportedexit1fiVERSION{1}checkkernelversionif〔〔z{VERSION}〕〕;thenprintfpleaseenterkernelversionexit1fiprintfwillinstalllinuxkernels{VERSION}if〔〔!dlinux{VERSION}〕〕;thendownloadkernelpackageif〔〔!flinux{VERSION}。tar。gz〕〕;thenVERFIRST(echo{VERSION}cutd。f1)wgetOlinux{VERSION}。tar。gzhttps:mirrors。aliyun。comlinuxkernelv{VERFIRST}。xlinux{VERSION}。tar。gzprintfdownloadkernelsfromaliyunmirror{VERSION}fiif〔〔!flinux{VERSION}。tar。gz〕〕;thenprintfnofoundkernelpackagefilelinuxs。tar。gz。{VERSION}exit1fitarzxflinux{VERSION}。tar。gzfiif〔〔!dlinux{VERSION}〕〕;thenprintfnofoundfolderlinuxs。{VERSION}exit1fiinstalldepsexit1CURRENTKERNEL(unamer)TARGETKERNEL{VERSION}{CURRENTKERNEL}printfCurrent:sTarget:s{CURRENTKERNEL}{TARGETKERNEL}CPUCOUNT(catproccpuinfogrepprocessorwcl)upgrade21tee。kernel。log}mainexit1
脚本已托管至JihuLabGit平台:https:jihulab。comsnippets2310
升级Linux内核到指定的版本仅支持apt包管理工具。
可自行更改并安装相关依赖,以支持别的包管理器需要root权限添加可执行权限:chmodxkernel。sh执行命令:sudo。kernel。sh6。1。1当前目录下,生成的日志为kernel。log
脚本分析:定义语法为bash!usrbinenvbash判断是否为apt包管理器checkapt(){commandvaptdevnull21}安装依赖库installdeps(){aptyinstalllibncurses5devopenssllibssldevbuildessentialopensslpkgconfiglibc6devbisonlibidn11devlibidn11minizipflexlibelfdevzlibc}升级内核的函数upgrade(){进入内核源码的文件夹,失败则退出pushd。linux{VERSION}devnull21exit1清理上次编译的残留文件makeclean在相关命令行前面添加time,可以统计编译时长删除不必要的文件和目录timemakemrproperprintf:::::::makemrproper:::::::复制当前内核的配置信息到当前目录,并命名为。configcpbootconfig{CURRENTKERNEL}。。config基于文本选单的配置界面,对应的还有makeconfig传统的配置方式timemakemenuconfigUI界面按顺序选择及确定Load(。config)OKSave(。config)OKExit选择(使用Tab键):Load回车回车选择Exit回车回车printf:::::::makemenuconfig::::::::编译内核j16不使用多线程进行加速编译timemakebzImagej{CPUCOUNT}printf:::::::makebzImage::::::::编译模块timemakemodulesj{CPUCOUNT}printf:::::::makemodule::::::::安装模块timemakeINSTALLMODSTRIP1modulesinstallprintf:::::::installmodule::::::::打包新内核对应的。ko驱动到initrd。img文件timemkinitramfslibmodules{TARGETKERNEL}obootinitrd。img{TARGETKERNEL}printf:::::::mkinitramfskernel::::::::内核镜像文件bzImage和内核符号表文件System。map拷贝到bootcparchx86bootbzImagebootvmlinuz{TARGETKERNEL}cpSystem。mapbootSystem。map{TARGETKERNEL}更新内核updategrub2退出当前目录popddevnull21exit1}入口函数main(){遇到错误退出脚本sete判断是否为apt包安装器,当前只支持apt包管理器if!checkapt;thenprintfonlyaptpackagemanagerissupportedexit1fi第一个参数为内核版本号VERSION{1}判断版本号的参数是否存在if〔〔z{VERSION}〕〕;thenprintfpleaseenterkernelversionexit1fiprintfwillinstalllinuxkernels{VERSION}判断是否已存在内核源码的文件夹(防止上次安装出错后,又重新下载和解压内核源码包)if〔〔!dlinux{VERSION}〕〕;then若不存在内核源码目录,则判断是否存在内核源码压缩包if〔〔!flinux{VERSION}。tar。gz〕〕;then提取版本的大版本号,供下载地址使用VERFIRST(echo{VERSION}cutd。f1)从阿里云镜像下载源码包wgetOlinux{VERSION}。tar。gzhttps:mirrors。aliyun。comlinuxkernelv{VERFIRST}。xlinux{VERSION}。tar。gzprintfdownloadkernelsfromaliyunmirror{VERSION}fi再次判断是否存在源码包。即,上次或上一步下载的源码包是否保存if〔〔!flinux{VERSION}。tar。gz〕〕;thenprintfnofoundkernelpackagefilelinuxs。tar。gz。{VERSION}exit1fi解压源码包tarzxflinux{VERSION}。tar。gzfi再次判断是否存在内核源码的文件夹if〔〔!dlinux{VERSION}〕〕;thenprintfnofoundfolderlinuxs。{VERSION}exit1fi安装相关依赖,失败则退出installdepsexit1获取当前内核名称CURRENTKERNEL(unamer)将升级的目标内核名称TARGETKERNEL{VERSION}{CURRENTKERNEL}printfCurrent:sTarget:s{CURRENTKERNEL}{TARGETKERNEL}获取逻辑CPU个数,以便编译加速CPUCOUNT(catproccpuinfogrepprocessorwcl)执行升级,并将升级的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a保存到kernel。logupgrade21tee。kernel。log}调用入口函数,传入所有参数,若出错则退出mainexit1