完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在学习移植最新u-boot课程中,使用的u-boot版本为:u-boot-2014-04-01,它的链接脚本如下:
OUTPUT_FORMAT("elf32-littleARM", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) SECtiONS { . = 0x00000000; . = ALIGN(4); .text : { __image_copy_start = .; CPUDIR/start.o (.text) board/samsung/smdk2440/libsmdk2440.o (.text) *(.text) } . = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } . = ALIGN(4); .data : { *(.data) } ***...(后面省略) 链接脚本指定的链接地址是 0x00000000。 u-boot代码作部分修改后,编译出 bin文件和反汇编文件,反汇编文件文件如下: u-boot: file format elf32-littlearm Disassembly of section .text: 33f00000 <__image_copy_start>: 33f00000: ea000014 b 33f00058 33f00004: e59ff014 ldr pc, [pc, #20] ; 33f00020 <_undefined_instruction> 33f00008: e59ff014 ldr pc, [pc, #20] ; 33f00024 <_software_interrupt> 33f0000c: e59ff014 ldr pc, [pc, #20] ; 33f00028 <_prefetch_abort> 33f00010: e59ff014 ldr pc, [pc, #20] ; 33f0002c <_data_abort> 33f00014: e59ff014 ldr pc, [pc, #20] ; 33f00030 <_not_used> 33f00018: e59ff014 ldr pc, [pc, #20] ; 33f00034 <_irq> 33f0001c: e59ff014 ldr pc, [pc, #20] ; 33f00038 <_fiq> ***... (后面省略) 可以看到链接起始地址是在 0x33f00000,那这是哪里指定的呢!?只记得有处全局变被用作重定代码的起始地址,如下: .globl _TEXT_BASE _TEXT_BASE: .word CONFIG_SYS_TEXT_BASE ***... (后面省略) CONFIG_SYS_TEXT_BASE的值为0x33f00000,难道是通过这里指定的?尝试改变该变量的值,改变该变量的值,重新编译,发现链接地址重新变化了! 所以目标文件的链接地址确实是在代码里面指定的,哪这又是如何实现的呢??? |
|
相关推荐
1个回答
|
|
大体搜了一下代码
LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) makefile里边有这样一句 |
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2014 浏览 6 评论
1828 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4380 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-26 23:19 , Processed in 2.510308 second(s), Total 76, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号