29、(8)Linux内核启动第二阶段之 setup_arch函数分析
2011-08-23 16:03
555 查看
此函数在arch/arm/kernel/setup.c中定义
void __init setup_arch(char **cmdline_p)
{
struct tag *tags = (struct tag *)&init_tags;
struct machine_desc *mdesc;
char *from = default_command_line;
unwind_init();
setup_processor(); //进行处理器相关的一些设置
mdesc = setup_machine(machine_arch_type); //获得开发板的
machine_desc结构
machine_name = mdesc->name;
if (mdesc->soft_reboot)
reboot_setup("s");
if (__atags_pointer)
tags = phys_to_virt(__atags_pointer);
else if (mdesc->boot_params) //定义了Bootloader传入参数的地址
tags = phys_to_virt(mdesc->boot_params);
/*
* If we have the old style parameters, convert them to
* a tag list.
*/
if (tags->hdr.tag != ATAG_CORE)
convert_to_tag_list(tags);
if (tags->hdr.tag != ATAG_CORE)
tags = (struct tag *)&init_tags;
if (mdesc->fixup)
mdesc->fixup(mdesc, tags, &from, &meminfo);
if (tags->hdr.tag == ATAG_CORE) {
if (meminfo.nr_banks != 0) //如果已经在内核中定义了meminfo结构
squash_mem_tags(tags); 则忽略内存tag
save_atags(tags);
parse_tags(tags); //解释每个tag
}
init_mm.start_code = (unsigned long) _text;
init_mm.end_code = (unsigned long) _etext;
init_mm.end_data = (unsigned long) _edata;
init_mm.brk = (unsigned long) _end;
memcpy(boot_command_line, from, COMMAND_LINE_SIZE);
boot_command_line[COMMAND_LINE_SIZE-1] = '\0';
parse_cmdline(cmdline_p, from); //对命令行进行一些先期的处理
paging_init(mdesc); //重新初始化页表
相关文章推荐
- linux内核启动第二阶段之setup_arch()函数分析-2.6.36
- linux内核启动第二阶段分析-setup_arch()函数
- linux内核启动第二阶段之setup_arch()函数分析-2.6.36
- linux内核启动第二阶段之setup_arch()函数分析-2.6.36
- linux内核启动第二阶段分析-setup_arch()函数
- linux内核启动第二阶段之setup_arch()函数分析-2.6.36
- 学习笔记 --- LINUX内核启动第二阶段分析(不考虑自解压过程)
- linux内核启动第二阶段分析-2.6.36
- 25、(4)Linux内核启动引导阶段之 __create_page_table函数分析
- linux内核起动1-启动参数(启动参数的获取和处理,分析setup_arch)
- 27、(6)Linux内核启动引导阶段之 __enable_mmu函数分析
- [置顶] linux内核启动2-setup_arch中的内存初始化(目前分析高端内存)
- Linux内核源码分析_setup_arch函数的主要作用
- linux内核启动第二阶段分析 start_kernel
- [置顶] linux内核启动1-启动参数(启动参数的获取和处理,分析setup_arch)
- linux内核启动第二阶段分析
- setup_arch函数分析
- u-boot源码分析 --- 启动第二阶段003
- setup_arch()函数分析4--cpu_init
- uboot学习笔记(三)启动源码分析之第二阶段(c语言部分)