void nmain();//指定入口地址 但他的代码不一定放在最前面
ENTRY(nmain)
SECTIONS {
. = 0x80000000;
.text : AT ( 0x0) /* AT ( LOADADDR(.main) + SIZEOF(.main) 不能用main,否则入口地址不会是0x80000000*/
{
*(.text)
. = ALIGN(4);
}
......
}
void boot( void ) __attribute__((naked,section (".boot")));//源代码里面的声明
//'naked'属性阻止编译器生成任何函数入口或退出代码。现在变异这段代码,会得到更少的编译器输出:
ENTRY(boot)
SECTIONS {
. = 0x02000000;
__CS2start = .;
__NORFlash = .;
__NANDFlash = .;
.selfcopy : AT (0x0) //把启动自我复制代码放在最前面
{
__selfcopysrc = .;
*(.selfcopy)
}
. = 0x00008000;
__IVT = .;
. += 0x20;
__selfcopydest = .;
. += SIZEOF(.selfcopy);
.rodata : AT ( LOADADDR(.selfcopy) + SIZEOF(.selfcopy) )
{
*(.rodata*)
*(.rodata)
. = ALIGN(4);
}
.....
}
阅读(985) | 评论(0) | 转发(0) |