linux 内核实践,Linux 内核添加与删除实践

概述

本文将一步一步介绍如何根据需求配置编译符合自己需求的 Linux内核,以及如何安装编译好的内核和删除不需要的内核。

本文实际操作是在 Ubuntu 操作系统上进行的,其它 Linux 发行版可以参考本方法做适当调整完成内核的添加和删除。

添加内核

添加内核一般来说并不需要,当然也不是完全不需要。安装新内核大体因为以下几种需求:

尝鲜新功能

原来的内核比较臃肿

和硬件兼容

特殊需求

笔者安装新内核就是处于特殊需求。笔者所做的工作是需要用到Linux自带的分析工具——ftrace。该工具中的一些专门性的工具(姑且叫插件吧)在发行版本中并没有编译到内核中去,所以笔者需要重新编译内核将这些插件勾选上,并编译后的内核安装到自己的系统中。整个过程虽说只有简单几步而已,但是笔者还是走了不少弯路。比如,笔者最开始是不想在自己的机器上直接安装新内核的,毕竟有些环境是笔者费了九牛二虎之力才部署好的,再加上对现有系统添加新内核也是大姑娘出嫁——头一回,万一搞不好就废了。所以开始是在virtualbox上搞的,可是在对内核进行配置时执行 make menuconfig 总是提示 curses.h 找不到,在网上扒了半天,安装了和 curses.h 相关的所有库也不行,也是够了。后来,我只好在物理机上搞了,结果还是出现了一些奇葩问题,比如删除内核方法中的第二个就是笔者惨痛的经历。当时笔者是安装好新内核后进入系统所有外设都不可用,只好进入原来的系统中删除新安装的内核,结果就是方法二中的情况了。后来回想起来应该是没有执行 make modules_install 导致驱动啥的都没装。

编译新内核

准备工作

准备工作当然是下载相应版本的内核了,内核官网 www.kernel.org。当然下载方法是多种多样的自不必说,下载后可以将内核放在任何你想放的地方。不过说是这么说,其实最好还是放到 /usr/src 下面,毕竟内核代码都在那呢。当然也有人放到了 /opt/ 下面(可以参考这篇文章:Linux系统替换新内核),这也未尝不可,就当安装一个大型程序嘛。毕竟在执行 # make install 时会把相应的文件拷贝到对应的目录下,源码放在哪并不影响安装内核。

编译

在安装之前需要对内核进行编译,这过中住需要对代码进行清理、配置等工作。

清理

本步骤主要是清理代码中的.o和.config等以前编译过程中产生的文件,而这些文件在不同的机器是不同的,所以必须清除掉。如果是新下载的内核是不用执行该步骤的。总之,这一步也并非必须的,但是做了终究没有什么坏处。具体命令如下。

在本文中,该命令执行目录为/usr/src/linux-3.19.8/,linux-3.19.8是笔者需要安装的新内核,如无特别说明下同。

# make mrproper

配置

本步骤主要是为了配置编译选项,比如哪些模块需要编译到内核中去,哪些是不需要的,哪些是编译成在需要时动态的插入到内核中去的。通过本步骤将生成一个.config文件,该文件记录我们设定的一下规则。大体上,本步可以分两种情况来考虑或者说来解决:

1.直接拷已有的 .config 文件,该文件存在于 /boot/ 目录下,当然并不叫 .config,例如,笔者系统中就是 ***config-3.13.0-32-generic ***,笔者系统中内核原来版本是 3.13.0,如图:

bfa976e5f78ae9c14fa5a861d532283d.png

图1 config

可执行如下命令来进行拷贝:

#cp /boot/config-3.13.0-32-generic ./.config

2.根据自己的需求重新配置,这时会在当前目录下生成 .config 文件,具体如何配置方法很多,这里只给出常用方式:

# make menuconfig

执行该命令后会弹出一个基于ncurses图形库的图形界面,如图。

0fa8a13ca1ef7cf584fb3deabc11f7f2.gif

图2 menuconfig

当然,如果你只是想使用新内核的话,选择默认就好,最后保存就可以生成一个 .config 文件的。由于笔者需要使用 ftrace 这款工具,所以还是需要稍加配置,但这不是本文主题,故略去。

编译

配置完成后,就可以对内核进行编译了。这个过程有点长,你可以干点其他的事情了。具体命令如下:

# make

#make 命令相当于执行了 # make bzImage 和 # make modules,由于是本机替换内核,所以无需分开执行。这一步所需的时间较长,为了加快编译速度,我们可以加上 “-j” 选项,后面跟的数字是 jobsnum ,建议设置为 CPU 核心数 + 1,jobsnum 值可以由命令 cat /proc/cpuinfo |sed -n '/^processor/p' |wc -l 获得。

安装内核

安装模块

执行如下命令:

# make modules_install

编译成功后,系统会在 /lib/modules 目录下生成一个 3.19.8 子目录,里面存放着新内核的所有可加载模块(即将编译好的 modules 拷贝到 /lib/modules 下)。

注意: 模块安装一定要在内核安装之前,否则,安装内核时会提示致命错误——在 /lib/modules 找不到对应的模块。

安装内核

执行如下命令:

# make install

该命令的作用是将 .config,vmlinuz,initrd.img,System.map 文件到 /boot/ 目录、更新 grub。默认启动新内核。

删除内核

方法一

1.查看当前系统使用的内核

# uname -a

该条命令可以给出系统当前使用的内核版本的详细信息如:

0b90c7dd8377bf5f033c8e8c694c2397.png

图3 查看当前内核版本

2.查看系统中已经安装了的内核

# dpkg --get-selections | grep linux

该命令可以查看系统中已经安装过的所有内核,如:

07f40bb74046aa3e408941358e44a318.png

图4 查看所有已经安装了的内核

如上图所示,在该图列表中含image 部分是已经安装过的内核,由以上两步可以确定在图 4 中而不在图 3 中的内核版本是可以删除的。

3.删除内核

完成1-2两步后,我们可以确定将要被删除的内核版本。

# apt-get remove linux-image-****-generic

4.更新 grub

经过以上三步已经很完整的删除了内核版本,但是,这时候开机时还会有被删除内核的选项,这个对于处女座的同志们来说,估计是不能忍的。我们可以通过更新grub.cfg的内容来解决这个问题。

# update-grub

经过以上四步后,就算彻彻底底的删除了要删除的内核了。

然而,事情往往并不是总那么顺利。比如,笔者本人就遇到这样的奇葩问题:在安装内核后,通过

# dpkg --get-selections|grep linux

命令就找不到刚才安装的内核。所以上面的方法看来是不行了,那么,只能使用简单粗暴的方法了。

方法二

1.直接删除 /usr/src/ 下对应要删除的内核代码。

2.删除 /boot/ 下对应的内核相关文件,比如,笔者要删除版本为 3.19.8 的内核,可执行如下命令:

# cd /boot/

# rm -rf *3.19.8*

这样,就可以将相应的 config、System.map、vmlinuz 等文件删除。

3.更新 grub。本步和 方法一 相同,不再赘述。

总结

至此,我们已经在 Ubuntu 操作系统上完成了对内核的配置、编译、安装以及删除的操作。其他 Linux 发行版也可以通过类似的方式对内核进行安装和删除,读者朋友可以自己动手实践起来。

本文首发于 GitChat,未经授权不得转载,转载需与 GitChat 联系。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值