Chinaunix首页 | 论坛 | 博客
  • 博客访问: 534581
  • 博文数量: 103
  • 博客积分: 2024
  • 博客等级: 上尉
  • 技术积分: 1294
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-08 21:17
文章分类

全部博文(103)

文章存档

2012年(2)

2011年(21)

2010年(80)

分类: LINUX

2010-09-25 10:55:41

1,内核的初始化
内核的初始化包括三部分,初始化硬件设备;初始化各内核子系统,建立必要的数据结构;建立init进程,转入用户空间的处理
1.1,内核转入内存后,首先跳入到物理地址1MB处,也就是内核的入口函数startup_32,首先初始化内存管理,中断向量;建立swapper进程的stack;内核跳入startup_32时已处于BIOS设置的保护模式,内核在此还要重新设置自己的保护模式。至此第一阶段的初始化已经完成,主cpu进入第二阶段,次cpu跳入idle进程
1.2 第二阶段进行较高层次的初始化,由start_kernel()完成
对内核的子系统进行初始化,比如,
534     trap_init();
535     init_IRQ();
536     sched_init();
537     time_init();
538     softirq_init();
其中time_init,注册中断处理函数timer_interrupt.
shed_init()对调度部分进行初始化,并初始化timer_bh这些bh机制,为什么放在这里?
1255     for(nr = 0; nr < PIDHASH_SZ; nr++)
1256         pidhash[nr] = NULL;
1257        
1258     init_timervecs();
1259
1260     init_bh(TIMER_BH, timer_bh);            
1261     init_bh(TQUEUE_BH, tqueue_bh);
1262     init_bh(IMMEDIATE_BH, immediate_bh);
现在内存和进程管理已经初始化完,进入init内核线程做一些real work
do_basic_setup()
677     /*
678      * Ok, at this point all CPU's should be initialized, so
679      * we can start looking into devices..
680      */
681 #ifdef CONFIG_PCI
682     pci_init();
683 #endif

712     /* Networking initialization needs a process context */
713     sock_init();

722     start_context_thread();          //启动keventd内核线程
723     do_initcalls();
724
725     /* .. filesystems .. */
726     filesystem_setup();
727
其中do_initcalls完成各子系统的初始化
启动用户空间的init进程,初始化结束
789     execve("/sbin/init",argv_init,envp_init);
其中swapper线程进入cpu_idle(),成为idle线程。
阅读(1843) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-26 15:33:09

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com