快乐虾
http://blog.youkuaiyun.com/lights_joy/
lights@hb165.com
本文适用于
ADI bf561 DSP
uclinux-2008r1.5-rc3 (移植到vdsp5)
Visual DSP++ 5.0(update 5)
欢迎转载,但请保留作者信息
p1.l = __rambase;
p1.h = __rambase;
r0.l = __sdata;
r0.h = __sdata;
[p1] = r0;
p1.l = __ramstart;
p1.h = __ramstart;
p3.l = ___bss_stop;
p3.h = ___bss_stop;
r1 = p3;
[p1] = r1;
在这里,__rambase和__ramstart是在head.s中定义的两个全局变量:
__rambase:
.long 0
__rambase.end:
__ramstart:
.long 0
__ramstart.end:
而__sdata和__bss_stop则是vmlinux.lds.s中定义的符号:
.data :
{
/* make sure the init_task is aligned to the
* kernel thread size so we can locate the kernel
* stack properly and quickly.
*/
__sdata = .;
……………..
}
即__sdata表示了数据段的开始。
.bss :
{
. = ALIGN(4);
___bss_start = .;
*(.bss .bss.*)
*(COMMON)
. = ALIGN(4);
___bss_stop = .;
__end = .;
}
即__bss_stop指向了bss段的结束位置,这也是整个uclinux内核结束的位置。
1 参考资料
head.s分析(1):保存u-boot传递过来的指针(2009-1-19)
head.s分析(2):SYSCFG配置(2009-1-19)
head.s分析(3):数据及指针寄存器清0(2009-1-19)
head.s分析(4):关闭CACHE(2009-01-19)
head.s分析(5):关闭串口(2009-01-19)
head.s分析(6):栈指针初始化(2009-01-19)
head.s分析(7):init_early_exception_vectors(2009-1-19)
head.s分析(8):配置PLL及SDRAM(2009-01-20)
head.s分析(9):EBIU配置(2009-01-20)
head.s分析(10):转入中断15(2009-01-20)
head.s分析(11):关闭WATCHDOG(2009-01-20)
head.s分析(12):bss段清0(2009-01-20)
head.s分析(13):代码段前空间清0(2009-01-20)
head.s分析(14):L2空间清0(2009-01-20)
head.s分析(15):复制u-boot传递的参数(2009-01-20)