zoukankan      html  css  js  c++  java
  • Linux实训——编译升级Linux内核

    山东科技大学
    信息工程系

    内容说明:本篇文章是《嵌入式操作系统》实训报告的第一部分,实现了编译和升级Linux内核
    《嵌入式操作系统》实训报告内容介绍:
    第一部分:编译升级系统Linux内核
    第二部分:搭建HTTP服务器
    第三部分:搭建动态网站
    完整实验报告PDF文件

    一、编译升级Linux内核

    1.1 实验原理

    1.1.1 Linux内核

      Linux内核是Linux操作系统的核心,主要包括文件系统模块、内存管理模块、进程管理模块、进程间通信模块和网络接口模块5大模块。

    表-Linux内核各模块功能
    模块 功能
    文件系统模块 主要负责文件系统的管理,Linux内核支持ext2、ext3、ext4、gfs、及网络文件系统nfs、cifs等
    内存管理模块 主要负责内存的资源分配
    进程管理模块 主要负责进程的资源分配协调管理
    进程间通信模块 主要负责协调进程之间的资源分配关系和进程资源的竞争分配
    网络接口模块 主要负责对系统进行远程管理

    1.1.2 升级内核

      Linux的内核承担着Linux操作系统的最为核心的任务,是其它程序和硬件等运行过程中的管理者:它要管理所有进程的内存,保证它们都能平等得到处理器的时隙。此外,它还提供程序和硬件之间的接口等功能。
      通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。

    1.2 实验过程记录

    1.2.1 安装Ubuntu18.04虚拟环境

      本次实验选用VM VirtualBox虚拟机,相较于VMwareVirtualBox虚拟机的优势在于:开源软件,免费使用;中文界面;占用空间较小等。
      本次实验选用系统镜像为:ubuntu-18.04.1-desktop-amd64.iso
    VM VirtualBox虚拟机软件中,安装Ubuntu18.04镜像文件,新建Ubuntu虚拟机。等待其自动安装完成即可。
    在这里插入图片描述

    图 VM VirtualBox安装Ubuntu虚拟环境

    1.2.2 软件更新

      安装Ubuntu虚拟环境成功后,首先使用sudo apt-get update命令,更新系统中的软件源。apt-get update命令会从存储库下载软件包列表并“更新”它们,以获取有关软件包及其依赖项的最新版本的信息。
    在这里插入图片描述

    图 更新软件包列表

    1.2.3 查看当前内核版本

      为了能够下载合适的内核版本,在更新完成后,需要使用命令umane –r查看当前系统的内核版本。
    在这里插入图片描述

    图 当前内核版本

      输入命令查看当前的Linux内核版本,可以看到我当前的版本是4.15.0-29-generic

    1.2.4 下载Linux内核

      在GitHub上或其他下载源,下载新版本的Linux内核文件。其中需要注意的是,新版本与当前版本差距不应太大,避免造成更新后硬件不兼容的现象。因为我的当前内核版本为4.15,所以我找到了内核版本为4.16的内核文件。
    在这里插入图片描述

    图 新版本内核列表

      可以看到,有两种版本的内核压缩包。可以选择任意一种类型下载,只是解压方式不同。本次选择tar.gz文件进行下载。直接在虚拟机Linux环境中的Firefox浏览器中进行下载即可。
    在这里插入图片描述

    图 内核下载过程

      Firefox的默认下载位置是~/Download文件夹,等待下载完成,可在该文件夹下查看内核文件包。
    在这里插入图片描述

    图 内核包下载位置

    1.2.5 安装编译工具

      由于编译内核的过程需要使用相关的编译工具,在编译之前需要对此进行安装。现在安装make ,gcc, make-kpkg,等编译内核相关的工具,以做好编译的准备工作。
    在这里插入图片描述

    图 安装编译工具

      安装部分编译工具时,会出现下图中的配置选项,选择默认的配置即可。
    在这里插入图片描述

    图 编译工具配置菜单

      之后,检查makegcc是否安装。
    在这里插入图片描述

    图 检查相关工具安装状态

      可以看到,相关工具已经安装完成。

    1.2.6 解压内核源码

      进入到/usr/src/文件夹下,查看当前文件夹下的文件,将刚才下载的Linux内核压缩文件拷贝到当前目录下,以便于解压。
    在这里插入图片描述

    图 转移内核文件

      新建一个kernel目录,用于存放内核解压之后的文件。使用tar工具解压内核压缩文件至kernel目录。
    在这里插入图片描述

    图 解压内核压缩包

      解压完成之后,进入到kernel目录,查看该目录下的文件。
    在这里插入图片描述

    图 查看内核文件

      可以看到,内核解压后生成了一个名为linux-4.16的文件夹,该文件夹即为所需的内核文件。下面进入到该文件夹下,进行内核编译的准备工作。

    1.2.7 拷贝配置文件

      编译的过程需要使用相关的配置文件,可以选择将Linux原有的配置文件拷贝到当前目录下,或者在本机重新编译生成新的配置文件。本步骤采用第一种方式,复制原有配置文件至指定目录。复制结束后,查看是否拷贝成功。
    在这里插入图片描述

    图 复制配置文件

      由于.config文件是隐藏文件,所以需要加-a参数,才能看到该文件。

    1.2.8 配置内核选项

      本步骤与第7步作用相同。第7步中,使用了原有的配置文件,直接复制到了工程文件夹下。同样可以在机器上,使用make编译生成新的配置文件,本步骤即为此方法。在使用make工具,编译menuconfig目标时,发生下图所示的错误,其原因为未安装bison工具,使用图中的命令安装该bison工具,问题得以解决。
    在这里插入图片描述

    图 菜单编译配置文件

      再次编译menuconfig目标时,出现如图所示的菜单界面,此时不需进行其余配置,直接选择save。选择save后,出现第二图中所示的界面,用于填写配置文件名,同样不需修改,直接使用默认的.config文件名即可。
    在这里插入图片描述

    图 Linux内核配置菜单

    在这里插入图片描述

    图 设置配置文件名

      选择”OK”并退出即可。

    1.2.9 开始编译内核

      Linux内核可以使用makemake-kpkg等工具进行编译。本次实验使用make-kpkg工具来进行内核的编译。该编译工具的主要使用方法如下图所示。
    在这里插入图片描述

    图 make-kpkg使用介绍

      可以看到,这个make-kpkg需要跟着optionstarget,其中一个选项--append-to-versions是指定内核版本的附加内容,追加作为内核名称的一部分,我将该参数指定为zhjv1。第二个参数是编译之后生成的目标,也就是之后会生成的编译之后的文件,现将目标设为kernel-imagekernel-headers
    在这里插入图片描述

    图 尝试编译内核

      运行时,发现make-kpkg comman not found.说明该工具未安装,使用命令安装该工具。
    在这里插入图片描述

    图 查找错误原因

      但是命令显示,该工具已经安装。原来是我将make-kpkg错写成了make-kgkg,下面改正错误,重新运行。
    运行过程中,出现如下图所示的错误。
    在这里插入图片描述

    图 报错信息

      经过查阅资料,发现应该是缺少相关的编译工具,现安装相关工具,如下图所示。
    在这里插入图片描述

    图 安装缺少的编译工具

      安装完成后,返回linux-4.16文件夹,重新进行内核编译。经过非常漫长(整个编译过程持续5h29min)的过程,终于编译完成。
    在这里插入图片描述

    图 编译成功及其用时

      编译结束之后,在当前目录下的上一级目录,也就是/usr/src/kernel目录下,会生成两个内核文件。这两个文件就是我们需要的内核文件包。其中,linux-headers为Linux内核头文件的软件包,linux-image为Linux内核镜像文件包。
    在这里插入图片描述

    图 编译生成的文件

    1.2.10 安装编译好的内核包

      在/usr/src/kernel目录下,使用dpkg工具安装编译好的内核包文件,先安装linux-image镜像软件包。
    在这里插入图片描述

    图 安装镜像内核包

      之后安装linux-headers头文件软件包:
    在这里插入图片描述

    图 安装头文件内核包

      现在我使用uname命令,查看当前的内核版本。
    在这里插入图片描述

    图 当前内核版本

      现在还是4.15.0版本,并没有升级到4.16版本。

    1.2.11 关机重启

    为了刷新内核版本,现在重新启动虚拟机。启动之后,继续使用uname命令查看当前的内核版本。
    在这里插入图片描述

    图 内核升级成功

      Nice!可以看到,当前内核版本已经升级为4.16.0。与此同时,内核的名称还追加了我编译之前添加的版本识别参数zhjv1

    1.2.12 卸载多余的内核版本

      现在来查看电脑中存在的各版本的内核。
    在这里插入图片描述

    图 现存的内核版本

      可以看到,现在电脑中4.15版本的内核依然是安装状态,因为4.16版本的内核已经安装,4.15版本的可以卸载掉了。现在使用apt工具卸载4.15版本的内核。
    在这里插入图片描述

    图 报错信息

      可以看到,我使用apt管理工具,分别使用了removepurge两个参数,都未能正确卸载旧内核。原因大概是,有其他进程正在使用dpkg或是占用了apt进程。
      在网上查找的资料中,解决办法是更新引导,但更新引导之后,并没有起作用。现在看来,与引导更新的关系应该不大。
    在这里插入图片描述

    图 更新引导

      没办法,我重启了虚拟机。再次尝试卸载旧内核,发现此时已经允许卸载。
    在这里插入图片描述

    图 卸载旧内核

      卸载linux_image完成之后,旧版本的linux_headers以相同的操作卸载。
    在这里插入图片描述

    图 卸载旧版本头文件内核包

      卸载进程结束后,再次查看现有的linux内核版本。
    在这里插入图片描述

    图 查看内核列表

      可以看到,虽然刚才已经卸载了linux-image-4.15.0内核,但其依然存在于电脑中,只是deinstall未安装罢了。想要彻底删除这些未安装的内核,还需要使用dpkg工具。
    在这里插入图片描述

    图 查看内核列表

      使用dpkg –P命令,删除未安装的linux-image-4.15.0内核,结果出现报错。之后再次查看当前存在的内核,发现该内核已经消失。我认为报错的原因在于,dpkg工具未及时更新现存的内核版本,在发现错误后才算进行了一次更新。
      接着继续删除多余未安装的linux-modules,卸载了多余的linux-image-4.15.0-51-generic。再次查看当前的内核版本。
    在这里插入图片描述

    图 查看内核列表

      最终,我删除了不必要的4.15内核版本的文件,仅保留了未涉及的4.15内核文件和4.16版本的内核文件。现在再次查看当前内核版本,确保是4.16版本。
    在这里插入图片描述

    图 最终内核版本

      第一个实验顺利结束。

  • 相关阅读:
    Node.js 安装配置
    ITerm2配置-让你的mac命令行更加丰富高效
    ECharts 图表工具
    Vue 安装
    element-ui 安装
    mysql高级查询
    数据库第三章 参考
    DML和DQL 总结
    数据库第二章 参考答案
    数据库编程技术 第一章
  • 原文地址:https://www.cnblogs.com/ZHJ0125/p/12904514.html
Copyright © 2011-2022 走看看