共1条
1/1 1 跳转至页
关于内核编译时的联接及system.map的问题
关于内核编译时的联接及system.map的问题(贴子较长,真心请教)
首先想问一下system.map是依据什么生成的,按网上的资料和朋友所说是依赖于lds文件生成的(lds文件我不是很清楚,我想大概是给连接器指明如何进行连接的用的),我查了一下linux-2.4.20-8的源码,的确在每个arch/$(processer)/中都有lds文件,比如vmlinux.lds,可是在我看的uClinux中确没有这样一个文件,那么连接器是根据什么进行连接,并生成systdm.map文件呢,是不是在别的地方还有可能说明的连接规则呢?在我看的uClinux源码的根Makefile中有如下一句话:$(NM) $(LINUX) | grep -v '\(compiled\)\|\(\.o$$\)\|\( a \)' | sort > System.map,我想肯定是由它直接生成了system.map。说到底这个问题就是连接器是根据什么进行连接(我没学过编译原理,如果有概念性错误望大家指正)?
第二个问题是system.map的内容说代表什么。下面是我看的armS3C4510的uClinux源码编译后生成的system.map的最初一段。
00000100 T _start
00000100 T _stext
00000110 t loop
00000164 t dummy
00000168 t clear
00000178 t move
0000018c t jump
00000190 t call
000001a4 t poke
000001ac t setenv
000001bc t cmdtable
000001c4 t pokehw
000001cc t wait
000001d8 t command_table
000001dc t reference
000001e0 T get_options
00000284 t profile_setup
000002ac t ramdisk_start_setup
000002d0 t load_ramdisk
000002f8 t prompt_ramdisk
00000320 t ramdisk_size
00000344 t checksetup
0000044c T calibrate_delay
00000594 t parse_root_dev
00000634 t parse_options
000007e0 T cpu_idle
00000804 T start_kernel
000009ec t printf
00000a4c t do_rc
文件中的每一个标号应该是汇编中的标号或C的函数之类,那么前面的地址是什么呢,我不太明白。如果说代表了内核加载到RAM中后的物理地址的话,那么_stext之前似乎太小了,只能放得下一些中断入口(在这个板子中SDRAM的起始地址是0x0000)。而bootloader在上电时会把自已和内核都搬进RAM,bootloader在RAM中一般都是在一开始的,这显然放不下。
如果说标号前面的地址代表的是相对地址,那么bootloader随便把内核放在RAM中的一个地方都行(如下图)。那么还有一问题:通用的bootloader像redboot, blob, uboot等如何能跳转到特定内核的start_kernel处,因为我看到在system.map文件中start_kernel函数中的一些子函数如cpu_idle之类都被定位在start_kernel之前,而且对比了其它一些system.map文件,start_kernel的定位没有特别的规律。
+-------------+--------+----------------------------------------------------+
| bootloader | 空白 | 内 核 |
+-------------+--------+----------------------------------------------------+
我希望我把问题说的够清楚。肯请大家指点,我现在真是一团麻了!
关键词: 关于 内核 编译 联接 system.map 问题
共1条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? | |
抽奖了,抽奖了,金升阳医疗电源 |
打赏帖 | |
---|---|
【换取手持数字示波器】+与同事对定时器输出相位可调PWM移相全桥控制分享被打赏50分 | |
【换取手持数字示波器】+LP-MSPM0L1306开发板试用体验+串口被打赏40分 | |
CC-RL编译器相关问题求助被打赏10分 | |
【换取手持数字示波器】+与同事对ESP-12开发调试经验分享被打赏50分 | |
【换取手持数字示波器】+同事tek示波器调试spi解析被打赏50分 | |
【换取手持数字示波器】+2.6寸墨水屏调试经验被打赏50分 | |
换取手持数字示波器+个人开关电源的设计经验被打赏50分 | |
【换取手持数字示波器】+【APT32F173测评】+URAT被打赏20分 | |
【换取手持数字示波器】CH32X035的定时器以及外部中断体验被打赏50分 | |
【换取手持数字示波器】CH32X035搭建开发环境(RISC-V)被打赏50分 |