• Linux 内核构建



    前言

    • Linux集成套件包括多种内核,能够处理各种机器。通过编译内核,选择符合硬件类型的驱动等,可以调整Linux系统,使其更合理地安装到计算机中。
    • 重新编译内核以便实现一些新功能,如将Linux系统设置为一个临时路由器。
    • 使得全世界内核设计者提供的各种为改进性能而设计的内核得到充分利用。

    构建Linux内核

    • Linux官方源代码发布网址:www.kernel.org

    • gzip压缩的.tar.gz包,bzip2压缩的.tar.bz2。

    • Linux源代码分为:

    • 与系统结构相关的部分

    • 与系统结构无关的部分

    • 文档和工具

    在这里插入图片描述

    Linux内核文件组织结构

    在这里插入图片描述

    Linux内核文件说明

    • arch:包含了所有和体系结构相关的核心代码,它的每一个子目录都代表一种被支持的体系结构。
    • include:包含编译核心所需要的大部分头文件,与平台无关的头文件放在 include/linux子目录中。
    • init:包含核心的初始化代码。
    • mm:包含所有独立于CPU体系结构的内存管理代码。
    • kernel:主要的核心代码,实现大多数Linux系统的内核函数,包括进程调度、系统调用等
    • drivers:系统所有的设备驱动程序,每种驱动程序各占用一个子目录。
    • 其它:lib放置核心的库代码;net放置核心与网络相关的代码;lpc包含核心的进程间通信的代码;fs包含文件系统代码;scripts包含用于配置核心的脚本文件。

    Linux内核的makefile文件

    • 源代码树的每个子目录下都有一个makefile文件。
    • 在源代码树的根目录下执行make,则调用顶层makefile文件,它定义了随后要输出到其他makefile的变量,以及向子目录中的每个makefile发出make调用。
    • Script/makefile.build中定义了makefile向下级子目录递归并编译的规则。

    Make命令

    • 一个软件不会仅有一个程序文件,而是由一大堆程序代码。所以除了每个程序与子程序需要写一条编译过程的命令外,还需要写上最终的链接程序。因此使用make这个命令的相关功能可以进行编译过程的简化。

    • 当执行make时,make会在当前的目录下查找Makefile文本文件,Makefile里面记录和源代码如何编译的详细信息。make会自动判别源代码是否经过变动,自动更新执行文件。

    内核源代码的获取方式

      1. 原Linux发行版提供的内核源代码文件
      1. 获取最新的稳定版内核源代码
        内核官网: http://www.kernel.org/
        清华大学镜像:https://mirrors.tuna.Tsinghua.edu.cn/kernel
      1. 保留原本设置:利用patch升级内核源代码

    编译内核过程

    第1步,预处理

    • Linux内核源文件缺省位置:/usr/src/
      从Internet下载最新版本到你创建的主目录。
      如~wxdh
    • 清除以前试图建立内核过程遗留下的多余文件。
      make mrproper

    第2步,配置内核

    • make config:手工逐项配置
    • make menuconfig:菜单选项配置
    • make xconfig: XWindow配置
    • 修改配置文件/linux/.config
    • 注意,make mrproper命令要删除这个文件,可以从/linux/arch/i386/defconfig拷贝复制一个。

    第3步,生成内核

    • 1、make dep:生成相关性
      例如:如果激活“Set Version Information For All Symbols On Modules”选项,那么它为所建立的模块确定其版本信息。
    • 2、make clean:清除一些目录中现有文件,将存储创建的新文件。
    • 3、make bzImage:编译内核本身,花费时间长。对于新内核规模小,可以使用make zImage,如果不确定,最好还是使用bzImage。
      建立/linux/arch/i386/boot/bzImage

    第4步,安装内核

    • 有些集成套件使用LILO作为引导装入程序。
    • /etc/lilo.conf文件中的“image=”
    • su命令超级用户登录,把刚创建的bzImage拷贝到/boot中。
    • cp ~wxdh/linux/arch/i386/boot/bzImage /boot/vmLinuz
    • 修改lilo.conf文件中“image”行。
    • 告诉LILO更新其配置信息:/sbin/lilo

    第5步,建立模块

    • 配置Linux内核时,可将许多选项配置为模块而不是直接放进内核。
    • 每个模块可以分别装入和卸载。
    • /linux目录下
      make modules:创建在配置过程中要求的模块,但是并不安装。
      Make modules_install:将已经完成的模块拷贝到对应该内核版本的/lib/modules/子目录中。

    管理多内核

    • 不同的情况使用不同的内核,lilo.conf文件:
      ……
      delay=15 #15-second delay
      ……
      image=/boot/vnlinux
      label=Linux
      ……
      image=/home/wxdh/bzImage
      Label=TestKernel
      最后,执行/sbin/lilo
      Added Linux * (表示Linux标记为缺省内核)
      Added TestKernel(表示添加新内核)

    第6步 配置grub引导和测试

    • 配置grub引导程序
      /boot/grub/grub.cfg
      设置默认从新内核镜像启动系统
    • 测试
      系统重启,测试当前的内核版本
      uname -a

    总结

    构建Linux内核
    Linux内核文件组织结构
    Linux内核文件说明
    Linux内核的makefile文件
    Make命令
    内核源代码的获取方式
    编译内核过程
    第1步,预处理
    第2步,配置内核
    第3步,生成内核
    第4步,安装内核
    第5步,建立模块
    管理多内核
    第6步 配置grub引导和测试

  • 相关阅读:
    帆软 :0用null 如何设定
    16S全长测序揭示绿头虻肠道微生物及共生细菌
    c#default 运算符
    比Nginx测试桩更方便,ShenYu网关的Mock插件
    【接口测试】JMeter调用JS文件实现RSA加密
    linux安装Yum
    辅导技巧-学习笔记
    【Linux】常用指令
    基于C++的回溯法解决旅行售货员(TSP)问题
    预付费系统在学生公寓用电中的发展前景-Susie 周
  • 原文地址:https://blog.csdn.net/weixin_51422230/article/details/126772932