uboot-2011.12移植到S3C2440(序四)—— uboot.lds分析与解析

发布者:PeacefulSoul最新更新时间:2022-03-14 来源: eefocus关键字:uboot  移植  S3C2440  lds 手机看文章 扫描二维码
随时随地手机看文章

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm"")

    ;指定输出可执行文件是elf格式,32位ARM指令,小端

OUTPUT_ARCH(arm)

    ;指定输出可执行文件的平台为ARM

ENTRY(_start)

    ;指定输出可执行文件的起始代码段为_start.

SECTIONS

{

        . = 0x00000000 ; 指明目标代码的起始地址从0x0位置开始,"."代表的是当前位置

        . = ALIGN(4)   ; 代码以4字节对齐

        .text : ;指定代码段

        {

          cpu/arm920t/start.o (.text) ; 代码的第一个代码部分,指明start.s是入口程序代码,被放到代码段的开头

          *(.text) ;其它代码部分

        }

        . = ALIGN(4)

        .rodata : { *(.rodata) } ;指定只读数据段,RO段

        . = ALIGN(4);

        .data : { *(.data) }     ;指定读/写数据段,RW段

        . = 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);

        __bss_start = .; 把__bss_start赋值为当前位置,即bss段的开始位置

        .bss : { *(.bss) }; 指定bss段

        _end = .; 把_end赋值为当前位置,即bss段的结束位置

}



其它知识:

GNU编译器生成的目标文件缺省为elf格式。elf文件由若干段(section)组成,如不特殊指明,由C源程序生成的目标代码中包含如下段:.text(正文段)包含程序的指令代码;.data(数据段)包含固定的数据,如常量、字符串;.bss(未初始化数据段)包含未初始化的变量、数组等。GNU编译器生成的目标文件缺省为elf格式。elf文件由若干段(section)组成,如不特殊指明,由C源程序生成的目标代码中包含如下段:.text(正文段)包含程序的指令代码;.data(数据段)包含固定的数据,如常量、字符串;.bss(未初始化数据段)包含未初始化的变量、数组等。连接器的任务就是将多个目标文件的.text、.data和.bss等段连接在一起,而连接脚本文件是告诉连接器从什么地址开始放置这些段。


先看一下GNU官方网站上对.lds文件形式的完整描述:


SECTIONS {

...

secname start BLOCK(align) (NOLOAD) : AT ( ldadr )

  { contents } >region :phdr =fill

...

}

secname和contents是必须的,其他的都是可选的。下面挑几个常用的看看:1、secname:段名

2、contents:决定哪些内容放在本段,可以是整个目标文件,也可以是目标文件中的某段(代码段、数据段等)

3、start:本段连接(运行)的地址,如果没有使用AT(ldadr),本段存储的地址也是start。GNU网站上说start可以用任意一种描述地址的符号来描述。

4、AT(ldadr):定义本段存储(加载)的地址。


又如:


ENTRY(begin)

SECTION

