从start_kernel到init
来源:互联网 发布:rs232c vb 编辑:程序博客网 时间:2024/05/21 11:08
邵帅 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
文件夹架构
arch:支持不同的CPU的源代码,其中的关键目录包括:Documentation、drivers、firewall、fs、include等
documentation:文档目录
fs:文件系统
init:内核启动相关的代码main.c、Makefile等基本都在该目录中。(main.c中的start_ kernel函数是Linux内核启动的起点,即初始化内核的起点)
kernel:Linux内核核心代码在kernel目录中。
lib:公用的库文件 mm:内存管理的代码 scripts:与脚本相关的代码
security:与安全相关的代码
sound目录:与声音相关的代码
tools目录:与工具相关的代码
net:与网络相关的代码
readme:介绍了什么是Linux,Linux能够在哪些硬件上运行,如何安装内核源代码等
调试内核
使用实验楼,用gdb进行跟踪调试内核,按照老师给的命令,首先我把断点打在start_kernel()。
在这里BootLoader开始进行系统初始化,然后就到start_kernel()这里,在这里开始使用C语言实现全部功能。在start_kernel()函数中,将系统需要的功能进行初始化,例如RCU,时钟,哈希表等等。最后,调用了rest_init(),进行接下来的初始化。然后我把断点打在rest_init()函数处。
可以看到显示的是start_kernel()中各种初始化信息,在rest_init()中调用kernel_thread()函数,启动内核线程,在之后的schedule()函数idle进程释放占用的cpu,把cpu给更需要的进程,最后在调用cpu_idle(),让cpu继续进入idle状态,idle进程像一个大循环,把空闲的cpu占用,分配给idle进程,把空闲进程调度给需要的进程。
关键在kernel_thread()函数,这个函数中对设备驱动进行初始化,并且最后用init_post()进入用户空间的初始化进程,在init_post()函数中,内核进行最后的初始化,将之前的init函数和数据舍弃,释放内存,给其他进程用,最后调用consle,整个初始化结束。
总结
整个内核初始化一步扣着一步,代码十分简洁干净,令人不禁顶礼膜拜。Linux大法好!
- 从start_kernel到init
- 从start_kernel到init
- 从start_kernel到init
- linux内核从start_kernel到init
- 内核初始化-从start_kernel到init
- 分析Linux内核启动过程:从start_kernel到init
- Linux内核分析(三)从start_kernel到init
- gdb跟踪调试内核从start_kernel到init进程启动
- 学习Linux内核启动过程:从start_kernel到init
- 利用gdb分析从start_kernel到init启动的过程
- 分析Linux内核启动过程:从start_kernel到init
- 跟踪内核从start_kernel到init进程启动
- Linux系统启动分析-从start_kernel到init进程的启动
- 从start_kernel到init进程启动 《Linux内核分析》笔记
- 【转】读核笔记-内核初始化-从start_kernel到init
- linux启动流程(从start_kernel中的rest_init函数到init进程(1))
- 读核笔记-内核初始化-从start_kernel到init
- 跟踪分析Linux内核的启动过程(从start_kernel到init进程)
- Jetty入门
- win10Java 环境配置
- java面试题
- ZF_20160313_第二周
- [bzoj2724]蒲公英
- 从start_kernel到init
- Android 6.0中新的权限模型介绍
- 如何把答题记录显示到页面上去
- 浏览器多进程&多连接&keepalive&请求合并
- Swift - Singleton
- 二叉查找树的各种操作
- 求最大子序列算法
- 跳表(skiplist)的原理和实现
- doc环境导出数据库操作