boot_linux_from_flash
//启动内核
entry(0, machtype, tags);
//对应kernel/arch/arm/boot/compressed/head.S中的代码如下
start:
.type start,#function
.rept 8
mov r0, r0
.endr
b 1f
.word 0x016f2818 @ Magic numbers to help the loader
.word start @ absolute load/run zImage address
.word _edata @ zImage end address
1: mov r7, r1 @ save architecture ID
mov r8, r2 @ save atags pointer
bootloader:
关于启动TAGS
/* ATAG_MEM */
*ptr++ = 4;
*ptr++ = 0x54410002;
*ptr++ = SDRAM_SIZE;
*ptr++ = SDRAM_ADDR;
kernel:
Setup.c (kernel/arch/arm/kernel)
static int __init parse_tag_mem32(const struct tag *tag)
{
return arm_add_memory(tag->u.mem.start, tag->u.mem.size);
}
__tagtable(ATAG_MEM, parse_tag_mem32);
本文深入探讨了基于ARM架构的Linux内核从Flash启动的过程。详细分析了启动入口函数的工作原理,以及如何通过特定指令和标签传递内存配置信息给内核。此外,还介绍了内核如何解析启动标签来设置内存。
2028

被折叠的 条评论
为什么被折叠?



