system.map文件作用

system.map文件作用

ID:34726345

大小:69.53 KB

页数:4页

时间:2019-03-10

system.map文件作用_第1页
system.map文件作用_第2页
system.map文件作用_第3页
system.map文件作用_第4页
资源描述:

《system.map文件作用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、System.map文件的作用有关System.map文件的信息好象很缺乏。其实它一点也不神秘,并且在整个事情当中它并不象看上去那么得重要。但是由于缺乏必要的文档说明,使其显得比较神秘。它就象耳垂,我们每个人都有,但却不知道是干什么用的。本网页就是用来说明这个问题的。注意,我并不会是百分之一百正确的。例如,一个系统很可能没有/proc文件系统支持,但是大多数系统肯定有。这里我假定你是“随大流的”,并有一个典型配置的系统。某些有关内核出错(oops)的阐述来自于AlessandroRubini的“Linux设备驱动程序”一书,我是从其中学到大部分内核编程知识的。什么是符号(Symbols)?  

2、在编程中,一个符号(symbol)是一个程序的创建块:它是一个变量名或一个函数名。正如你自己编制的程序一样,内核具有各种符号也是不应该感到惊奇的。当然,区别在于内核是一非常复杂的代码块,并且含有许多、许多的全局符号。内核符号表(KernelSymbolTable)是什么东西?  内核并不使用符号名。它是通过变量或函数的地址(指针)来使用变量或函数的,而不是使用size_tBytesRead,内核更喜欢使用(例如)c0343f20来引用这个变量。而另一方面,人们并不喜欢象c0343f20这样的名字。我们跟喜欢使用象size_tBytesRead这样的表示。通常,这并不会带来什么问题。内核主要是用

3、C语言写成的,所以在我们编程时编译器/连接程序允许我们使用符号名,并且使内核在运行时使用地址表示。这样大家都满意了。  然而,存在一种情况,此时我们需要知道一个符号的地址(或者一个地址对应的符号)。这是通过符号表来做到的,与gdb能够从一个地址给出函数名(或者给出一个函数名的地址)的情况很相似。符号表是所有符号及其对应地址的一个列表。这里是一个符号表例子:  c03441a0Bdmi_broken  c03441a4Bis_sony_vaio_laptop  c03441c0bdmi_ident  c0344200bpci_bios_present  c0344204bpirq_table  

4、c0344208bpirq_router  c034420cbpirq_router_dev  c0344220bascii_buffer  c0344224bascii_buf_bytes      你可以看出名称为dmi_broken的变量位于内核地址c03441a0处。什么是System.map文件?  有两个文件是用作符号表的:    1./proc/ksyms    2.System.map  这里,你现在可以知道System.map文件是干什么用的了。  每当你编译一个新内核时,各种符号名的地址定会变化。/proc/ksyms是一个"proc文件"并且是在内核启动时创建的。实际上它

5、不是一个真实的文件;它只是内核数据的简单表示形式,呈现出象一个磁盘文件似的。如果你不相信我,那么就试试找出/proc/ksyms的文件大小来。因此,对于当前运行的内核来说,它总是正确的..  然而,System.map却是文件系统上的一个真实文件。当你编译一个新内核时,你原来的System.map中的符号信息就不正确了。随着每次内核的编译,就会产生一个新的System.map文件,并且需要用该文件取代原来的文件。什么是一个Oops?  在自己编制的程序中最常见的出错情况是什么?是段出错(segmentfault),信号11。Linux内核中最常见的bug是什么?也是段出错。除此,正如你想象的那

6、样,段出错的问题是非常复杂的,而且也是非常严重的。当内核引用了一个无效指针时,并不称其为段出错--而被称为"oops"。一个oops表明内核存在一个bug,应该总是提出报告并修正该bug。  请注意,一个oops与一个段出错并不是一回事。你的程序并不能从段出错中恢复过来,当出现一个oops时,并不意味着内核肯定处于不稳定的状态。Linux内核是非常健壮的;一个oops可能仅杀死了当前进程,并使余下的内核处于一个良好的、稳定的状态。一个oops并非是内核死循环(panic)。在内核调用了panic()函数后,内核就不能继续运行了;此时系统就处于停顿状态并且必须重启。如果系统中关键部分遭到破坏那么

7、一个oops也可能会导致内核进入死循环(panic)。例如,设备驱动程序中出现的oops就几乎不会导致系统进行死循环。  当出现一个oops时,系统就会显示出用于调试问题的相关信息,比如所有CPU寄存器中的内容以及页描述符表的位置等,尤其会象下面那样打印出EIP(指令指针)的内容:  EIP:0010:[]  CallTrace:[]    一个Oops与System.map文件有什么关系呢?  

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。