实验目的

学习 Linux 内核编译和升级的过程,并从中学习 Linux 内核的组成,掌握排错能力。

实验内容

  1. 安装 Parallels Desktop 并初始化 Linux 虚拟机
  2. 下载新版本 Linux 内核进行编译安装升级

实验过程、结果

  1. 安装 Parallels Desktop,并从网上下载 Ubuntu16.04 镜像(略)
  2. 使用 Ubuntu16.04 镜像新建虚拟机,并做初始化工作
  3. 更新系统软件并查看内核版本
    可以看到Ubuntu16.04默认的内核版本为4.15
  4. 下载内核并进行编译安装升级

    1. https://www.kernel.org/ 查看最新的Linux内核版本为4.19,下载压缩包并拷贝到 /usr/src 目录下
    2. 进入 /usr/src 目录下,解压 cd /usr/src && sudo tar -xvf linux-4.19.149.tar.xz
    3. 进入 linux-4.19.149 目录,执行 tree -dL 1
    4. 文件夹简介
      arch根据cpu架构区分的代码
      block块设备驱动程序
      certs内置证书
      crypto加密,压缩
      drivers设备驱动程序
      fs文件系统
      include头文件
      lib库函数文件
      mm内存管理
      net网络协议代码
      scripts配置脚本
      securitySElinux的模块
      sound音频设备的驱动程序
      virt内核虚拟化

      执行 sudo make menuconfig,遇到报错

      原因是缺少 libncurses-dev 使用命令 sudo apt install libncurses-dev 进行安装后再次运行 sudo make menuconfig,遇到报错

      可以看到出错的位置是 bison: not found 即缺少 bison ,使用命令 sudo apt install bison 解决,再次运行 sudo make menuconfig,遇到报错

      可以看到出错的位置是 flex: not found 即缺少 flex, 使用命令 sudo apt install flex 解决, 再次运行 sudo make menuconfig 无报错

      使用默认配置,选择 Exit 并保存

    5. 编译内核,执行命令 sudo make -j12,遇到报错

      可以看出是缺少 libssl-dev 库,使用 sudo apt install libssl-dev 进行安装后再次执行命令 sudo make -j12,没有遇到报错

    6. 安装内核,依次执行命令

      sudo make modules_install
      sudo make install
    7. 更新 grub 引导后重启

      sudo update-grub2 && sudo reboot
    8. 执行 uname -r 查看内核版本

实验总结

  1. 内核升级必要的包需要哪些?

    答:从排错过程来看,需要libncurses-dev, bison, flex, libssl-dev

  2. 编译内核的步骤是什么?

    答:首先使用命令生成配置文件 .config 实验中采用的是 make menuconfig 即采用基于文本菜单的配置命令,除此之外还有make config 也可以生成 .config 文件,后者是基于文本配置界面的配置命令。然后使用命令 make -j12 开始编译。之后使用命令 make modules_install 进行模块的编译和安装。最后进行 make install 进行安装并使用命令 upgrade-grub2 更新引导。

  3. 在编译过程中可能遇到的问题有哪些,解决的办法是什么?

    缺少依赖包、库,解决办法是安装这些缺少的依赖项。

  4. 你具体遇到了什么困难,怎么解决的?

    没怎么遇到困难。出现的错误都很好解决。

本次实验让我学习了 Linux 内核的编译与升级步骤,了解了内核的组成。

最后修改:2020 年 11 月 24 日
如果觉得我的文章对你有用,请随意赞赏