linux内核分析实验报告,跟踪分析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命令下载内核文件

352ec7ceb0ef591ad2aa0c03c24b9c7f.png

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

61965d206d1a14d20b3beb0fdfa6b1c3.png

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

3fdff985bc49939b4e5d61981069ffad.png

然后make安装

af9e4c3ebec3bbbdac328d4ea96d21f7.png

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

633312dde3b82a9f4801755176454523.png

a9694c0ac0782e043e0331e68101990d.png

由此,虚拟机的环境便搭建完成了,之后跟实验楼过程基本一致

***********实验楼过程***********

cd LinuxKernel 进入目录

使用qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img命令启动内核

c4f6e45089d9db612acf781c02c4de40.png

使用qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S指令

(

-S cpu初始化之前,冻结启动,之后gdb的过程中输入“c”进入下一步

-s 在端口上创建tcp接口

5d01fddec0b30a95f8ea6ff104425765.png

另开一个shell窗口,使用gdb命令进行调试

(注意!必须先进入 LinuxKernel文件夹,不然之后file会找不到文件,下图就是进入的示范)

0e55a91a90cdb781f393a4b829ad6cc0.png

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

7111528cf60c97163b89c2db115a07d6.png

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

7b84e29aa3e7f11328b0ffcec5d77546.png

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

1861cfcf3981569188fbccddf853fbb3.png

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

79bb769e9c4ffd03c4865a39ea120670.png

此时内核运行的状态

d2f0d82c4c61aa6602a5694d3e0251eb.png

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

0b32c5fd9c2a271920b510edd2be181a.png

***********************************************************************

总结分析:

*内核启动的代码在 init文件夹main.c文件中 的 start_kernel

fb72cb6dee3842fa3ce6a7d57a0faabb.png

*创建pcb

a4222176b212d96d41f4252f4e35142d.png

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

5ed9b4bd2be4b0e85a2dffab9d6f17a3.png

*start_kernel函数的最后一句是rest_init();

这个进程在内核启动时就一直存在,是0号进程,0号进程是最终的idle进程(rest_init)

6f7643010af39048a75a6c432e250cc8.png

*这个0号进程创建了1号进程和其他的服务线程

1号进程(第一个用户态进程):

f92dd0e880459a300f2bbfada3ef0957.png

服务线程:

40b5c47c510fd791459b95800e32372b.png

*kernel_init中,下图红线所划就是第一个用户态进程的创建(1号进程)

40a742e9411836fd0ca0edaa5068533e.png

*在0号进程创建1号进程后,一个进程创建另一个进程和线程,一生二、二生三、三生万物,系统内核就启动了

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 姓名:王朝宪 注: 原创作品转载请注明出处   MOOC课程http://mooc.study.16 ...

跟踪分析Linux内核的启动过程小解

跟踪分析Linux内核的启动过程 “20135224陈实  + MOOC课程http://mooc.study.163.com/course/USTC-1000029 ...

20135239 益西拉姆 linux内核分析 跟踪分析Linux内核的启动过程

回顾 1.中断上下文的切换——保存现场&恢复现场 本节主要课程内容 Linux内核源代码简介 1.打开内核源代码页面 arch/目录:支持不同CPU的源代码:其中的X86是重点 init/目录 ...

跟踪调试Linux内核的启动过程

跟踪调试Linux内核的启动过程---使用gdb 符钰婧 原创作品转载请注明出处 MOOC课程http://mooc.study.163.com/course/UST ...

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 ...

随机推荐

hdu 2102 A计划-bfs

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

jquery 操作iframe的几种方法总结

iframe在复合文档中经常用到,利用jquery操作iframe可以大幅提高效率,这里收集一些基本操作 DOM方法: 父窗口操作IFRAME:window.frames["iframeSo ...

[BZOJ2803][Poi2012]Prefixuffix

2803: [Poi2012]Prefixuffix Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 219  Solved: 95[Submit][St ...

很励志的帖子,转来自勉,也反省一下自己写码这几年【奋斗10年,一个.NET程序员从0到拥有5系】

http://bbs.csdn.net/topics/390833230 想想自己毕业近8年,真正写码也5年.从当初毕业时的拒绝写码,到迫不得已开始写码,是命运也好,是自己的不努力也罢.今天看来,写码 ...

在Servlet(或者Filter,或者Listener)中使用spring的IOC容器

web.xml中的加载顺序为:listener > filter > servlet > spring. 其中filter的执行顺序是filter-mapping在web.xml中出 ...

php单例连接数据库

mysql_connect() 后续的php就不支持了,所以会报错. 现在改为使用mysqli_connect(),需要开启php扩展哟! <?php /** * 设计模式之单例模式 * $_i ...

&OpenCurlyDoubleQuote;Java是编译执行的语言”这句话对吗?

现在让你谈谈对Java平台的理解,你是否会感觉内容过于庞大?这个问题是比较宽泛的,Java发展到现在已经不仅仅是语言这么简单了,Java平台涉及的,包括但不仅限于下面提到的这些内容: Java语言本身 ...

centos----------centos下如何安装phpstorm

1.首先打开centos下的谷歌浏览器,找到phpstorm官网下载linux版本.PhpStorm-2016.3.2.tar.gz 2.然后gunzip PhpStorm-2016.3.2.tar. ...

CentOS7查看开放端口命令及开放端口号

CentOS 7查看以开放端口命令:firewall-cmd —list-ports 查看端口是否开放命令:第一个方法就是使用lsof -i:端口号命令行,例如lsof -i:80.如果没有任何信息输 ...

word2vec 的理解

1.CBOW 模型 CBOW模型包括输入层.投影层.输出层.模型是根据上下文来预测当前词,由输入层到投影层的示意图如下: 这里是对输入层的4个上下文词向量求和得到的当前词向量,实际应用中,上下文窗口大 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值