system.map是一个符号表,其中包括符号名、符号类型、符号值。符号(sysmbol):包括已定义的符号(对应全局变量和static变量和定义的函数的名字)和未定义符号(未定义的函数的名字和引用但没定义的符号)信息。 符号值:每个符号对应一个内存地址, 即符号值。 符号类型:常见的有B(bss),D(data),T或t(text),当然还有其他不常见类型,这里不一一列举。 打开system.map文件: 87800000 T __image_copy_start 87800000 T _start 87800020 T _undefined_instruction 87800024 T _software_interrupt 87800028 T _prefetch_abort 8780002c T _data_abort 87800030 T _not_used 87800034 T_irq 87800038 T _fiq 87800040 T _IRQ_STACK_START_IN 87800060 t undefined _ instruction 878000c0 t software _ interrupt 87800120 t prefetch_abort 87800180 t data_abort 878001e0 t not_used 87800240 t irq 878002a0 t fiq 87800300 T reset 87800304 T save_boot_params_ret 87800340 T c _ runtime_cpu_setup 可以看到该文件按照链接地址由低到高列出了所有符号在内存中的地址,及类型,uboot的程序入口点为_start(和_image_copy_start是同一地址,_image_copy_start是uboot进行自拷贝的地址),在内存中的地址为0X87800000。也可以看出,以0X87800000为起始的第一个区域是上一节讲过的text段区域,所以这个system.map是各段区域中的具体内容在内存中的布局情况。 u-boot.map中包含了链接过程中涉及到的目标文件以及其所依赖的库文件中的各个符号的地址信息,以及我们所涉及到的函数所在目录信息,这里不再展开讲,有兴趣的同学可以自己查看研究。
|