内核编程入门——编译内核

Linux内核编译安装笔记

内核版本与下载

  1. 版本号 4.9.16
  2. 下载地址

预备知识

  • menuconfig与Makefile
    • Linux内核根目录下的scripts文件夹
      scripts文件夹存放的是跟make menuconfig配置界面的图形绘制相关的文件

    • arch/$ARCH/Kconfig文件、各层目录下的Kconfig文件
      用于不同硬件平台生成整个配置界面选项(Kconfig是整个linux配置机制的核心)

    • Linux内核根目录下的的.config文件、arch/$ARCH/configs/下的文件
      通过读取arch/$ARCH/configs/下的一个预定义的配置文件生成界面,在手动配置后生成根目录下的.config文件,用于最终的编译配置

    • Linux内核根目录下的 include/generated/autoconf.h 文件
      当配置保存退出后,会根据.config的信息生成一些make时需要的宏信息,这些宏信息就保存在include/generated/autoconf.h中,用于预编译。

    • Linux内核根目录下的makefile文件、各层目录下的makefile文件
      当我们增加一个功能模块时,在生成include/generated/autoconf.h中的预编译信息的同时,还需要生成编译该功能模块的makefile,并修改它的上层makefile文件。

准备工作

  • 安装make
  • 安装gcc
  • 安装ncurses

编译内核

  • 清理源代码树
    执行make mrproper命令清理源代码树,包括过去曾经配置的内核配置文件.config都将被清除。即进行新的编译工作时将原来老的配置文件给删除,以免影响新的内核编译。(但是一般情况也可以不执行这条命令,因为内核编译是增量编译,清除之后又要从头开始编译,浪费时间).

  • 配置内核
    执行make menuconfig以图形界面配置内核。
    second extended fs suppor为例,使用上下方向键移动光标,拍打空格进行编译进内核模块不选择进行功能制定,对应的图标变化为*M(空格)。进入界面中移动光标选中file system项目,回车进入其中,上下移动光标到second extended fs suppor,使用空格将*改成M,使用左右键去选择保存,。。。退出。

  • 生成依赖关系
    执行make dep

  • 开始编译
    执行make -j4

安装模块和内核

  • 安装模块
    执行make -j4 modules_install。此过程是将模块文件复制到文件系统中相应的目录下。

  • 安装内核
    执行make install。此过程将在目录/boot下生成

    • 内核引导镜像文件vmlinuz,该文件就是对应版本的内核系统,由vmlinux压缩而来。
    • 初始RAM磁盘镜像文件initrd,该文件是一个临时根文件系统,用来支持灵活正确的加载真正的内核系统vmlinuz

修改默认启动版本

  1. 列出当前启动版本
    grub2-editenv list
  2. 列出所有的启动版本
    grep ^menuentry /boot/grub2/grub.cfg | cut -d "'" -f2
  3. 修改启动版本
    grub2-set-default "CentOS Linux ... 7 (Core)"

遇到的问题

CentOS中使用yum install [xxx]安装

  1. 需要bc的程序,尚且不知道那个功能模块需要。
  2. 需要openssl-devel开发库,过滤.config文件后,尚且不知道哪个功能模块需要。

你可能感兴趣的:(杂项,Linux内核)