首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux添加与删除内核

Linux添加与删除内核

作者头像
aneutron
发布2022-08-10 14:18:55
发布2022-08-10 14:18:55
3.8K00
代码可运行
举报
文章被收录于专栏:闲余说闲余说
运行总次数:0
代码可运行

添加内核

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

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

笔者安装新内核就是处于***特殊需求***。笔者所做的工作是需要用到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/***,如无特别说明下同):

代码语言:javascript
代码运行次数:0
运行
复制
# make mrproper
配置3

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

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

图1 config 可执行如下命令来进行拷贝

代码语言:javascript
代码运行次数:0
运行
复制
#cp /boot/config-3.13.0-32-generic  ./.config

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

代码语言:javascript
代码运行次数:0
运行
复制
# make menuconfig

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

图2 menuconfig

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

编译

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

代码语言:javascript
代码运行次数:0
运行
复制
# make

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

安装内核

安装模块

执行如下命令:

代码语言:javascript
代码运行次数:0
运行
复制
# make modules_install

编译成功后,系统会在***/lib/modules***目录下生成一个3.19.8子目录,里面存放着新内核的所有可加载模块(即将编译好的***modules***拷贝到***/lib/modules***下)。注意 : 模块安装一定要在内核安装之前,否则,安装内核时会提示致命错误:在***/lib/modules***找不到对应的模块。

安装内核

执行如下命令:

代码语言:javascript
代码运行次数:0
运行
复制
# make install

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

删除内核

方法一

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

代码语言:javascript
代码运行次数:0
运行
复制
# uname -a

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

图3 查看当前内核版本 2. 查看系统中已经安装了的内核

代码语言:javascript
代码运行次数:0
运行
复制
# dpkg --get-selections | grep linux

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

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

代码语言:javascript
代码运行次数:0
运行
复制
# apt-get remove linux-image-****-generic

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

代码语言:javascript
代码运行次数:0
运行
复制
# update-grub

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

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

代码语言:javascript
代码运行次数:0
运行
复制
# dpkg --get-selections|grep linux

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

方法二

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

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

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

2. http://blog.csdn.net/star_xiong/article/details/17357821

3. http://blog.csdn.net/xuyuefei1988/article/details/8635539

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 闲余说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 添加内核
    • 编译新内核
    • 准备工作
    • 编译
      • 清理
      • 配置3
      • 编译
  • 安装内核
    • 安装模块
    • 安装内核
  • 删除内核
    • 方法一
    • 方法二
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档