2.1.2 System.map文件

来源:互联网 发布:3d服装设计软件 编辑:程序博客网 时间:2024/06/11 05:01


《Linux系统架构与目录解析》第2章不同启动模式的目录,本章讲述操作系统或系统的应用方式不同,启动的模式可能都会不同,尤其现在Linux被应用的范围很广,已经没有人敢说某一个操作系统一定是通过硬盘启动,有可能是用一个硬盘、U盘或网络就可以进入Linux,而其中的差异就会牵涉到使用不同的Linux目录。本节为大家介绍System.map文件。

AD:


    2.1.2  System.map文件

    另外在/boot目录中,较少听到但值得一提的是System.map这个文件(如图2-9所示),看文件名就知道它是一个像地图(map)一般的文件,不过,正确的说法应该是索引文件,因为它存在的目的是让外部软件可以知道kernel文件内部实际分配的位置。

     (点击查看大图)图2-9:/boot目录中的system.map文件

    最常会遇到的是更改System.map文件,当用户在重新编译kernel时,因为新的kernel和原本的kernel一定会有所差异,因此,内部的分配也不一样,须重新制作出一个新的System.map文件以符合要求。

    而这文件的内容是在索引什么东西?答案就是Symbols。什么是Symbol?其实就是kernel中的变量(Variable Name)或函数名称(Function Name),这样可以方便程序员在写程序时可以直接参照这一份Symbol的索引文件,找到所需要的kernel信息,这一份Symbol的索引文件又称为kernel symbol table。

    这样说好像很抽象,看实际的文件会比较有感觉。目前较常使用到的kernelsymbol table文件有两个(实际上会用到的不止这些,在此只是举例),即/proc/kallsyms和这个章节提到的system.map文件。System.map文件较单纯,是在用户一开始编译就产生的固定文件,不会因为任何原因更改,除非被换掉。而/proc/kallsyms是一个在启动时由Linux kernel实时产生的文件,当系统有任何变更时,它就会马上做出修正。两者的差异点如图2-10、图2-11所示。

     (点击查看大图)图2-10:System.map文件的前10笔记录 (点击查看大图)图2-11:Kallsyms文件的前4笔记录

    从图2-10、图2-11可以看出,两个文件的前面部分(其实到后面也是如此)是几乎完全一致的,因为两份数据其实都是为了将目前所使用的linux kernel中的symbol信息呈现给用户,但为何在System.map的前面一小部分会有些许的不同?笔者并没有找到相关的资料,但斗胆猜测,请注意,只是笔者的猜测唷!应该是因为System.map中的信息是kernel的完整数据,也就是说,从一开始载入kernel就已经是照表运行;但/proc/kallsyms则不是,它是动态产生,换句话说,是kernel进行到一半才开始制作出来的。所以这小部分的差异,笔者认为可能是在kernel加载一直到产生出/proc/kallsyms这段时间所进行的部分,因此,无法写入/proc/kallsyms中。

    但是否因为如此,就表示System.map的内容比/proc/kallsyms来得多,如果这样以为就大错特错了,应该说,/proc/kallsyms的信息比System.map多太多了,我们看一下这两份文件的尾部就可以知道差异在哪(如图2-12、图2-13所示)。

    在固定文件的System.map中,pg0是最后一条Symbol数据,Kernel中所记录的位置为c15e5000;对应到动态产生的/proc/kallsyms文件中的pg0,同样指到kernel的c15e5000地址。但注意到/proc/kallsyms接下来的内容是原本System.map中所没有的,这些是哪里来的呢?这些都是系统中所使用到的modules,像网卡、USB、EXT3文件系统等的modules,这是不是对一般用户来说更有意义?因为可以通过这文件,直接知道目前所有kernel或module使用Symbol的状况(当然这对笔者影响极小,因为笔者不在写程序 )。

     (点击查看大图)图2-12:System.map的后5笔记录 (点击查看大图)图2-13:/proc/kallsyms文件中的一部分记录笔者要特别强调,因为这是动态的信息,当用户新增或删除一个module,都会自动做实时的修正(/proc下的都是这一类型的文件),像载入USB module时所有使用到的Symbol都可以实时看到(如图2-14所示)。
     (点击查看大图)图2-14:USB module对/proc/kallsyms的影响
    【责任编辑:云霞 TEL:(010)68476606】
    0 0
    原创粉丝点击