欢迎来到天天文库
浏览记录
ID:57066101
大小:167.51 KB
页数:13页
时间:2020-07-31
《内核VMLINUX配置分析.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本文首先分析了Linux内核中的配置系统结构,然后,解释了Makefile和配置文件的格式以及配置语句的含义,最后,通过一个简单的例子--TESTDriver,具体说明如何将自行开发的代码加入到Linux内核中。在下面的文章中,不可能解释所有的功能和命令,只对那些常用的进行解释,至于那些没有讨论到的,请读者参考后面的参考文献。1.配置系统的基本结构Linux内核的配置系统由三个部分组成,分别是:Makefile:分布在Linux内核源代码中的Makefile,定义Linux内核的编译规则;配置文件(config.in):给用户提供配置选择的功
2、能;配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于Ncurses图形界面以及基于Xwindows图形界面的用户配置界面,各自对应于Makeconfig、Makemenuconfig和makexconfig)。这些配置工具都是使用脚本语言,如Tcl/TK、Perl编写的(也包含一些用C编写的代码)。本文并不是对配置系统本身进行分析,而是介绍如何使用配置系统。所以,除非是配置系统的维护者,一般的内核开发者无须了解它们的原理,只需要知道如何编写Makefile和配置文件就可以。所以,在本文中
3、,我们只对Makefile和配置文件进行讨论。另外,凡是涉及到与具体CPU体系结构相关的内容,我们都以ARM为例,这样不仅可以将讨论的问题明确化,而且对内容本身不产生影响。2.Makefile2.1Makefile概述Makefile的作用是根据配置的情况,构造出需要编译的源文件列表,然后分别编译,并把目标代码链接到一起,最终形成Linux内核二进制文件。由于Linux内核源代码是按照树形结构组织的,所以Makefile也被分布在目录树中。Linux内核中的Makefile以及与Makefile直接相关的文件有:Makefile:顶层Make
4、file,是整个内核配置、编译的总体控制文件。.config:内核配置文件,包含由用户选择的配置选项,用来存放内核配置后的结果(如makeconfig)。arch/*/Makefile:位于各种CPU体系目录下的Makefile,如arch/arm/Makefile,是针对特定平台的Makefile。各个子目录下的Makefile:比如drivers/Makefile,负责所在子目录下源代码的管理。Rules.make:规则文件,被所有的Makefile使用。用户通过makeconfig配置后,产生了.config。顶层Makefile读入.
5、config中的配置选择。顶层Makefile有两个主要的任务:产生vmlinux文件和内核模块(module)。为了达到此目的,顶层Makefile递归的进入到内核的各个子目录中,分别调用位于这些子目录中的Makefile。至于到底进入哪些子目录,取决于内核的配置。在顶层Makefile中,有一句:includearch/$(ARCH)/Makefile,包含了特定CPU体系结构下的Makefile,这个Makefile中包含了平台相关的信息。位于各个子目录下的Makefile同样也根据.config给出的配置信息,构造出当前配置下需要的源
6、文件列表,并在文件的最后有include$(TOPDIR)/Rules.make。Rules.make文件起着非常重要的作用,它定义了所有Makefile共用的编译规则。比如,如果需要将本目录下所有的c程序编译成汇编代码,需要在Makefile中有以下的编译规则:%.s:%.c$(CC)$(CFLAGS)-S$<-o$@有很多子目录下都有同样的要求,就需要在各自的Makefile中包含此编译规则,这会比较麻烦。而Linux内核中则把此类的编译规则统一放置到Rules.make中,并在各自的Makefile中包含进了Rules.make(inc
7、ludeRules.make),这样就避免了在多个Makefile中重复同样的规则。对于上面的例子,在Rules.make中对应的规则为:%.s:%.c$(CC)$(CFLAGS)$(EXTRA_CFLAGS)$(CFLAGS_$(*F))$(CFLAGS_$@)-S$<-o$@2.2Makefile中的变量顶层Makefile定义并向环境中输出了许多变量,为各个子目录下的Makefile传递一些信息。有些变量,比如SUBDIRS,不仅在顶层Makefile中定义并且赋初值,而且在arch/*/Makefile还作了扩充。常用的变量有以下几类
8、:1)版本信息版本信息有:VERSION,PATCHLEVEL,SUBLEVEL,EXTRAVERSION,KERNELRELEASE。版本信息定义了当前内核的版本
此文档下载收益归作者所有