共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 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 |