zoukankan      html  css  js  c++  java
  • Linux内核启动分析笔记

    一、驱动加载

    1.驱动加载调用关系

    start_kernel //init/main.c
        rest_init //最后执行它
            kernel_init //使用kernel_thread创建一个进程执行kernel_init,它里面启动用户进程init
                kernel_init_freeable
                    do_basic_setup
                        driver_init(); //设备模型的建立
                        do_initcalls(); //加载驱动

    2.看驱动框架还是从内核启动代码开始看比较好。

    3.看中断框架还是从内核启动代码开始看比较好。

    4. init进程和kthreadd线程的创建流程

    start_kernel
        rest_init /*start_kernel的最后调用的是rest_init*/
            pid = kernel_thread(kernel_init, NULL, CLONE_FS); /*这里面启动启动init进程的内核线程,执行kernel_init()*/
                free_initmem();/*这个线程里释放了__init段的内存*/
                try_to_run_init_process("/sbin/init") /*调用execve函数簇将pid=1的内核线程替换为init进程(pid=1)*/
            pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
                for(;;) /*用来循环创建内核线程(pid=2)*/
                create_kthread(create); 
  • 相关阅读:
    Windows 服务程序(一)
    API---注册表编程
    API---文件操作
    main(argc, char *argv[])
    C 自删除技术---批处理方式
    分治法排序
    TDD尝试:nodejs单元测试
    尝试create tech team
    Yum重装走过的坑
    求生欲很强的数据库
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10726161.html
Copyright © 2011-2022 走看看