Linux添加与删除内核

欢迎关注公众号:闲余说

添加内核

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

  1. 尝鲜新功能
  2. 原来的内核比较臃肿
  3. 和硬件兼容
  4. 特殊需求

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

编译新内核

准备工作

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

编译

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

清理

本步骤主要是清理代码中的***.o.config等以前编译过程中产生的文件,而这些文件在不同的机器是不同的,所以必须清除掉。如果是新下载的内核是不用执行该步骤的。总之,这一步也并非必须的,但是做了终究没有什么坏处。具体命令如下(本命令执行目录为/usr/src/linux-3.19.8/***,如无特别说明下同):

# make mrproper
配置3

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

  1. 直接拷已有的***.config文件,该文件存在于/boot/目录下,当然并不叫.config***,例如,笔者系统中就是***config-3.13.0-32-generic ***,如图
    config
    图1 config
    可执行如下命令来进行拷贝
#cp /boot/config-3.13.0-32-generic  ./.config
  1. 更具自己的需求重新配置,这时会在当前目目录下生成***.config***文件,具体如何配置方法很多,这里只给出常用方式:
# make menuconfig

执行该命令后会弹出一个基于ncurses图形库的图形界面,如图:
menuconfig
图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

该条命令可以给出系统当前使用的内核版本的详细信息如:
查看当前内核版本
图3 查看当前内核版本
2. 查看系统中已经安装了的内核

# dpkg --get-selections | grep linux

该命令可以查看系统中已经安装过的所有内核,如:
查看所有已经安装了的内核
图4 查看所有已经安装了的内核
如上图所示,在该图列表中含image 部分是已经安装过的内核,由以上两步可以确定在图 4 中而不在图 3 中的内核版本是可以删除的。
3. 删除内核
完成1-2两步后,我们可以确定将要被删除的内核版本。

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

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

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

# dpkg --get-selections|grep linux

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

方法二

  1. 直接删除***/usr/src/***下对应要删除的内核代码。
  2. 删除***/boot/*** 下对应的内核相关文件,比如,笔者要删除版本为3.19.8的内核,可执行如下命令
# cd /boot/
# rm -f *3.19.8* 

这样,就可以将相应的config、System.map、vmlinuz等文件删除。
3. 更新grub。本步和方法一相同,不再赘述。


  1. ftrace https://www.ibm.com/developerworks/cn/linux/l-cn-ftrace/ ↩︎

  2. Linux系统替换新内核 http://blog.csdn.net/star_xiong/article/details/17357821 ↩︎

  3. Make Menuconfig详解 http://blog.csdn.net/xuyuefei1988/article/details/8635539 ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值