主题 : uboot拷贝uboot到ram的三点疑问??? 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 10316
精华: 0
发帖: 56
金钱: 280 两
威望: 56 点
综合积分: 112 分
注册时间: 2009-10-31
最后登录: 2012-06-15
楼主  发表于: 2010-08-06 17:07

 uboot拷贝uboot到ram的三点疑问???

这是/cpu/arm920t/start.S 中将uboot拷贝到ram中运行的代码下面是我的一些疑问,尽请那位指点,致谢!!!

        @ copy U-Boot to RAM
        ldr     r0, =TEXT_BASE
        mov     r1, #0x0      @start address   (疑问1:为什么这个地址是从0x0开始的,不是从nand启动的话前面还有4K的flashloader吗,这样不久应该是0x1000吗??)
        mov     r2, #0x30000  @code size
        bl      nand_read_ll  (疑问2:从下面定义的 nand_read_ll可以该函数有三个参数,这些参数是怎样确定的??)
        tst     r0, #0x0          (疑问3: nand_read_ll函数中好像没看到对ro的操作,那ro的值是在那里改变的)
        beq     ok_nand_read

//下面是nand_read.c中对int  nand_read_l的声明
int  nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
{
    int i, j;
    if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
    return -1;    /* invalid alignment */
    }
    /* chip Enable */
    NFCONF &= ~0x800;
    for(i=0; i<10; i++);
    for(i=start_addr; i < (start_addr + size);) {
    /* READ0 */
    NFCMD = 0;
    /* Write Address */
    NFADDR = i & 0xff;
    NFADDR = (i >> 9) & 0xff;
    NFADDR = (i >> 17) & 0xff;
    NFADDR = (i >> 25) & 0xff;
    wait_idle();
    for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
    *buf = (NFDATA & 0xff);
    buf++;
    }
    }
    /* chip Disable */
    NFCONF |= 0x800; /* chip disable */
    return 0;
}
勤劳才是硬道理!!
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2010-08-06 17:40
mov     r1, #0x0      @start address   (疑问1:为什么这个地址是从0x0开始的,不是从nand启动的话前面还有4K的flashloader吗,这样不久应该是0x1000吗??)

对于UBoot来说,flashloader就是它自己的一部分,这4K的代码就是你现在看到的东西。

bl      nand_read_ll  (疑问2:从下面定义的 nand_read_ll可以该函数有三个参数,这些参数是怎样确定的??)

r0 --> 第一个参数(buf)
r1 --> 第二个参数(start_addr)
r2 --> 第三个参数(size)

tst     r0, #0x0          (疑问3: nand_read_ll函数中好像没看到对ro的操作,那ro的值是在那里改变的)

如果你看nand_read_ll()的反汇编的话,就会知道,r0会在函数返回前赋值,里面的值就是函数的返回值。
"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: 10316
精华: 0
发帖: 56
金钱: 280 两
威望: 56 点
综合积分: 112 分
注册时间: 2009-10-31
最后登录: 2012-06-15
2楼  发表于: 2010-08-06 20:13
谢谢版主指点
勤劳才是硬道理!!