|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2014-1-4 13:38:48
|
显示全部楼层
谢谢。。。
SECTIONS
{
. = 0x00000000 ;
.init : AT(0)
{
head.o init.o nand.o
}
. = 0x30000000 ;
.text : AT(4096)
{
*(.text)
}
.rodata ALIGN(4) : AT((LOADADDR(.text)+SIZEOF(.text)+3)&~(0x03))
{
*(.rodata*)
}
.data ALIGN(4) : AT((LOADADDR(.rodata)+SIZEOF(.rodata)+3)&~(0x03))
{
*(.data)
}
__bss_start = .;
.bss ALIGN(4) :
{
*(.bss)
*(COMMON)
}
__bss_end = .;
}
以上是我的 Linker Script,按照以下清零 .bss section
void clean_bss(void)
{
extern int __bss_start,__bss_end;
int *p=&__bss_start;
for(;p<&__bss_end;p++)
*p=0;
}
是这样吗?
Ps: VMA 和 LMA 把我弄的晕头转向的
VMA is the address the section will have when the output file is run.
LMA is the address at which the section will be loaded.
1、以上的Linker Script 中用AT指定该 section 的加载地址,此地址是该段存在于 NandFlash中的物理地址吗 ?
2、当不用AT指定 某 section 的加载地址时,LMA和VMA是一样的,那此时所指定的地址,比如 0x30000000,已经远远超过 NandFlash 的实际容量,那该文件是如何被放置的呢?
我不知道那里理解错了,1和2结合在一起想的话很矛盾 ,麻烦可否给点思路。。。
小弟谢谢你了。。。 |
|