/*
* HACK ALERT! This is early. We're enabling the console before
* we've done PCI setups etc, and console_init() must be aware of
* this. But we do want output early, in case something goes wrong.
*/
console_init();
这个函数是用来初始化控制台,从这个函数之后就可以输出内容到控制台了。在这个函数初化之前,都没有办法输出内容,就是输出,也是写到输出缓冲区里,缓存起来,等到这个函数调用之后,就立即输出内容。
if(panic_later)
panic(panic_later,panic_param);
这段代码是判断分析输入的参数是否出错,如果有出错,就启动控制台输出之后,立即打印出错的参数,以便用户立即看到出错的地方。
lockdep_info();
这个函数是打印锁的依赖信息,用来调试锁。通过这个函数可以查看目前锁的状态,以便可以发现那些锁产生死锁,那些锁使用有问题。
/*
* Need to run this when irqs are enabled, because it wants
* to self-test [hard/soft]-irqs on/off lock inversion bugs
* too:
*/
locking_selftest();
这个函数是用来测试锁的API是否使用正常,进行自我测试。比如测试自旋锁、读写锁、一般信号量和读写信号量。
#ifdefCONFIG_BLK_DEV_INITRD
if(initrd_start && !initrd_below_start_ok &&
page_to_pfn(virt_to_page((void *)initrd_start)) < min_low_pfn){
printk(KERN_CRIT"initrd overwritten (0x%08lx < 0x%08lx) - "
"disabling it.\n",
page_to_pfn(virt_to_page((void *)initrd_start)),
min_low_pfn);
initrd_start= 0;
}
#endif
这段代码是要支持初始RAM 磁盘,内核必须要使用CONFIG_BLK_DEV_RAM 和CONFIG_BLK_DEV_INITRD 选项进行编译。
vmalloc_init();
这个函数是用来初始化虚拟内存,主要设置虚拟内存表,以便后面可以使用。
vfs_caches_init_early();
这个函数是虚拟文件系统的缓存初始化。
cpuset_init_early();
这个函数是初始化CPU集合的内存分配变量,以便任务的内存分配与CPU集合进行比较,如果两者不一样,就更新任务的内存允许分配的内存大小。