(1)vmlinux
vmlinux是在内核源码顶层目录生成的内核映像。它是内核在虚拟空间运行时代码的真实反映。编译的过程就是按照特定顺序链接目标代码,生成vmlinux。因为Linux内核运行在虚拟地址空间,所以名字附加"vm"(virtual memory)。Vmlinux不具备引导的能力,需要借助其他boot咯ader引导启动
(2)vmlinuz
vmlinuz是可引导的、压缩的内核映像,也就是zImage。它是vmlinux的压缩映像,是可执行的Linux内核映像。vmlinuxz的生成跟体系结构很有关系,不同体系结构的内核一般有不同的格式。大多数vmlinuz包含2部分:压缩的vmlinux和自引导程序。Vmlinuz通过自引导程序初始化系统,并且解压启动vmlinuz。Vmlinxz采用gzip压缩格式,都包含gzip的解压缩函数。
(3)System.map
System.map是一个特定内核的内核符号表,它包含内核全局变量和函数的地址信息。
当vmlinux编译完成时,再通过$(NM)命令解析vmlinux映像生成。可以直接通过nm命令来查看任何一个可执行文件的信息。
Linux内核是一个很复杂的代码块,有许多全局符号。它不使用符号名,而是通过变量或函数的地址来识别变量或函数名。
Linux内核还有另外一种符号表使用方式:/proc/ksyms。它是一个"proc"接口,是在内核映像引导时创建的/proc/ksyms条目。用户空间的程序可以通过/proc/ksyms接口可以读取内核符号表。这需要预先设置CONFIG_ALLKSYMS选项,内核映像将包含符号表。