新uboot的链接基址 -- CONFIG_SYS_TEXT_BASE

原文地址: http://blog.sina.com.cn/s/blog_7a2a032b0100ygyz.html

CONFIG_SYS_TEXT_BASE变量在uboot的两次链接过程都用到,对应的选项是-Ttext $(CONFIG_SYS_TEXT_BASE)指定了text segment的起始链接地址。

Uboot根目录下config.mk文件代码片段

LDFLAGS_FINAL += -Bstatic

//ram start up

LDFLAGS_u-boot += -T $(obj)u-boot.lds $(LDFLAGS_FINAL)

ifneq ($(CONFIG_SYS_TEXT_BASE),)

LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)

endif

//nand-flash start up

LDFLAGS_u-boot-spl += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL)

ifneq ($(CONFIG_SPL_TEXT_BASE),)

LDFLAGS_u-boot-spl += -Ttext $(CONFIG_SPL_TEXT_BASE)

Endif

LDFLAGS_u-boot是链接uboot.bin时用到的变量,man ld查看-Ttext选项的意思是定义text段的起始链接地址。-T选型是指定链接脚本。

在针对tiny6410的平台上的处理是CONFIG_SYS_TEXT_BASE定义在Top/board/$(BOARDDIR)/config.tmp文件中

sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp

ifndef CONFIG_NAND_SPL

CONFIG_SYS_TEXT_BASE = $(RAM_TEXT)

else

CONFIG_SYS_TEXT_BASE = 0

endif

Makefile中对应的tiny6410规则的代码片段定义了以下代码

Echo"RAM_TEXT=0x57e00000">>$(obj)board/samsung/tiny6410/config.tmp;

在uboot-spl的链接过程用到的CONFIG_SPL_TEXT_BASE没有找到对应的定义。Top/nand_spl/board/samsung/ tiny6410/makefile中有LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) $(LDFLAGS_FINAL),其中定义了text段的起始链接地址。

Top/nand_spl/board/samsung/tiny6410/config.mk文件的PAD_TO := $(shell expr $$[$(CONFIG_SYS_TEXT_BASE) + 4096]),PAD_TO的中文意思理解为增加到,即增加到4K的代码。和6410中4k的 steppingstone内存对应。

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

S3c6410手册第二章

Boot image area has mirrored image which points a partial region of internal memory area or static memory area. Start address of boot image is fixed to 0x0000_0000.

开机引导映像区域中的镜像是存放在内部的内存或静态存储区域的部分区域里的,镜像的开始地址修正为0x0000_0000.【可以看出引导映像只能从内部内存和存储区启动,并且起始物理地址是0x0000_0000】

Internal memory area is used to access internal ROM and internal SRAM for boot loader, which is also called Steppingstone.

内部存储区域包括内部内存和内部的存储区,就是常说的steppingstone。【其中SRAM是8k,其中4k用作拷贝nand上的数据】

Address range of static memory area is from 0x1000_0000 to 0x3FFF_FFFF. SROM, SRAM, NOR Flash,asyncronous NOR interface device, OneNAND Flash, and Steppingstone can be accessed by this address area.

静态存储区包括内部的内存和存储,外部内存和存储。但是数据和地址总线都是分开的。

Main memory is accessed via SPINE bus, and its address range is from 0x0000_0000 to 0x6FFF_FFFF.【存储区域,特点是地址和数据总线分开】

Pheripheral is accessed via PERI bus, and its address range is from 0x7000_0000 to 0x7FFF_FFFF.【特殊功能寄存器nand数据的传输是从该总线上传输的】

}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【nand启动整体思路:arm上电后:nandflash上的前4k数据被拷到内部内存、内部内存起始地址被映射为0x0000_0000,然后从0x0000_0000处开始执行。因此前4k程序的链接地址要设置为0x0000_0000。】

Top/arch/arm/cpu/XXX/Start.s文件中的

.globl _TEXT_BASE

_TEXT_BASE:

.word CONFIG_SYS_TEXT_BASE

其中CONFIG_SYS_TEXT_BASE大小的具体定义和平台相关,一般是在makefile里定义的。(而6410处理器对该变量的引用有2处,分别是0和RAM_TEXT($(obj)board/samsung/tiny6410/config.tmp;))

 

### 生成或修改 U-Boot `.config` 文件的方法 对于U-Boot而言,`.config`文件包含了特定板级支持包(BSP)所需的配置选项。这些配置决定了哪些功能被启用以及如何编译U-Boot以适应具体的硬件平台。 #### 自动生成默认配置 当首次为一个的目标板准备构建环境时,可以通过执行如下命令来加载预设的默认配置: ```bash make <board_name>_defconfig ``` 这会读取位于`configs/`目录下的相应`.cfg`文件,并据此创建或更当前工作区内的`.config`文件[^1]。 #### 手动编辑配置项 除了使用默认配置外,还可以利用菜单驱动界面来进行更精细的手动调整: ```bash make menuconfig ``` 此工具允许开发者浏览并更改各种内核特性及其参数设定,保存后的改动同样会被记录至`.config`中。 #### 修改现有配置变量 如果仅需变更少量配置条目,则可以直接打开`.config`文本文件进行编辑。需要注意的是,在直接操作前最好备份原始版本以防意外情况发生。另外一种方式是在命令行中指定的值给定环境变量,例如: ```bash export CONFIG_SYS_TEXT_BASE=0x87800000 ``` 上述例子展示了怎样改变启动代码基址的位置[^2]。 #### 应用自定义碎片化补丁 有时为了满足特殊需求或是测试某些加入的功能模块,可以采用碎片化的形式提供额外的KConfig片段作为补充输入源。这类做法通常涉及将差异部分存放在独立文件里再通过脚本引入项目树下处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值