Linux/ARM物理内存探测(2)-uBoot atags
Linux/ARM 物理内存的探测不同于 Linux/X86, 在 Arm Linux 物理内存探测 (1) – CMDLINE 一文中有提及过。在本文中,重点谈下 Kernel 如何解析 uBoot 传过来的内存参数。 tag 数据结构是 uBoot 构建的,其数据结构分布图如下: 与内存有关的两个tag,一个是mem32,另外一个是cmd. 关于cmd这个tag,和build Kernel是的config_cmdline作用是一样的,但是具体选择哪一个还是两者都拷贝在一起,是根据.config的配置情况。对于cmdline的parse,在 Arm Linux 物理内存探测 (1) – CMDLINE 有所描述,这里不再重复。 在 Kernel 中处理 uBoot 传递的 tag 参数的过程如下 start_kernel->setup_arch->setup_machine_tags: 843 static struct machine_desc * __init setup_machine_tags(unsigned int nr) 844 { 845 struct tag *tags = (struct tag *)&init_tags; 846 struct machine_desc *mdesc = NULL, *p; 847 char *from = default_command_line;//Kernel 's data 848 849 init_tags.mem.start = PHYS_OFFSET; 850 851 ...