- 论坛徽章:
- 0
|
请教两个问题,
如下:
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启动的参数!请指教。
另外内核参数是在什么时候加载的?
谢谢。 |
|