完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
以下是我学习u-boot的链接脚本时做的笔记,欢迎指正错误。
/* 指明输出的可执行文件格式为elf,即小端模式的32位ARM指令 */ OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") /* 输出的可执行文件的平台为ARM */ OUTPUT_ARCH(arm) /* 将符号_start表示的地址设置为入口地址,也就是起始代码段为_start */ ENTRY(_start) SECtiONS /* 程序各个段的具体的地址分配 */ { . = 0x00000000; /* ROM起始地址 */ . = ALIGN(4); /* 代码以4字节对齐 */ .text : { cpu/s3c64xx/start.o (.text) /* start.o代码部分 */ cpu/s3c64xx/s3c6410/cpu_init.o (.text) /* cpu_init.o代码部分 */ cpu/s3c64xx/onenand_cp.o (.text) cpu/s3c64xx/nand_cp.o (.text) cpu/s3c64xx/movi.o (.text) *(.text) /* 其他代码部分 */ lib_arm/div0.o /* div0.o代码部分 */ } . = ALIGN(4); /* 4字节对齐 */ .rodata : { *(.rodata) } /* 指定只读数据段 */ . = ALIGN(4); /* 4字节对齐 */ .data : { *(.data) } /* 指定读写数据段( RAM ) */ . = ALIGN(4); .got : { *(.got) } /* 指定got段, got段式是uboot自定义的一个段, 非标准段 */ __u_boot_cmd_start = .; //把__u_boot_cmd_start赋值为当前位置, 即起始位置*/ .u_boot_cmd : { *(.u_boot_cmd) } //指定u_boot_cmd段, uboot把所有的uboot命令放在该段.*/ __u_boot_cmd_end = .; //把__u_boot_cmd_end赋值为当前位置,即结束位置*/ . = ALIGN(4); .mmudata : { *(.mmudata) } . = ALIGN(4); __bss_start = .; //把__bss_start赋值为当前位置,即bss段的开始位置*/ .bss : { *(.bss) } //指定bss段*/ _end = .; //把_end赋值为当前位置,即bss段的结束位置*/ } 总体上的代码地址分配清晰了,熟悉了链接脚本后,可以知道各个代码链接时是按照什么顺序存放的,也能自定义代码段的地址,从而有效规划程序的存放地址,例如,uboot就将存放命令行指令的代码统一放到了u_boot_cmd这个段里了,而且编译的时候能计算出该段的长度,从而在搜索指令的时候就在__u_boot_cmd_start 和 __u_boot_cmd_end 之间按照指令的结构体格式进行遍历即可。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
4893 浏览 0 评论
87410 浏览 0 评论
【高手问答】如何做到精通linux技术?资深工程师带你突破难点
4724 浏览 2 评论
3619 浏览 2 评论
解读Linux :先从创建一个文件夹用来存放jdk压缩文件开始
2482 浏览 0 评论
1998浏览 3评论
1284浏览 1评论
求解:aarch64交叉编译工具已经安装成功,环境变量已经配置,怎么将系统架构切换为ARM的架构
1342浏览 0评论
电脑和虚拟机可以互ping,电脑和开发板也可以互ping,但是虚拟机和开发板ping不通是什么原因
1234浏览 0评论
1173浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:22 , Processed in 1.133654 second(s), Total 74, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号