• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : 6410启动UBOOT的疑问 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 19229
精华: 0
发帖: 88
金钱: 455 两
威望: 91 点
综合积分: 176 分
注册时间: 2010-04-17
最后登录: 2021-10-20
楼主  发表于: 2011-11-23 13:46

 6410启动UBOOT的疑问

UBOOT一般都100多K,而6410的stepstone只有8K,UBOOT实现自己搬移到RAM是靠前8K的代码吗,而如果UBOOT只拷贝了部分代码到stepstone也能正常启动?而查看了u-boot.lds其中
.text :
{
  cpu/s3c64xx/start.o (.text)           ----4.3K
  cpu/s3c64xx/s3c6410/cpu_init.o  (.text) ----1.9K
  cpu/s3c64xx/onenand_cp.o (.text)       ----1.7K
  cpu/s3c64xx/nand_cp.o (.text)           ----4.5K
  board/samsung/mini6410/nand_6410.fo     ----6.7K
  cpu/s3c64xx/movi.o (.text)              ----5.1K
  *(.text)
  lib_arm/div0.o
}
前3部分已经7.9K,如果从nandflash启动nand_cp.o中的函数是怎么被调用的?感觉这块很不理解,哪位高手指点一下啊
级别: 侠客
UID: 19229
精华: 0
发帖: 88
金钱: 455 两
威望: 91 点
综合积分: 176 分
注册时间: 2010-04-17
最后登录: 2021-10-20
1楼  发表于: 2011-11-23 13:57
start.s中调用了copy_uboot_to_ram,而此函数在nand_cp.c中,但是nand_cp.o并不在uboot的前8k中,不知道此处是如何调用的
级别: 侠客
UID: 19229
精华: 0
发帖: 88
金钱: 455 两
威望: 91 点
综合积分: 176 分
注册时间: 2010-04-17
最后登录: 2021-10-20
2楼  发表于: 2011-11-23 17:41
自己实验了一下,.o文件大小相加并不是最后生成.bin时的大小,又研究了一下.map,就个人理解应该是按照程序流程下来把要运行的代码依次链接起来,未被调用的代码不会链接进来,但有些代码的位置仍然很迷惑,唉~
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2011-11-23 18:16
如果你要弄清代码调用和位置的关系,可以研究u-boot(elf可执行文件,不是u-boot.bin)的反汇编结果。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 19229
精华: 0
发帖: 88
金钱: 455 两
威望: 91 点
综合积分: 176 分
注册时间: 2010-04-17
最后登录: 2021-10-20
4楼  发表于: 2011-11-24 12:20
#ifdef CONFIG_BOOT_NOR            /* relocate U-Boot to RAM */
    adr    r0, _start        /* r0 <- current position of code   */
    ldr    r1, _TEXT_PHY_BASE    /* r1 <- destination                */
    ldr    r2, _armboot_start
    ldr    r3, _bss_start
    sub    r2, r3, r2        /* r2 <- size of armboot            */
    add    r2, r0, r2        /* r2 <- source end address         */


关于重定位的代码有个小问题,想问一下NOR启动的话是不是代码不会被搬移到stepstone?  _start的地址是不是为0x0?  烦请老大们指点一下
[ 此帖被wawe在2011-11-24 12:28重新编辑 ]
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
5楼  发表于: 2011-11-24 14:06

 回 4楼(wawe) 的帖子

NOR启动时不存在stepping stone.上面代码就是把u-boot从NOR复制到SDRAM中。这段代码是在NOR中执行的,_start就是0x0.
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 19229
精华: 0
发帖: 88
金钱: 455 两
威望: 91 点
综合积分: 176 分
注册时间: 2010-04-17
最后登录: 2021-10-20
6楼  发表于: 2011-11-24 15:56
首先感谢kasim老大的解答,其实我的主要疑惑是,uboot一般是100多K,而不管从SD,还是nand启动,BL0阶段都是读取了前8K的代码此段代码称BL1,而SMDK6410_IROM_APPLICATION NOTE中所示的BL1和BL2两段代码并不在连续区域,nandflash中BL1和BL2之间有1 page的数字签名或保留区(SDHC中有),而SD卡中BL1段所在扇区还在BL2后面。我的疑问是uboot作为一个整体是如何分散烧到SD卡或NAND上的,还是说烧写工具做了这些处理?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
7楼  发表于: 2011-11-24 16:26

 回 6楼(wawe) 的帖子

对于SD boot的情况来说,是SD卡烧写工具做的处理。NAND boot不存在BL1和BL2不连续的情况(如果你把前8K的u-boot叫做BL1而完整的u-boot叫做BL2的话)。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 19229
精华: 0
发帖: 88
金钱: 455 两
威望: 91 点
综合积分: 176 分
注册时间: 2010-04-17
最后登录: 2021-10-20
8楼  发表于: 2011-11-24 18:12
SMDK6410_IROM_APPLICATION NOTE_REV 0.2 中所说BL1为bootloader前8K,BL2为bootloader剩余部分,其实UBOOT自身的重定位就等于是把自己本身变成了BL2。
我说的在nandflash中BL1和BL2不连续是因为,它们之间有一个page的保留区,该区的内容是512Btye Signature +Reserved,Reserved部分大小不定,跟page大小有关,就个人猜测这个512Btye Signature 应该是前8Kbootloader的校验,ECC或其它什么校验,应该是三星的建议,有没有都行,kasim老大不知道我理解的对不对?

*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
9楼  发表于: 2011-11-24 18:37
从我以前用过的一个u-boot 1.1.6 for mini6410来看,NAND boot时就是把NAND Flash中从block 0开始的200多K数据复制到SDRAM中。另外,Signature应该和S3C6410的Secure boot有关,用来让iROM验证BL1的合法性的。在这种情况下,生成u-boot的NAND Flash镜像时就必须考虑signature数据的位置。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go