设为首页收藏本站language 语言切换
查看: 1094|回复: 0
收起左侧

[分享] Linux内核的编译方法与基本原理

[复制链接]
发表于 2022-8-16 10:47:18 | 显示全部楼层 |阅读模式
    今天我们主要来聊一聊,内核中代码的编译方法分析。

    Linux内核从源码到安装使用大致可分三个阶段,配置,编译,安装。配置的过程主要由Kconfig 提供的图形界面完成,也有部分工作由Kbuild 完成。编译的实现机制主要是Kbuild系统,由make命令完成内核编译。内核的安装也是由Kbuild提供的安装脚本再由make 命令执行安装。

第一:Kconfig

    Kconfig文件用于Linux 内核的配置。各目录中的Kconfig一起构成了一个分布式的内核配置数据库,每个Kconfig 分别描述了所属录源文档相关的内核配置菜单,就是我们使用命令make %config (如menuconfig) 后产生的配置菜单,此菜单包含多层,每个层次都是由各个目录中的Kconfig产生的。然后根据用户的需求来选择如何编译内核,将配置结果存到. config中,然后执行Makefile时就会根据. config的结果来实现内核的编译。


1、Kconfig语法分析

    配置文件描述了菜单选项,每行都是以一关键字开头(除了帮助信息)。以下列出主要关键字:
1.jpg


第二:Kbuild

    Kbuild,即Kernel build,用于编译Linux内核文件。Kbuild对makefile进行了功能上的扩充,使其在编译内核文件时更加高效,简洁。



    从 Linux 内核2.6 开始,Linux 内核的编译采用Kbuild 系统,这同过去的编译系统有很大的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的 Makefile:首先编译系统会读取Linux 内核顶层的 Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。

内核Makefile一共包括五部分:
2.jpg




第三:Makefile


1、顶层Makefile分析

     顶层Makefile在编译时是入口点,从整理上组织所有的Makefile文件,并定义终极目标,在这里还定义了与平台无关的很多核心变量与一些很重要的make目标。顶层Makefile位于内核源码的跟目录,下面我们分析顶层Makefile的主要工作。



    顶层Wakefile定义并向环境中输出了许多变量,为各个子目录下的Wakefile传递一些信息。有些变量,比如vmlinux-dirs,不仅在顶层 Makefile中定义并且赋初值,而且在arch/*/Makefile还作了扩充。

3.jpg


2、平台相关Makefile分析

    arch/$(ARCH)/Nakefile定义了所有与平台相关的部分,主要对顶层Makefile 中定义的一些变量作与平台相关的扩展。Linux 最大的特点是支持跨平台,这种跨平台,不像是 JAVA那样运行于一个底层虚拟平台上,而是定义很多与平台相关的 Makefile 负责的。


3、各目录下的Makefile

      内核中的 Makefile文件都是采用Kbuild 架构,一般情况下,建议我们采用Nakefile作为管理当前目录代码的 makefile 文件名,但是有时候也可以使用Kbuild,但当两者同时存在于同一个目录下时,Kbuild将会被优先使用。分布在各个子目录下的 Nakefile,它们并不符合GNU Makefile 的语法,为了区别于通常意义上的Makefile,所以被称为Kbuild Makefile。


总结:内核源码的组织非常复杂,利用好Makefile工程管理工具,可以提高编译效率。

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-1 14:43 , Processed in 0.052218 second(s), 12 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表