构造一个简单的Linux内核的MenuOS

20135109 高艺桐

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

一、Linux内核源代码简介

arch/x86目录下的代码是我们最重点关注的

fs/文件系统

init/内核启动相关的代码

start_kernel函数相当于C语言的main函数

kernel/Linux内核的核心代码

mm/内存管理代码

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

使用实验楼构造的实验截图:

自己搭建实验楼的过程:

  

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

一、使用gdb跟踪调试Linux内核的方法

(1)使用gdb跟踪调试内核,冻结起来

(2)使用水平分割,新创建一个窗口使用gdb

(3)加载Linux符号表,用tarket remote连接端口,用break设置断点(内核启动起点)

(4)设置新断点rest_init

(5)执行list操作

二、简单分析一下Start_Kernel

内核的启动过程:init目录下的main.c中的内核启动起点start_kernel

init_task 即手工创建的PCB,0号进程即最终的Idle进程。

trap_init 初始化中断,设置中断门,系统陷阱门。

init_process Linux系统的第一个用户态进程,根目录下的init程序(作为1号进程)由kernel_init创建。

rest_init 0号进程,一直存在的进程,创建1号进程。

当系统没有进程需要执行时就调度到idle进程。

四、实验总结

通过本周的学习,我自己完成了从start_kernel到init进程启动的实验,深入体会到了内核启动的过程。

首先要先搭建一个Linux环境,因为计算机内存不允许,所以我直接使用实验楼中的环境;其次启动内核并使用gdb跟踪调试内核;之后用targe remote加载符号项,创建连接;最后用break设置断点。

实验中rest_init作为 0号进程,一直存在着并创建1号进程;init_process Linux作为系统的第一个用户态进程,根目录下的init程序(作为1号进程)由kernel_init创建;当系统没有进程需要执行时就调度到idle进程。

本次实验中,因为在实验楼中完成,所以(gdb)vmlinux语句执行有瑕疵,换成了file/home/shiyanlou/LinuxKernel/linux-3.18.6/vmlinux,最终完成了实验。

转载于:https://www.cnblogs.com/gyt0520/p/5266848.html

构造一个简单的Linux内核的MenuOS相关推荐

  1. 《Linux内核分析》 第三周 构造一个简单的Linux系统MenuOS

    Linux内核分析 第三周 构造一个简单的Linux系统MenuOS 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

  2. 构造一个简单的操作系统内核,详解进程切换细节

    (1)基本功能介绍 如题,本文将介绍如何构造一个简单的操作系统内核(基于内核版本3.9.4 ).它有以下功能: 1:进程的管理 2:进程的初始化 3 : 进程基于时间片的调度 (2)实操步骤 1 安装 ...

  3. 制作一个简单的linux

    我这里是借助宿主机做的一个简单的Linux,我们只要知道一个Linux启动过程需要什么,这里制作就简单的多了.不过没有基础的也没关系,我写的很详细,没有基础的看了我写的步骤只要细心也是会做出来的,我这 ...

  4. windows linux内核版本,微软决定在Windows10中发布一个完整的Linux内核

    原标题:微软决定在Windows10中发布一个完整的Linux内核 近年来,微软让Linux开发者社区的许多人都感到惊喜,包括在Windows中加入了Bash shell,在Win10中加入了本地Op ...

  5. 构造一个简单的神经网络,以DQN方式实现小游戏的自动控制

    在之前的文章中,我们做了如下工作: 如何设计一个类flappy-bird小游戏:[python实战]使用pygame写一个flappy-bird类小游戏 | 设计思路+项目结构+代码详解|新手向 DF ...

  6. filter hid_如何构造一个简单的USB过滤驱动程序

    本文分三部分来介绍如何构造一个简单的USB过滤驱动程序,包括"基本原理"."程序的实现"."使用INF安装".此文的目的在于希望读者了解基本 ...

  7. 网络缓冲 linux,一个简单的linux缓冲区利用

    一个简单的linux缓冲区利用by Netfairy - 2016-02-28 刚开始接触linux下的漏洞利用,先做个练练手.程序源码如下: #include #include #include i ...

  8. 4.9一个简单的多任务内核实例

    第四章第9节 本节描述了一个简单多任务内核的设计和实现方法,这个内核包括两个特权级3的用户任务和一个系统调用中断过程. 本节给出的内核实例由两个文件构成.一个是使用as86语言编制的引导启动程序boo ...

  9. linux内核设计与实现 epub_Epoll学习服务器的简单实现-Linux内核Epoll结构

    1.Begins~ 有的人学习linux编程很久,只知道网络编程是socket,bind, listen...,然而这些都是网络通信软件最基本的接口.在某网络公司待了y,也了解到公司的基础就是网络转发 ...

  10. 一个简单的多任务内核实例

    多任务程序结构和工作原理 本文给出的内核文件由两个文件构成.一个使用as86语言编制而成的引导启动程序boot.s,用于在计算机上电时从启动盘上把内核代码加载到内存中:另一个是使用GNU as 汇编语 ...

最新文章

  1. ajax 没有权限 -quot;跨域quot;,如何解决AJAX中跨域访问出现'没有权限'的错误
  2. ie9浏览器两个ajax请求同步不兼容_浏览器拦截问题
  3. 学JS的心路历程-Promise(一)
  4. python中json格式数据输出实现方式(无unicode编码输出形式)
  5. 记录:Android中StackOverflow的问题
  6. C/C++——cmd下丢失mspdb100.DLL解决方法
  7. WebBrowser控件的高级定制+mshtml
  8. 医院药库管理系统 v6.26 下载
  9. 未来教育python软件_未来教育考试系统
  10. 如何用文本文档编写python程序
  11. Centos网络管理(三)-网络配置相关
  12. python3d动画效果_使用Matplotlib 3D实现三维波浪动画
  13. 溢米辅导完成C轮1500万美元融资,将用于教研、产品以及技术三大领域
  14. 实战:内存分配与回收策略
  15. 软件工程-第五章-总体设计
  16. 【数据库系统工程师】6.4数据仓库和数据挖掘基础知识
  17. Excel日期按秒自增公式
  18. 【AE工具】AE一键切换中英文小工具,免费下载 支持CC2014-CC2019
  19. 联想拯救者Y7000P更新BIOS
  20. python3安装psycopg2

热门文章

  1. java qlv转mp4 代码_怎么将qlv格式转换成mp4?教你快速转换视频格式的技巧
  2. c语言学生学籍查询流程图,C语言学生学籍管理系统
  3. 《世界顶级思维》读后感 —— 上篇
  4. 关于雅虎邮箱的Foxmail,outlook设置。
  5. 【其他工具】亲戚关系计算器
  6. 人力资源管理系统(大二数据库课设) spring boot,Mybatis+bootstap,ajax项目
  7. 猫加路由加服务器加交换机怎么配置文件,光猫接交换机和路由器,怎么设置?...
  8. 基于FPGA的两种SDI视频方案(GTX+外接芯片)
  9. Android 视频压缩
  10. flink任务监控- 利用Grafana和Prometheus实现实时计算平台任务监控