跟踪分析Linux内核的启动过程--实验报告 分析 及知识重点
跟踪分析Linux内核的启动过程
攥写人:杨光 学号:20135233
( *原创作品转载请注明出处*)
( 学习课程:《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 )
知识总结:
****Linux内核中关键目录:
arch:不同cpu的支持,我们主要关注的是其中x86文件夹
init:内核启动的相关代码,期中main.c是内核启动的起点,main.c中的start_kernel是内核初始化的起点
kernel:Linux内核的核心代码所在
ipc:进程通信相关
fs:文件系统
mm:内存管理
net:网络相关
****0号进程:rest_init
它再创建kernel_init,创建1号进程init
****1号进程、第一个用户态进程:init
****trap_init:中断初始化
****sched_init:进程调度初始化
实验部分:
*************使用自己电脑配置环境过程*************
首先,使用wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz命令下载内核文件

下载完成后,使用 xz -d linux-3.18.6.tar.xz tar -xvf linux-3.18.6.tar命令进行解压

解压完进入linux-3.18.6文件夹make i386_deconfig

然后make安装

此处由于被墙,我是使用的从网易云课堂下载的menu包,自己复制到虚拟机上


由此,虚拟机的环境便搭建完成了,之后跟实验楼过程基本一致
***********实验楼过程***********
cd LinuxKernel 进入目录
使用qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img命令启动内核

使用qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S指令
(
-S cpu初始化之前,冻结启动,之后gdb的过程中输入“c”进入下一步
-s 在端口上创建tcp接口
另开一个shell窗口,使用gdb命令进行调试
(注意!必须先进入 LinuxKernel文件夹,不然之后file会找不到文件,下图就是进入的示范)

现在再gbd就没问题啦,加载符号表,设置端口,断点

设置了断点之后,输入“c”进行下一步,此时内核会运行到断点位置停止

回到shell,使用list命令列出此时的代码段

设置新的断点rest_init,然后使用“c”命令继续

此时内核运行的状态

使用list命令列出此时的代码段

根据实验中追踪到的行数,在代码中找到对应位置,进行分析 代码链接http://codelab.shiyanlou.com/xref/linux-3.18.6/
***********************************************************************
总结分析:
*内核启动的代码在 init文件夹main.c文件中 的 start_kernel

*创建pcb

*下图分别为trap(中断)mm(内存管理) sched(进程调度) 模块的初始化

*start_kernel函数的最后一句是rest_init();
这个进程在内核启动时就一直存在,是0号进程,0号进程是最终的idle进程(rest_init)

*这个0号进程创建了1号进程和其他的服务线程
1号进程(第一个用户态进程):
服务线程:
*kernel_init中,下图红线所划就是第一个用户态进程的创建(1号进程)

*在0号进程创建1号进程后,一个进程创建另一个进程和线程,一生二、二生三、三生万物,系统内核就启动了
跟踪分析Linux内核的启动过程--实验报告 分析 及知识重点的更多相关文章
- 20135202闫佳歆--week3 跟踪分析Linux内核的启动过程--实验及总结
实验三:跟踪分析Linux内核的启动过程 一.调试步骤如下: 使用gdb跟踪调试内核 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd r ...
- Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程
Linux内核分析第三周学习博客--跟踪分析Linux内核的启动过程 实验过程截图: 过程分析: 在Linux内核的启动过程中,一共经历了start_kernel,rest_init,kernel_t ...
- 实验三:跟踪分析Linux内核的启动过程
实验三:跟踪分析Linux内核的启动过程 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.16 ...
- 跟踪分析Linux内核的启动过程小解
跟踪分析Linux内核的启动过程 “20135224陈实 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029 ...
- 20135239 益西拉姆 linux内核分析 跟踪分析Linux内核的启动过程
回顾 1.中断上下文的切换——保存现场&恢复现场 本节主要课程内容 Linux内核源代码简介 1.打开内核源代码页面 arch/目录:支持不同CPU的源代码:其中的X86是重点 init/目录 ...
- 跟踪调试Linux内核的启动过程
跟踪调试Linux内核的启动过程---使用gdb 符钰婧 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...
- Linux内核分析 实验三:跟踪分析Linux内核的启动过程
贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...
- Linux内核分析实验三----跟踪分析Linux内核的启动过程
一.Linux内核源代码介绍 1.根目录 arch/x86目录下的代码是我们重点关注的,arch中包括支持不同CPU的源代码. init目录下包含内核启动相关的代码,如main.c(start_ker ...
- Linux内核分析之跟踪分析Linux内核的启动过程
一.实验过程 使用实验楼虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-/arch/x86/boot/bzImage -initrd rootfs.img ...
随机推荐
- linux系统日志自动切割工具----logrotate
参考资料 :https://www.cnblogs.com/kevingrace/p/6307298.html 对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务 ...
- Hive-1.2.1_03_DDL操作
Hive官方文档:Home-UserDocumentation Hive DDL官方文档:LanguageManual DDL 参考文章:Hive 用户指南 注意:各个语句的版本时间,有的是在 hiv ...
- 三叔学FPGA系列之二:Cyclone V中的POR、配置、初始化,以及复位
对于FPGA内部的复位,之前一直比较迷,这两天仔细研究官方数据手册,解开了心中的诸多疑惑,感觉自己又进步了呢..... 原创不易,转载请转原文,注明出处,谢谢. 一.关于POR(Power-On ...
- Dubbo+zookeeper+SpringMVC搭建最简单的分布式项目
Dubbo 是什么 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案 SOA服务治理方案 Dubbo 架构流程图 Provider:服务提供方 Consumer:服务消费者 Registry ...
- JS中=>,>>>是什么意思
最近经常看到 JS中=>,符号,于是查了一下别人的博客 =>是es6语法中的arrow function 举例:(x) => x + 6 相当于 function(x){ ret ...
- sahrepoint 上传到文档库
sharepoint学习笔记汇总 http://blog.csdn.net/qq873113580/article/details/20390149 /// <summary&g ...
- 整数划分 NBUT - 1046
题目很简单,把一个正整数分割成N个正整数之和.但是你得把所有的划分方法列出来,以字典序升序排序.对于每种划分方法,小的数字在前面. 思路:直接深度优先搜索,注意要判断前一位一定会比将要放入答案的因子小 ...
- 统计硬币 HDU - 2566 (三种解法:线性代数解法,背包解法,奇思妙想解法 >_< )
题号放这里自己去找吧. HDU-2566 这题最开始用的dp,然后,被同学用奇思妙想过了. >_< 开心! -_- !! 然后,被我线性代数给过了. 方法一:dp 将其化为01背包,只 ...
- php单例模式实现对象只被创建一次
这是我在php面试题中遇到的一道试题,单例模式按字面来看就是某一个类只有一个实例,这样做的好处还是很大的,比如说数据库的连接,我们只需要实例化一次,不需要每次都去new了,这样极大的降低了资源的耗费. ...
- php 对象教程
[PHP面向对象(OOP)编程入门教程]6.如何去使用对象中的成员 作者:qianyunlai.com 发布于:2012-05-19 15:02 分类:PHP基础 浏览(280) 上面看到PHP ...