内核启动时,设备及驱动初始化的实现( 版本2.6.35.4)
参考了网页:http://blog.csdn.net/lemon_fantasy/archive/2009/02/17/3900590.aspx
http://blog.chinaunix.net/u2/68846/showart_694377.html
Uboot完成系统的引导并将Linux内核拷贝到内存之后,bootm -> do_bootm_linux()跳转到kernel的起始位置;压缩过的kernel入口在arch/x86/boot/compressed/head_32.S; 在head_32.S的startup_32()调用decompress_kernel(arch/x86/boot/compressed/Misc.c);解压后的映像就被移动到从物理地址0x00100000开始的最终位置,然后跳转到物理地址0x00100000执行。在startup_32执行的最后,将跳转到start_kernel()函数。start_kernel()中完成了一系列系统初始化,设备及驱动的注册即在此时完成
///<./init/main.c>-------------------------
main.c中的start_kernel()中的函数rest_init()将创建第一个核心线程kernel_thread(kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND)),并调用kernel_init函数:
static int __init kernel_init(void * unused)
{
......
do_basic_setup();
........
}
而:
static void __init do_basic_setup(void)
{
init_workqueues();
cpuset_init_smp();
usermodehelper_init();
init_tmpfs();
driver_init(); //建立设备模型子系统
init_irq_proc();
do_ctors();
do_initcalls();//系统初始化(包括设备,文件系统,内核模块等)
}
///<./drivers/base/init.c>-------------------------
/**
* driver_init - initialize d
内核启动时,设备及驱动初始化的实现( 版本2.6.35.4)
最新推荐文章于 2022-12-30 00:00:00 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)
内核启动时,设备及驱动初始化的实现( 版本2.6.35.4)
参考了网页:http://blog.csdn.net/lemon_fantasy/archive/2009/02/17/3900590.aspx
http://blog.chinaunix.net/u2/68846/showart_694377.html
Uboot完成系统的引导并将Linux内核拷贝到内存之后,bootm -> do_bootm_linux()跳转到k