内核启动时,设备及驱动初始化的实现( 版本2.6.35.4)


内核启动时,设备及驱动初始化的实现( 版本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
摘要由CSDN通过智能技术生成

内核启动时,设备及驱动初始化的实现( 版本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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值