构造一个简单的Linux系统MenuOS

复习

计算机三大法宝

存储程序计算机
函数调用堆栈
中断

操作系统两把宝剑

中断上下文的切换
进程上下文的切换

一、Linux内核源代码简介

函数目录

Linux-3.18.6/arch/x86

Linux-3.18.6/init:内核启动的相关代码基本都存在该目录下

   start_kernel函数相当于普通C程序的main函数

Linux-3.18.6/kernel:Linux内核的核心代码在该目录下

fs:file system文件系统

ipc:进程间通信

二、构造一个简单的Linux系统

实验楼环境

cd Linuxkernel/

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

qemu:启动一个虚拟机平台
-kernel:给一个内核,操作系统
-initrd:驱动所需的硬盘
rootfs.img:放一个可执行文件由menuOS源代码编译成的init

进入menu系统,支持三个命令 help version quit

自己搭建

1、下载内核源代码编译内核(下载,解压,编译)

2、制作根文件系统(创建目录存放文件系统)

3、启动menuOS

三、实验gdb跟踪调试Linux内核的方法

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -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)file linux-3.18.6/vmlinux:在gdb界面中targe remote之前加载符号表

(gdb)target remote:1234:建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行

(gdb)break start_kernel:断点的设置可以在target remote之前,也可以在之后

设置完断点后,输入c命令继续执行,函数会停在断点处。输入list指令可以查看断点处的代码

四、简单分析start_kernel

init_tast:手工创建的pcb,0号进程即最终的idle进程。当系统没有进程需要执行时就调度到idle进程

trap_init:硬件中断,初始化一些中断向量,系统调用

sched_init:进程调度模块初始化

rest_init:创建1号进程

第一个用户态进程:init_process,1号进程,找默认路径下的程序作为1号进程
kthreadd:内核线程,用来管理系统资源

mm_init:内存管理模块初始化

总结

道生一,一生二,二生三,三生万物

Linux内核分析作业三的更多相关文章

  1. Linux内核分析(三)----初识linux内存管理子系统

    原文:Linux内核分析(三)----初识linux内存管理子系统 Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linu ...

  2. linux内核分析第三周

    20135103王海宁 linux内核分析第三周 http://mooc.study.163.com/course/USTC-1000029000  按照课堂提供的方法,命令行一行行敲上去,我是手机缓 ...

  3. LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS

    LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163. ...

  4. 20135327郭皓--Linux内核分析第三周 构造一个简单的Linux系统MenuOS

    Linux内核分析第三周  构造一个简单的Linux系统MenuOS 前提回顾 1.计算机是如何工作的三个法宝 1.存储程序计算机 2.函数调用堆栈 3.中断 2.操作系统的两把宝剑 中断上下文的切换 ...

  5. Linux内核分析第三周学习笔记

    linux内核分析第三周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  6. Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程

    Linux内核分析第三周学习博客--跟踪分析Linux内核的启动过程 实验过程截图: 过程分析: 在Linux内核的启动过程中,一共经历了start_kernel,rest_init,kernel_t ...

  7. Linux内核分析——第三周学习笔记

    20135313吴子怡.北京电子科技学院 chapter1 知识点梳理 一.Linux内核源代码简介 (视频中对目录下的文件进行了简介,记录如下) arch目录 占有相当庞大的空间 arch/x86目 ...

  8. linux内核分析作业8:理解进程调度时机跟踪分析进程调度与进程切换的过程

    1. 实验目的 选择一个系统调用(13号系统调用time除外),系统调用列表,使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 分析汇编代码调用系统调用的工作过程,特别是参数的传递的方 ...

  9. Linux内核分析作业7:Linux内核如何装载和启动一个可执行程序

            1.可执行文件的格式 在 Linux 平台下主要有以下三种可执行文件格式: 1.a.out(assembler and link editor output 汇编器和链接编辑器的输出) ...

随机推荐

  1. SDN第三次上机

    1.创建以下拓扑(可采用任意方式) 2.利用OVS命令下发流表,实现VLAN功能 3.利用OVS命令查看流表 4.验证性测试 5.Wireshark抓包验证

  2. Django商城项目笔记No.1项目准备工作

    Django商城项目笔记No.1项目准备工作 一.本项目商城属于B2C商业模式 二.项目采用前后端分离的应用模式 前端使用Vue.js 后端使用Django REST framework 1.创建gi ...

  3. eclipse 汉化详细方法

    1.首先确认自己的 eclipse 是哪个版本,这个很关键,涉及到后面要用到的语言包需要与版本匹配,启动 eclipse,观察对应的版本号,比如我用的是 Photon 版本 2.参照官方给的方法进行下 ...

  4. 【Android自动化】unittest测试框架关于用例执行的几种方法

    # -*- coding:utf-8 -*- import unittest class test(unittest.TestCase): def setUp(self): print 'This i ...

  5. 数据同步canal客户端

    1.增量订阅.消费设计 get/ack/rollback协议介绍: ① Message getWithoutAck(int batchSize),允许指定batchSize,一次可以获取多条,每次返回 ...

  6. JavaScript函数注意点

    1.return 请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回.因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑. 如果没有return语句,函数执行 ...

  7. Android 在ScrollView中嵌入ViewPage后ViewPage不能很好的工作的问题解决

    解决办法:重写ScrollView,如下代码所示: public class MyScrollView extends ScrollView{ private GestureDetector mGes ...

  8. DQN(Deep Reiforcement Learning) 发展历程(一)

    目录 马尔可夫理论 马尔可夫性质 马尔可夫过程(MP) 马尔可夫奖励过程(MRP) 值函数(value function) MRP求解 马尔可夫决策过程(MDP) 效用函数 优化的值函数 贝尔曼等式 ...

  9. jqgrid 滚动分页

    有时,我们不想在底部显示分页信息,而是通过用户滚动鼠标,当鼠标滚到到底自动加载下一页数据,再滚动再加载直至数据全部加载完毕.如何配置? 设置 scroll:true   emptyrecords用于在 ...

  10. MSF里MS17_010利用模块笔记

    1.   auxiliary/scanner/smb/smb_ms17_010      //扫描检测漏洞辅助模块 扫描结果这里可以看到 2,3,4这几台主机存在此漏洞! 2.     auxilia ...