Chinaunix

标题: bootloader 问题。 [打印本页]

作者: vikingrex    时间: 2008-01-03 14:42
标题: bootloader 问题。
请教两个问题,
如下:
1,
这是一个uboot的连接文件,
/*u-boot.lds文件*/
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. = 0x00000000;//能否解释一下 “.=”“.”是什么意思?
. = ALIGN(4);
.text      :
{
   cpu/arm920t/start.o (.text)
   *(.text)
}
            //另外,也不知道下面这几句代码的具体作用,只是知道是代码。
. = ALIGN(4);
.rodata : { *(.rodata) }
. = ALIGN(4);
.data : { *(.data) }
. = ALIGN(4);
.got : { *(.got) }
. = .;                       //这一句这样写是什么意思?天书啊。。
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;
. = ALIGN(4);
__bss_start = .;
.bss : { *(.bss) }
_end = .;
}

上述文件指定bootloader连接的入口点(_start),同时又定bootloader在flash中的地址为0x0。对吧?指定bootloader在flash中的地址0x0,是不是多此一举呢?因为即使不指定的话,bootloader编译好后,烧写的时候也可以吧bootloader烧写到到flash中的地址0x0处。

2,
vivibootloader执行完毕后,内存分布如下:

|-------------------------|0x34000000(64M)
|  1M vivi(step1&step2) |
|                                |
|--------------------------|0x33f000000=VIVI_RAM_BASE
|       1M heap           |
|                                |
|-------------------------|0x33e00000=HEAP_BASE
|      16K MMU           |
|-------------------------|0x33dfc000=MMU_TABLE_BASE
|    16K linux启动参数    |
|    16K Parameter_tlb  |
|     16K 分区表参数   |    参数
|                               |
|-------------------------|
|        32K stack       |
|------------------------|0x33de8000=stack_base
|                               |
|-------------------------|
|                               |      
|        1M内核        |
|-------------------------|0x30008000
|       内核参数        |
|-------------------------|0x30000100=Linux_param_offset
|                               |
|——————————|0x30000000=ram_base

问题如下:
内存分布中,有两段参数,
两段参数的区别是什么?主要是作用,分别在什么时候使用?内核参数应该是在启动内核的时候使用吧?但是上面的参数也有一个16K 的linux启动的参数!请指教。
另外内核参数是在什么时候加载的?

谢谢。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2