潘聪 原创作品转载请注明出处  《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

---------------------------------------------------------------

实验要求:

  • 使用gdb跟踪调试内核从start_kernel到init进程启动

  • 详细分析从start_kernel到init进程启动的过程并结合实验截图撰写一篇署名博客,并在博客文章中注明“真实姓名(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”,博客内容的具体要求如下:

    • 题目自拟,内容围绕Linux内核的启动过程,即从start_kernel到init进程启动;

    • 博客中需要使用实验截图

    • 博客内容中需要仔细分析start_kernel函数的执行过程

    • 总结部分需要阐明自己对“Linux系统启动过程”的理解,尤其是idle进程、1号进程是怎么来的。

  • 3)请提交博客文章URL到网易云课堂MOOC平台Linux内核分析MOOC课程,编辑成一个链接可以直接点击打开。

-----------------------------------------------------------------

配置环境要点如下:

1. i386_defconfig中有一个下划线(因为没看到纠结了好久。。)

2. -lpconfig中老师给的命令的连字符不对(又纠结了好久。。)

3. dbg看代码是否清晰?答案是否。又不想花大量的时间配置vim/emacs,于是用wine装了神器sourceinsight用来阅读代码

sudo apt-get install wine #中间ttf的一个协议说明对话框用tab选择到ok

自行下载sourceinsight

自行配置sourceinsight(最主要的是放大字体!另外记得熟悉各类跳转的快捷键)

新建一个新的项目,包含linux下的所有文件夹,需要一段时间收集symbols,否则就没办法自由的跳转定义和引用了(这才是用sourceinsight的理由不是么)

------------------------------------------------------------------

MenuOS启动截图如下:

--------------------------------------------------------------------------------------

kernel_start启动过程(重要部分):

首先,我们需要知道关于进程(linux中严格意义上没有线程)在linux内核中是如何表示的。

进程可以分为用户进程和内核进程,区别在于内核进程有更大的权限,当用户程序需要执行高权限的命令时,存在一个用户进程和内核进程之间的传递,从而内核进程执行关键命令后将结果返回到用户进程。

在源代码中,用户进程用task_struct表示,包含进程的基本信息,如进程号,进程状态,函数入口,堆栈等信息。而对应的内核进程用init_task表示,结构基本与task_struct一致,即init进程。这个进程是0号进程,也是第一个出现的内核进程。

与此相对的是init进程,其为1号进程,也是第一个出现的用户进程,是其他所有用户进程的父进程。其他所有的用户进程通过init进程执行do_fork()函数而得到。

在start_kernel函数中,进行了大量的内核初始化过程,包括内存、cpu、错误检测等;我们重点分析的是其启动init进程的过程。源代码因为大家都有,就不贴上来了。在此说明的是,init_task进程不在start_kernel函数中创建,而在更早的初始化过程中创建,而init进程在子函数rest_init中创建。rest_init函数在启动完init进程后并没有退出,而是继续往下执行道了cpu_startup_entry函数,从而使进程实际上进入了无限循环,也就是原执行流在fork出init进程后,把自己变成了idle进程。

转载于:https://www.cnblogs.com/codingpenguin/p/4346208.html

《linux内核分析》第三次课 实验作业相关推荐

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

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

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

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

  3. linux内核分析实验三,linux内核分析第三次实验

    WIN10 CMD 启动虚拟WIFI 1.以管理员身份运行命令提示符: 快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡: 运行命令:netsh wlan set hostednet ...

  4. Linux内核分析 - 网络[三]:从netif_receive_skb()说起

    在netif_receive_skb()函数中,可以看出处理的是像ARP.IP这些链路层以上的协议,那么,链路层报头是在哪里去掉的呢?答案是网卡驱动中,在调用netif_receive_skb()前, ...

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

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

  6. [网易云课堂]Linux内核分析(九)—— 课程总结

    付何山+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000; 导读:本文分为两个部分 ...

  7. Linux内核分析期末总结

    <Linux内核分析>期末总结 20135313吴子怡.北京电子科技学院 Chapter1 往期博客传送门 (1)计算机是如何工作的:Linux内核分析--第一周学习笔记 (2)操作系统是 ...

  8. linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程

    贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...

  9. linux内核教学的全套视频,中科大老师全程讲解Linux内核分析视频教程《附加介绍+总结》共23节课...

    中科大老师全程讲解Linux内核分析视频教程<附加介绍+总结>共23节课" F4 u& {+ T) p5 G' W  ]; o% m 2 q: ]. j8 I; q' D ...

  10. Linux 内核分析 之一:How Computer Works 实验

    说明 欧长坤 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这学期学校恰好有操 ...

最新文章

  1. Android 10 vivo,更快更安全,vivo产品经理宣布:iQOO将首批适配Android 10正式版
  2. 007-迅雷定时重启AutoHotkey脚本-20190411
  3. mybatis mapper.xml dtd_全栈开发踩坑之路4-用MyBatis实现服务
  4. 7.3. UUID()
  5. the fair-sounding
  6. python网络爬虫教程-终于明了python网络爬虫从入门到实践
  7. 【机器学习】搞懂机器学习的常用评价指标!
  8. cad画直角命令_炸了,CAD fro命令配合tk命令,极轴追踪无敌!
  9. Windows下如何安装MySQL服务
  10. java .do是什么_为什么Java Web应用程序使用.do扩展名?它从哪里来的?
  11. goods购物表MySQL的代码_python采用sqlachmy购物商城
  12. 在linux系统上启动oracle的服务
  13. python 横向拼接_python实现横向拼接图片
  14. FFmpeg命令(七)、 音频与视频合并成视频
  15. MATLAB---读取STL文件并解析
  16. 基于爬虫+人脸识别库实现指定人物自动采集
  17. 论文 | 科研软件 —— Microsoft VisioPro 2019安装及注册教程
  18. python 中文分词工具
  19. class.forName
  20. CSS学习笔记之学成在线项目(下) 3.3

热门文章

  1. JDK1.8 Collection知识点与代码分析--TreeMap
  2. [Rootkit] dll 隐藏 - VAD
  3. 飞机大战C++源代码
  4. 基于北京二手房价数据的探索性数据分析和房价评估——数据的可视化分析
  5. 引用网页链接的BibTEX格式
  6. 在网吧想免费上网又何不自己动动手呢?
  7. Jmeter 修改背景色和字体
  8. 关于 Cannot read property ‘length‘ of null 报错的解决办法
  9. Hibernate框架学习1
  10. 【修真院“纯洁”系列之十九】驱逐令