当前位置: 技术问答>linux和unix
大家好,我有一个关于uboot的问题。
来源: 互联网 发布时间:2016-09-26
本文导语: 你好,我有一个问题想请教。 NAND FLASH 启动u-boot的过程我明白。就是会将u-boot的前4k的代码直接复制到SRAM中,然后执行。 但是,连接器,如何确定哪部分是前4k的代码。还是就是START.S这部分大小就有4k,它是怎么样...
你好,我有一个问题想请教。
NAND FLASH 启动u-boot的过程我明白。就是会将u-boot的前4k的代码直接复制到SRAM中,然后执行。
但是,连接器,如何确定哪部分是前4k的代码。还是就是START.S这部分大小就有4k,它是怎么样分开的。复制的时候,复制的时候是把所有的代码都复制的sdram中,还是只是把没有执行部分的代码复制过去了。
其实,总结下,就是,代码在执行是的内存是怎么分配的。
我看过 SYSTEM.MAP 但是还是没有明确的看明白是怎么样的。
希望您能指教。
我的邮箱是 zdshuwei@gmail.com
谢谢大家了。
NAND FLASH 启动u-boot的过程我明白。就是会将u-boot的前4k的代码直接复制到SRAM中,然后执行。
但是,连接器,如何确定哪部分是前4k的代码。还是就是START.S这部分大小就有4k,它是怎么样分开的。复制的时候,复制的时候是把所有的代码都复制的sdram中,还是只是把没有执行部分的代码复制过去了。
其实,总结下,就是,代码在执行是的内存是怎么分配的。
我看过 SYSTEM.MAP 但是还是没有明确的看明白是怎么样的。
希望您能指教。
我的邮箱是 zdshuwei@gmail.com
谢谢大家了。
|
会将u-boot的前4k的代码直接复制到SRAM中
----------------
这个是cpu硬件实现的动作
因为nor flash比较贵,遇到需要很多资料需要存储的产品,硬件工程师就只会用nand flash
而nand flash不同于nor flash,它没有地址线和数据线,不能按地址任意读取,只能通过发指令的方式读取块
cpu上电之后,要执行的程序只能从rom中来,rom又以nand flash最便宜,所以很多cpu就提供了nand flash读取硬件,能上电自动把nand的前4k或8k读取到片内ram上
连接器,如何确定哪部分是前4k的代码。还是就是START.S这部分大小就有4k,它是怎么样分开的
--------------------
使用连接脚本能指定代码的具体链接位置
第一次读取的4k,主要工作是负责把nand中的bootloader全部读取到ram中,然后触发reset中断
----------------
这个是cpu硬件实现的动作
因为nor flash比较贵,遇到需要很多资料需要存储的产品,硬件工程师就只会用nand flash
而nand flash不同于nor flash,它没有地址线和数据线,不能按地址任意读取,只能通过发指令的方式读取块
cpu上电之后,要执行的程序只能从rom中来,rom又以nand flash最便宜,所以很多cpu就提供了nand flash读取硬件,能上电自动把nand的前4k或8k读取到片内ram上
连接器,如何确定哪部分是前4k的代码。还是就是START.S这部分大小就有4k,它是怎么样分开的
--------------------
使用连接脚本能指定代码的具体链接位置
第一次读取的4k,主要工作是负责把nand中的bootloader全部读取到ram中,然后触发reset中断
|
Mark。
|
楼主:你没好好研究start。s
你需要明白:
绝对地址
ldr 和ldr =
链接地址
地址无关
加载域与运行域
你需要明白:
绝对地址
ldr 和ldr =
链接地址
地址无关
加载域与运行域
|
在ubootboard板卡名的目录下
有一个u-boot.lds的文件,这个文件里定义了在image生成时候的layout情况,通常这个文件被称为链接脚本。你要关心的是里面的text段
.text :
{
cpu/mpc8260/start.o (.text)
通常start.S输出的start.o被放在最前面的位置,而_start标签对应的地址就是CPU Reset异常对于的入口地址。
对于nand前4KB的情况,一般在arm的处理器上用到的比较多,这是芯片控制器在cpu运行第一条指令之前通过硬件的方式来实现的。
在SYSTEM.MAP看到的符号都是代码存放在Flash上对应的地址,将代码段放在SDRAM上是通过函数:
relocate_code来实现的,这个函数位于board_init_f的尾部,运行完成后来到board_init_r,这时代码已经在SDRAM的地址上运行了。
有一个u-boot.lds的文件,这个文件里定义了在image生成时候的layout情况,通常这个文件被称为链接脚本。你要关心的是里面的text段
.text :
{
cpu/mpc8260/start.o (.text)
通常start.S输出的start.o被放在最前面的位置,而_start标签对应的地址就是CPU Reset异常对于的入口地址。
对于nand前4KB的情况,一般在arm的处理器上用到的比较多,这是芯片控制器在cpu运行第一条指令之前通过硬件的方式来实现的。
在SYSTEM.MAP看到的符号都是代码存放在Flash上对应的地址,将代码段放在SDRAM上是通过函数:
relocate_code来实现的,这个函数位于board_init_f的尾部,运行完成后来到board_init_r,这时代码已经在SDRAM的地址上运行了。
|
可以用16进制编辑器看下,编译出来的u-boot.map。也许会有所收获