Chinaunix首页 | 论坛 | 博客
  • 博客访问: 724379
  • 博文数量: 124
  • 博客积分: 3156
  • 博客等级: 中校
  • 技术积分: 1584
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-02 10:29
文章分类

全部博文(124)

文章存档

2012年(3)

2011年(2)

2010年(61)

2009年(34)

2008年(24)

我的朋友

分类: LINUX

2008-11-20 16:50:00

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);
    }   
.....
}
阅读(939) | 评论(0) | 转发(0) |
0

上一篇:ARM bl 和ldr

下一篇:LD中文手册

给主人留下些什么吧!~~