{ .=0x00300000;

.text : { *(.text) }

.data: { *(.data) }

.bss: { *(.bss) }


其中,ENTRY(begin)指明程序的入口点为begin标号;.=0x00300000指明目标代码的起始地址为0x00300000,这一段地址可以是SDRAM的起始地址;.text : { *(.text) }表示从0x00300000开始放置所有目标文件的代码段,随后的.data: { *(.data) }表示数据段从代码段的末尾开始,再后是.bss段。


关键字:uboot  移植  S3C2440  lds 引用地址:uboot-2011.12移植到S3C2440(序四)—— uboot.lds分析与解析

上一篇:ARM微处理器的指令集概述(一)——ARM应用系统开发详解笔记
下一篇:移植u-boot-2010.09到S3C2440(一)——硬件初始化与测试

推荐阅读最新更新时间:2024-10-29 11:26

ARM Linux S3C2440之ADC驱动实现
硬件描述: S3c2440有一个10-bit的CMOS ADC 模数转换器,支持8个模拟通道输入,10位的分辨率,最高速度可达500KSPS(500 千次/每秒)。 从图中可知:模拟ADC,包含了2部分功能,一部分是触屏功能,另一部分就是普通ADC功能,分别可以产生INT_TC和INT_ADC 两个中断。8个AIN模拟输入(A ,YM,YP,XM,XP)通过一个8路模拟开关MUX进行通道片选。 ADC模块共有20个寄存器。对于普通ADC转换,使用ADCCON 和 ADCDAT0即可完成控制。ADCCON用于控制设置,ADCDAT0保存了转换结果。 驱动程序ADC_DEV.ko: #include linux/err
[单片机]
ARM Linux <font color='red'>S3C2440</font>之ADC驱动实现
U-boot-2014.04移植到MINI2440(11) 第二启动阶段分析
回顾一下u-boot启动其一阶段做了哪些事: 第一:设置CPU为SVC模式 第二:关闭看门狗 第三:关中断和子中断 第四:设置时钟 第五:MMU关闭,清除cache和TLB,使能地址对齐检查等 第六:初始化SDRAM 在我前面的分析里,第一阶段的最后,通过bl _main,跳到了arch/arm/lib/crt0.S里面去了,从这里开始时第二阶段的入口,下面从这里开始分析。 文件:crt0.S 先看看该文件对_main的描述,在第18行,有一个_main execution sequence is:下面有五步,其实就是对_main的执行流程的一个介绍,我翻译一下: 1
[单片机]
Fedora 、RT-Thread龙芯版移植成功 最便宜龙芯嵌入式开发板发布
近日在CSIP、中国开源软件推进联盟指导下由龙芯俱乐部发起和龙芯梦兰、龙芯中科、OSL联合主办,上海亚太地区经济和信息化人才培训中心(Cifal)、上海市软件行业协会开源软件专业委员会协办的2010年上海龙芯开源技术研讨会在上海举行。活动中探讨了龙芯和开源相关的重要议题,并集中展示了龙芯开源软件大赛的最新的开发成果.上海及附近地区多个开源社区、开源软件和开源企业的主要代表参加了会议,会后催生了多个龙芯开源项目。 2010年10月16日上午10点半,在上海中环国际大厦。来自上海和杭州、苏州、常熟等地的龙芯企业、老师、社区代表和技术人员等开源精英汇聚一堂。会议由龙芯俱乐部发起人石南主持。到场的主要人员有Cifal 技术总监乔元
[网络通信]
linux-2.6.32在mini2440开发板上移植-修改linux开机logo
修改Linux LOGO 编者:linux的开机默认logo是一只可爱的小企鹅。这里我们可以把它换成我们自己喜爱的图片,只要将linux-2.6.32.2/drivers/video/logo/linux_logo_clut224.ppm替换成自己的图片即可。方法很简单,照着操作基本就没问题。以下按照手册介绍两种方法。注意在进行图片的转换时候,一定要先注意图片的大小,要和使用的液晶屏的大小匹配。我这是320*240的。 1 使用命令行工具修改Linux LOGO linux-2.6.32.2/drivers/video/logo/linux_logo_clut224.ppm文件是一个特殊格式的图像文件,有很多方法可以把普
[单片机]
linux-2.6.32在mini2440开发板上<font color='red'>移植</font>-修改linux开机logo
十三、S3C2440 裸机 — 初始化代码及MMU
13.1 NOR FLASH 搬运 把程序从 nor flash 上搬运到 SDRAM 中 程序存储在 nor flash 上,运行时将程序搬运到 SDRAM 中运行 nor flash 启动:nor flash 的地址从 0x0000 0000 开始,CPU 可以直接在 nor flash 上运行程序 在 nor flash 上运行程序很慢 SDRAM:地址为 0x3000 0000,程序烧录在 nor flash 上,运行时,将 nor flash 上的代码搬运至 SDRAM 中运行 nor flash 启动: 初始化寄存器 关闭看门狗 设置存储控制器 复制代码到 SDRAM 中 跳转 main
[单片机]
十三、<font color='red'>S3C2440</font> 裸机 — 初始化代码及MMU
DM9000驱动在MINI2440上的移植学习笔记
想了解一下DM9000的移植修改原理,所以分析了一下时序图和引脚连接 首先看一下DM9000的引脚和MINI2440的引脚连接 DM9000 MINI2440 功能描述 SD0 DATA0 数据信号 | | SD15 DATA15 数据信号 CMD ADDR2 识别为地址还是数据 INT EINT7 中断 IOR# nOE 读命令使能 IOW# nWE 写命令使能 AEN nGCS4 片选使能 可以看出连接了16条数据线,1条地址线,而这唯一的一条地址线用于判断数据线传输的是地址还是数据,所以这16条数据线为数据和地址复用 而片选信号使用的BANK4,则访问0x2000 0000 – 0x27FF FFFF这
[单片机]
DM9000驱动在MINI2440上的<font color='red'>移植</font>学习笔记
在ARMSYS上进行uClinux内核移植的总结
1。简述 针对“如何在以S3C44B0X为核心的ARMSYS开发板上建立uClinux内核移植”的一个总结,其内容包括对Bootloader的功能分析和uClinux2。4。24发行版内核基础上针对S3C44B0X开发板进行修改的重点内容的逐一列举。 2。Bootloader 2。1Bootloader概述 BootLoader就是在操作系统内核运行之前运行的一段程序。通过这段程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。因此,正确建立uClinux的移植的前提条件是具备一个与uClinux配套、易于使用的Bootloade
[单片机]
uboot1.1.6顶层makefile详解
VERSION = 1//主版本号 PATCHLEVEL = 1//次版本号 SUBLEVEL = 6//修正版本号 EXTRAVERSION =//版本号扩展 U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)//这个Uboot的版本为1.1.6 VERSION_FILE = $(obj)include/version_autogenerated.h HOSTARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved