标签:
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
在嵌入式开发中,除了汇编文件、c文件和Makfile之外,link文件是少不了的。汇编文件一般是cpu上电开始执行的code,当然有时候中断、mmu和cache、spinlock的部分也需要汇编完成;c文件构成了嵌入式开发的主要内容,无论是kernel、driver、net,还是上层app一般都是c来完成的,当然现在java完成的也多,这不属于今天讨论的范围;Makefile定义了代码的编译规则;而link file限制了elf文件中各个section的位置布局。一般的link文件是这样的,
OUTPUT_FORMAT("elf32-i386") OUTPUT_ARCH(i386) ENTRY(start) SECTIONS { . = 0x7c00; .entry : { *bootasm.S.o*(.text .rodata .data) } .text : { *(.text) } .data : { *(.data) } .bss : { *(.bss) } /DISCARD/ : { *(.eh_*) } }
这其中,rodata表示只读数据的部分,比如说char* p = "hello\n"等数据;一般的function代码最后都被放进了text段;data是指那些有初始数值的全局数据,但不是只读数据;bss是指初始化为0的全局数据;当然,此时还应该有一段stack数据,但是sp的数据,也就是堆栈的指针一般是在汇编文件中才开始设定的,只要不和其他的段打架就可以了。
标签:
原文地址:http://blog.csdn.net/feixiaoxing/article/details/46292579