1 内核符号表(kernel symbol table)作用
变量名或者函数名组成,每一项是符号和地址的序对,就像域名和ip地址,格式如下:
[root@rx6600 boot]# head System.map
000000000479c4a0 A phys_start
a000000000000600 A __start_gate_mckinley_e9_patchlist
a000000000000604 A __end_gate_mckinley_e9_patchlist
a000000000000604 A __end_gate_vtop_patchlist
a000000000000604 A __start_gate_fsyscall_patchlist
a000000000000604 A __start_gate_vtop_patchlist
对于系统的oop消息、或者通过gdb的调试消息,都需要根据该对照表,将内核熟悉的函数地址转化为用户熟悉的函数名称,便于用户进行故障定位、运行监控。
2 内核符号表存储位置
2.1 System.map
磁盘中真实存在的文件,存储内核中静态编译的函数和变量地址,每个新编译内核对应一个System.map文件,当klogd输出内核消息时,会通过/boot/System.map来将函数、变量地址转换为名称,方便用户理解。该文件对应不同的编译内核有对应的实现文件。2.2 /proc/kallsyms
内核启动时候创建,共oops时定位错误,文件大小总为0,包含当前内核导出的、可供使用的变量或者函数
相似点:都是内核函数、变量的符号表,结构一致;对于可导出的内核