《Linux内核分析》第三周学习小结 构造一个简单的Linux系统OS
郝智宇 无转载 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
第三周
构造一个简单的Linux系统MenuOS
一、Linux内核源代码简介
- 三个法宝和两把宝剑:
(1) 三个法宝:存储程序计算机、函数调用堆栈、终断
(2) 操作系统的两把宝剑:中断上下文的切换(保存现场和恢复现场)、进程上下文的切换
- arch/x86目录下的代码是我们重点关注的

- init目录:内核启动相关的代码基本都在init目录下
main.c在init目录中
4. kernel: start_kernel函数相当于普通C程序的main函数
Linux内核的核心代码在kernel目录中


二、构造一个简单的Linux系统MenuOS
- Init是第一个用户态进程,是1号进程
- 用实验楼构造

有关help命令的参数与说明:

三、跟踪调试Linux内核的启动过程
1.使用gdb跟踪调试Linux内核的方法:


qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明:
// -S freeze CPU at startup
(use ’c’ to start execution) cpu初始化之前把它冻结起来
// -s shorthand for -gdb
tcp::1234 在1234端口上建立了一个gdb
server
若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项
结果:

另开一个shell窗口:
输入gdb,打开;加载符号表;连接到刚刚被冻结的Linux系统;设置断点

输入c继续执行:

输入list查看断点处的代码:

2.简单分析一下start_kernel
init_task即手工创建的,0号进程即最终的idle进程
不管分析内核的哪一部分都会涉及到start_kernel
当系统没有进程需要执行时就调度到idle进程
一、总结
对Linux系统启动过程的理解:
有一个全局变量init_task,即手工创建的PCB,0号进程,即最终的idle进程。Kernelthread是0号进程,它创建了1号进程kernelinit,以及它的一些服务的内核线程,
这样整个系统启动起来了。
rest_init()中有kernel_thread(kernel_init,NULL,CLONE_FS)
kernel_init中有run_init_process,
run_init_process创建了1号进程
《Linux内核分析》第三周学习小结 构造一个简单的Linux系统OS的更多相关文章
- LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS
LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163. ...
- Linux第三周学习总结——构造一个简单的Linux系统MenuOS
第三周学习总结--构造一个简单的Linux系统MenuOS 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...
- Linux内核分析第三周学习笔记
linux内核分析第三周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程
Linux内核分析第三周学习博客--跟踪分析Linux内核的启动过程 实验过程截图: 过程分析: 在Linux内核的启动过程中,一共经历了start_kernel,rest_init,kernel_t ...
- 《Linux内核分析》第一周学习小结 计算机是如何工作的?
<Linux内核分析>第一周.计算机是如何工作的? 20135204 郝智宇 一.存储程序计算机工作模型 1. 冯诺依曼体系结构: 数字计算机的数制采用二进制:计算机应该按照程 ...
- Linux内核分析——第三周学习笔记20135308
第三周 构造一个简单的Linux系统MenuOS 计算机三个法宝: 1.存储程序计算机 2.函数调用堆栈 3.中断 操作系统两把宝剑: 1.中断上下文的切换:保存现场和恢复现场 2.进程上下文的切换 ...
- Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...
- Linux内核分析第三周学习总结
Linux内核源码简介 arch/ 该目录中包含和硬件体系结构相关的代码,每种平台占一个相应的目录. 和32位PC相关的代码存放在x86目录下. 每种平台至少包含3个子目录:kernel(存放支持体系 ...
- Linux内核分析——第三周学习笔记
20135313吴子怡.北京电子科技学院 chapter1 知识点梳理 一.Linux内核源代码简介 (视频中对目录下的文件进行了简介,记录如下) arch目录 占有相当庞大的空间 arch/x86目 ...
随机推荐
- leetcode 6. ZigZag Conversion [java]
自己写的: if(numRows == 1) return s; int ll = s.length() / 2 + 1; Character tc[] = new Character[numRows ...
- BBS论坛博客系统
目录 BBS网站需求分析 BBS数据库设计 BBS用户登录 BBS用户注册 BBS网站首页 BBS个人首页 后台管理系统搭建 网站全部源码
- LVM操作
创建LVM,并挂载 1.对磁盘进行分区fdisk /dev/sdb [root@testdb ~]# fdisk /dev/sdbDevice contains neither a valid DOS ...
- CHECKEDLISTBOX用法总结
C# CHECKEDLISTBOX用法总结 一般认为:foreach (object obj in checkedListBox1.SelectedItems)即可遍历选中的值. 其实这里遍历的只 ...
- Springboot集成Common模块中的的全局异常处理遇见的问题
由于项目公共代码需要提取一个common模块,例如对于项目的文件上传,异常处理等,本次集成common代码时候maven引入common的全局异常处理代码之后发现不生效,由于common包路径与自己的 ...
- 【转】IE内嵌google chrome frame解决浏览器兼容问题
参考文献: http://www.pseudowired.com/2012/12/04/tomcat-http-header-manipulation/(html中自动添加使用chrome的heade ...
- Unicode,GBK,GB2312,UTF-8概念基础(转载)
第一篇:JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础本部分采用重用,转载一篇文章来完成这部分的目标.来源:holen'blog 对字符编码与Unicode,IS ...
- MetaMask/metamask-extension-provider
用来探测你的浏览器中有没有安装metamask插件 https://github.com/MetaMask/metamask-extension-provider MetaMask Extension ...
- oracle11g dataguard 备库数据同步的检查方法
概述: 一.环境 主库: ip地址:192.168.122.203 oracle根目录:/data/db/oracle SID:qyq 数据文 ...
- STM32 串口中断总结
原文:https://blog.csdn.net/weixin_42480952/article/details/82981409 最近在学习使用dma传输方式进行串口通讯,感觉这个很详细,存一下 . ...