Arm linux kernel 启动之start_kernel
这里的boot_command_line来自于与config文件里面的CONFIG_CMDLINE,也有可能被ATAG里面的boot参数给覆盖,获得command_line以后对command_line进行解析。这个解析的过程也是在setup.c里面进行的,它首先查找.early_param.init段里面注册的结构体,通过__early_param将early_param结构体注册到这些段里面,实际这个early_param很简单一个就是类似于"initrd="的字符串,用来与command_line里面的字符进行匹配,如果匹配到了就执行early_param里面的那个函数,并将匹配到的字符作为参数传给函数。举个例子比如说我们现在的commadline里面有一句initrd=0x11000000,然后我们首先在early_param.init段里面搜索时候有没有early_param->E,也有可能被ATAG里面的boot参数给覆盖,获得command_line以后对command_line进行解析。这个解析的过程也是在setup.c里面进行的,它首先查找.early_param.init段里面注册的结构体,通过__early_param将early_param结构体注册到这些段里面,实际这个early_param很简单一个就是类似于"initrd="的字符串,用来与command_line里面的字符进行匹配,如果匹配到了就执行early_param里面的那个函数,并将匹配到的字符作为参数传给函数。举个例子比如说我们现在的commadline里面有一句initrd=0x11000000,然后我们首先在early_param.init段里面搜索时候有没有early_param->arg和这个initrd=匹配,找到了就执行它里面的func然后将这个initrd=的值作为参数传进去。
paging_init(mdesc);
这个函数是个大函数,具体内容没有仔细看,需要对arm MMU了解比较深,这里只贴一下source里面关于这个函数的注释:
/*
* paging_init() sets up the page tables, initialises the zone memory
* maps, and sets up the zero page, bad page and bad page tables.
*/
request_standard_resources(&meminfo, mdesc);
这个函数用来申请一些应该是内存资源,具体的内容没有仔细研究,看不大懂。。
cpu_init();
初始化CPU,这里主要是对arm寄存器cpsr的操作
init_arch_irq = mdesc->init_irq;
system_timer = mdesc->timer;
init_machine = mdesc->init_machine;
这里将体系结构相关的几个函数,中断,初始化,定时器之类的赋值给kernel全局变量;
conswitchp = &vga_con;
这里设置了关于console的一个变量,具体不知道怎么用的,以后看console的时候再仔细分析
early_trap_init();
不知道这个函数具体做什么用的。。。 */
/* 基本上我们可以总结出setup_arch主要将一些体系结构的相关信息来赋值给kernel的全局变量,包括cpu啊,machine啊,memory,cahce啊,然后kernel再根据这些函数或者变量来做相应的工作,而且很明显地可以看出来这个setup_arch和前面的head.S,head-common.S,proc-v6.S,board-msm7x27.c是紧密联系在一起的 */
Armlinuxkerne 相关文章:
- Android arm linux kernel启动流程一(11-09)
- Android arm linux kernel启动流程二(11-09)
- Arm Linux Kernel 构建 情景分析(11-09)
- Android arm linux kernel启动流程(11-09)
- arm linux kernel 从入口到start_kernel 的代码分析(11-09)
- Windows CE 进程、线程和内存管理(11-09)