linux系统替换新内核(编译安装替换与打包替换)
系统大全为您提供
内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。
本文将以kernel 3.12.5版本为实验,操作平台为RedHat 6.2,但本文所介绍的内核编译与安装方法适合大多数Linux系统(包括RedHat、Ubuntu、Debian等)。
二、下载新内核源码
解压内核:#tar xvf linux-3.12.5.tar.xz /opt
进入内核源码目录:#cd /optnux-3.12.5
这里解压到任何目录都行,本人解压到了/opt目录下。在网上看到很多朋友解压到/usrc目录下,其实这都无所谓,因为本文所讲的方法并不局限于给本机新增一个内核,还有可能是给其他机器的新增内核,就算是新增本机内核那也没关系,因为后面执行#make install 自动就会将对应文件拷贝到本机相应的目录下去了。
注:下文所有关于颜色标注的“3.12.5”都替换成自己实际的内核版本号。
三、替换内核
本文介绍两种替换内核方法:编译替换内核、打包替换内核(.deb安装包)。
(一)编译替换内核
编译替换内核适合所有Linux系统,也是大多数人常用的方法。
1、定制内核
#make mrproper
作用是在每次配置并重新编译内核前需要先执行“make mrproper”命令清理源代码树,包括过去曾经配置的内核配置文件“.config”都将被清除。即进行新的编译工作时将原来老的配置文件给删除到,以免影响新的内核编译。
即检查有无不正确的.o文件和依赖关系,如果使用刚下载的完整的源程序包即第一次进行编译,那么本步可以省略。而如果你多次使用了这些源程序编译内核,则最好要先运行一下这个命令。
#make menuconfig
注:使用make menuconfig 生成的内核配置文件,决定将内核的各个功能系统编译进内核还是编译为模块还是不编译。
在这里就不介绍具体的内核配置操作,但是建议就算不打算配置什么也执行一下make menuconfig这个命令,因为如果不执行此操作的话在后面make编译内核的时候会提示你回答很多问题。
内核配置可参考:
Make menuconfig配置详解:
配置内核还有很多其他方法,主要区别如下:
#make menuconfig //基于ncurse库编制的图形工具界面
#make config //基于文本命令行工具,不推荐使用
#make xconfig //基于X11图形工具界面
#make gconfig //基于gtk+的图形工具界面
这里选择简单的配置内核方法,即make menuconfig。在终端输入make menuconfig,等待几秒后,终端变成图形化的内核配置界面。进行配置时,大部分选项使用其缺省值,只有一小部分需要根据不同的需要选择。
对每一个配置选项,用户有三种选择,它们分别代表的含义如下:
<*>或[*]——将该功能编译进内核
[ ]——不将该功能编译进内核
[M]——将该功能编译成可以在需要时动态插入到内核中的代码
2、编译安装内核和模块
(1) 拷贝.confg文件:
执行#cp /boot/config-,然后按下Tab键,系统会自动填上该目录下符合条件的文件名,然后继续输入 .config,目的是使用在boot目录下的原配置文件。
不执行这一步的话,后面make的时候会提示找不到.confg文件。
如果在上一步配置了内核的话应该是会自动生成.config文件,但这里本人只是执行了一次#make menuconfig命令并没有配置内核。
(2) 建立编译时所需的从属文件:
#make dep
根据上一步所选择的选项,建立文件的依赖关系。
(3) 清除内核编译的目标文件 :
#make clean
清理一些不必要的文件,如果你在上次编译的基础上,删去了一些选项,建议你执行这一步操作,否则,就没有必要了。
(4) 编译安装内核和模块:
【本机替换内核】
1)编译内核和模块:
#make –j4
生成内核模块和vmlinuz,initrd.img,Symtem.map文件。
注:#make相当于分别执行#make bzImage 和#make modules,由于是本机替换内核,所以无需分开执行。
这一步所需的时间较长,为了加快编译速度,我们可以加上“-j”选项,后面跟的数字是jobsnum ,建议设置为 CPU 核心数 + 1,jobsnum值可以由命令” cat /procuinfo |sed -n '/^processor/p' |wc -l”获得。
2)安装模块:
#makemodules_install
编译成功后,系统会在b/modules目录下生成一个3.12.5子目录,里面存放着新内核的所有可加载模块(即将编译好的modules拷贝到b/modules下)。
3)安装内核:
#makeinstall
即复制.config,vmlinuz,initrd.img,System.map文件到/boot目录、更新grub。对于RedHat系统以下三个grub文件自动会更新,默认启动新内核。
/etc/grub.conf
/boot/grub/menu.lst
/boot/grub/grub.conf
注:前两个配置文件是第三个的软连接。
Ubutun和Debian系统是/boot/grub/grub.conf文件。
4)重启系统:
#reboot
【非本机替换内核】
在这里也可以像本机替换内核一样直接执行#make,但本文将编译内核和编译模块分开来执行,但原理和结果是一样的。
1)编译内核:
#make bzImage
内核编译成功后,会在源码树根目录即linux-3.12.5/arch/x86_64/boot/目录中生成一个新内核的映像文件bzImage。
注:对于大内核(比如需要SCSI支持),make bzImage (推荐)
对于小内核,make zImage。
2)编译模块:
#make modules
编译可加载模块(即内核选项中选择为M的选项),以便将来使用insmod命令进行加载。编译时间跟M选项的数量有关。
3)安装模块:
#make modules_install
即将编译好的modules拷贝到b/modules下。
4)安装内核:
由于不是本机替换内核,所以我们需要将新生成的内核文件拷贝到要替换内核的机器上。需要拷贝的内核文件为主要有4个,分别是:.config,bzImage,System.map 和系统b/modulesnux-3.12.5目录。
具体操作如下:
(1)将生成的linux-3.12.5/.config 拷贝到要替换内核系统的/boot下,并重命名为config-3.12.5
(2)将生成的linux-3.12.5/arch/x86-64/bootImage 拷贝到要替换内核系统的/boot下,并重命名为vmlinuz-3.12.5(注:这里需特别注意拷贝后的文件名变为vmlinuz-x.x.x)。
(3)将生成的linux-3.12.5/System.ap 拷贝到要替换内核系统的/boot下,并重命名为System.map-3.12.5
(4)将make modules_install生成的系统目录b/modulesnux-3.12.5 拷贝到要替换内核系统的b/modules下。
(5)在要替换新内核的系统的b/modules目录下执行以下命令:
#update-initramfs-c -k3.12.5,生成/boot/initrd.img-3.12.5
#update-grub(或#update-grub2), 更新启动加载文件。
注:RedHat系统貌似是没有以上两个更新命令,所以以上更新内核方法适合Ubuntu或Debian系统。
那RedHat系统怎么更新内核呢?建议使用上一种【本机替换内核】方法直接make install安装,使用【非本机替换内核】方法不太方便,但这里也做一个介绍,我们可以手动更新内核启动文件。(当然你也可以手动下载一个grub安装包并安装,再使用update-grub)。
具体如下(将第(5)步替换成下面操作):
RedHat系统中有三个配置文件/etc/grubnf;/boot/grub/menu.lst;/boot/grub/grub.nf
前两个都是第三个的连接,所以我们只需要修改/boot/grub/grubnf启动配置文件即可。
内容如下:
title 显示在启动菜单上的名称
root 根文件系统挂载分区,根据自身系统而定,可以仿照旧版本内核填写。
kernel 压缩过的内核文件名
initrd 根文件系统文件名
如:
titleMy new kernel
root (hd0,0)
kernel/bootmlinuz-x.y.z
initrd/boot/initrd-x.y.z.img
在红帽系统上直接修改grub启动文件的方法本人没有亲试,这部分内容是参照文章http://wenku.baidu.com/view/cb16a8fdc8d376eeaeaa3.htl所写的,具体的可以看原文。
本人系统的/boot/grub/grub.conf中新增内核内容如下:
title Red Hat Enterprise LinuxServer (3.12.5)
root (hd0,0)
kernel mlinuz-3.12.5 orroot=/dev/……
initrd /initramfs-3.12.5.img
然后重新生成ram磁盘:
如果您的系统中的/etclo.conf没有使用了ram磁盘选项initrd,略过
如果您的系统中的/etclo.conf使用了ram磁盘选项initrd,
使用mkinitrd initrd-内核版本号 内核版本号命令重新生成ram磁盘文件,例如我的Redhat 6.2:
mkinitrd initrd-3.12.5 3.12.5
之后把/etclo.conf中的initrd指向新生成的initrd-3.12.5文件:
ram磁盘能使系统性能尽可能的优化,具体参考/usrcnux/Documents/initrd.txt文件
5)重启系统:
#reboot
3、几个重要的Linux内核文件介绍
(1).config
使用make menuconfig 生成的内核配置文件,决定将内核的各个功能系统编译进内核还是编译为模块还是不编译。
(2)vmlinuz 和 vmlinux
vmlinuz是可引导的、压缩的内核,“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制,Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。
vmlinuz是可执行的Linux内核,vmlinuz的建立有两种方式:
一是编译内核时通过“make zImage”创建,zImage适用于小内核的情况,它的存在是为了向后的兼容性;
二是内核编译时通过命令make bzImage创建,bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”,bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码,所以你不能用gunzip 或 gzip –dc解包vmlinuz。内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。 vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。
(3)initrd.img
initrd是“initial ramdisk”的简写。
initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。比如initrd- 2.4.7-10.img主要是用于加载ext3等文件系统及scsi设备的驱动。如果你使用的是scsi硬盘,而内核vmlinuz中并没有这个 scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的b/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题,initrd-2.4.7-10.img是用gzip压缩的文件。initrd映象文件是使用mkinitrd创建的,mkinitrd实用程序能够创建initrd映象文件,这个命令是RedHat专有的,其它Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd
(4)System.map是一个特定内核的内核符号表,由“nm vmlinux”产生并且不相关的符号被滤出。
下面几行来自/usrcnux-2.4/Makefile:
nm vmlinux | grep-v '(compiled)|(.o$$)|( [aUw] )|(..ng$$)|(LASH[RL]DI)' | sort >System.map
在进行程序设计时,会命名一些变量名或函数名之类的符号。Linux内核是一个很复杂的代码块,有许许多多的全局符号, Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或函数名,比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变量。 对于使用计算机的人来说,更喜欢使用那些像size_t BytesRead这样的名字,而不喜欢像c0343f20这样的名字。内核主要是用c写的,所以编译器/连接器允许我们编码时使用符号名,而内核运行时使用地址。 然而,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号,这由符号表来完成,符号表是所有符号连同它们的地址的列表。
Linux 符号表使用到2个文件: /proc/ksyms 、System.map 。/proc/ksyms是一个“proc file”,在内核引导时创建。实际上,它并不真正的是一个文件,它只不过是内核数据的表示,却给人们是一个磁盘文件的假象,这从它的文件大小是0可以看 出来。然而,System.map是存在于你的文件系统上的实际文件。当你编译一个新内核时,各个符号名的地址要发生变化,你的老的System.map 具有的是错误的符号信息,每次内核编译时产生一个新的System.map,你应当用新的System.map来取代老的System.map。
虽然内核本身并不真正使用System.map,但其它程序比如klogd, lsof和ps等软件需要一个正确的System.map。如果你使用错误的或没有System.map,klogd的输出将是不可靠的,这对于排除程序故障会带来困难。没有System.map,你可能会面临一些令人烦恼的提示信息。 另外少数驱动需要System.map来解析符号,没有为你当前运行的特定内核创建的System.map它们就不能正常工作。 Linux的内核日志守护进程klogd为了执行名称-地址解析,klogd需要使用System.map。System.map应当放在使用它的软件能够找到它的地方。执行:man klogd可知,如果没有将System.map作为一个变量的位置给klogd,那么它将按照下面的顺序,在三个地方查找System.map: /boot/System.map 、/System.map、/usrcnux/System.map
System.map也有版本信息,klogd能够智能地查找正确的映象(map)文件。
(二)打包替换内核
打包替换新内核使用的是make-kpkg命令,所以此方法只适合支持make-kpkg命令的系统版本,一般适合Ubuntu、Debian等系统,不适合RedHat系统。
1、定制内核
#make mrprobe ,清理源代码树。
#make menuconfig ,配置内核。
2、打包内核
(1)拷贝.confg文件:
执行#cp /boot/config-,然后按下Tab键,系统会自动填上该目录下符合条件的文件名,然后继续输入 .config,目的是使用在boot目录下的原配置文件。
不执行这一步的话,后面make的时候会提示找不到.confg文件。
如果在上一步配置了内核的话应该是会自动生成.config文件,但这里本人只是执行了一次#make menuconfig命令并没有配置内核。
(2)编译打包内核
#make-kpkg --initrd - -append-to-version=-pyh - -revision=zxxiong.0716 -j 4kernel_image kernel_headers
执行完以上命令后将在上一级目录生成两个.deb包:
头文件包:linux-headers-3.12.5-pyh_zxxiong.0716_amd64.deb
内核包:linux-image-3.12.5-pyh_zxxiong.0716_amd64.deb
【--initrd】选项会让make-kpkg自动帮我们生成initramfs;
【--revision】会给生成的deb文件加上一个版本信息。这个参数只是影响到文件名,如果不指定,默认会是“10.00.Custom”;
【--append-to-version】也是一种版本信息,它不仅出现在deb安装包的文件名里,也会影响到kernel的名称,比如本例中,内核更新完成之后,用“uname -r”察看会得到“3.12.5-pyh”;
【kernel_image】表示生成内核和默认模块的安装包。
【kernel_headers】这样make-kpkg会生成一个内核头文件的安装包。
如果我们用普通用户来执行make-kpkg,需要加上fakeroot运行
#fakeroot make-kpkg --initrd - -append-to-version=-pyh - -revision=zxxiong.0716 -j 4 kernel_image kernel_headers
(注:需要设置平台 如-amd64在这里配置文件已经默认配置了,所以这里不用加,选项kernel_image是生成内核.deb包,选项kernel_headers是生成头文件.deb包,这两个选项可以只使用一个)
(3)安装内核
将上面生成的.deb包拷贝到需要替换内核的机器上,执行以下命令:
#dpkg –i linux-headers-3.12.5-pyh_zxxiong.0716_amd64.deblinux-image-3.12.5-pyh_zxxiong.0716_amd64.deb (接上一行)
或者直接在deb包所在目录执行:#dpkg –i ./*.deb
执行命令之后则会自动更新/boot目录下的文件(即自动执行命令:# update-initramfs -c -k3.12.5 和#update-grub2),然后重启系统并选定加载的内核就可以了,还可以修改/boot/grub/grub.cfg配置文件中的 set default=”0”, 默认为0,安装完后查看该文件新加载的内核是第几项就设置为几(从0开始),这样则不需要在开机时选择启动第几项了。
(5) 重启系统
#reboot
以上就是系统大全给大家介绍的如何使的方法都有一定的了解了吧,好了,如果大家还想了解更多的资讯,那就赶紧点击系统大全官网吧。
本文来自系统大全http://www.win7cn.com/如需转载请注明!推荐:win7纯净版
相关文章
- win11如何添加控制面板?win11控制面板快捷方式添加方法
- win11如何设置绿色护眼模式?win11绿色护眼模式开启教程
- win11开始菜单怎么固定软件?win11开始菜单固定软件设置方法
- win10不显示新安装硬盘怎么办?win10新安装硬盘找不到解决方法
- win10分辨率无法设置怎么办?win10分辨率不能修改解决方法
- win10如何修改开机问候语?win10系统开机问候语更改教程
- win7电脑怎么整理磁盘碎片?win7系统磁盘碎片整理操作方法
- win7系统修改用户名后无法登录账号怎么解决?
- 360浏览器如何开启桌面搜索栏?360浏览器桌面搜索栏启动教程
- Word怎么切换成正常模式?Word兼容模式修改为正常模式教程
系统下载排行榜71011xp
番茄花园 GHOST WIN7 SP1 X64 快速稳定版 V2017.03 (64位
2深度技术 GHOST WIN7 SP1 X64 稳定安全版 V2017.02(64位
3雨林木风 GHOST WIN7 SP1(32位)装机版 V2017.03
4深度技术 GHOST WIN7 SP1 X86 专业装机版 V2017.03(32位
5电脑公司 GHOST WIN7 SP1 X86 经典旗舰版 V2017.03(32位
6深度技术 GHOST WIN7 SP1 X86 稳定安全版 V2017.02
7深度技术 GHOST WIN7 SP1 X64 专业装机版 V2017.03(64位
8电脑公司 GHOST WIN7 SP1 X64 经典旗舰版 V2017.03(64位
9电脑公司 GHOST WIN7 SP1 X64 新春贺岁版 V2017.02(64位
10电脑公司 GHOST WIN7 SP1 X86 新春贺岁版 V2017.02(32位
win10系统下载 Win10 1607 精简安装版 LTSB长期服务版
2Win10专业工作站版最新镜像 V2022.06
3微软原版Win10 ISO镜像64位(win10纯净版)
4深度技术 Ghost Win10 64位 国庆特别版 V2021.10
5电脑公司Ghost Win10 64位装机版V2017.03
6雨晨 Win10 1703 15063.250 64位 极速精简版
7JUJUMAO Win8.1 Up3 X64 极速精简版v2019.11
8win10系统下载 稳安快 Win10 x64 极速精简版 V1.0
9lopatkin Win10专业精简版 V2022.05
10Win10 21H2 纯净版镜像 V2021
Win11PE网络纯净版 V2021
2风林火山 Ghost Win11 64位 专业正式版 V2021.10
3Win11官方纯净版 V2021
4Win11 23H2 25115 官方原版镜像 V2022.05
5新一代系统 JUJUMAO Win11专业版 64位 v2021.08
6雨林木风 Ghost Win11 64位 正式版 V2021.10
7微软MSDN原版Win11系统 V2021
8Win11 22000.282正式版镜像 V2021.10
9深度技术 Ghost Win11 64位 专业版 V2021.10
10微软Win11游戏系统 V2021.10
深度技术 GHOST XP SP3 电脑专用版 V2017.03
2深度技术 GGHOST XP SP3 电脑专用版 V2017.02
3Win7系统下载 PCOS技术Ghost WinXP SP3 2017 夏季装机版
4萝卜家园 GHOST XP SP3 万能装机版 V2017.03
5番茄花园 GHOST XP SP3 极速体验版 V2017.03
6雨林木风 GHOST XP SP3 官方旗舰版 V2017.03
7电脑公司 GHOST XP SP3 经典旗舰版 V2017.03
8雨林木风GHOST XP SP3完美纯净版【V201710】已激活
9萝卜家园 GHOST XP SP3 完美装机版 V2016.10
10雨林木风 GHOST XP SP3 精英装机版 V2017.04
热门教程
装机必备 更多+
重装工具