程涵 

原创博客

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

【跟踪分析Linux内核的启动过程】 


知识点梳理

Linux内核源代码

arch:支持不同的CPU的源代码,其中的关键目录包括:Documentation、drivers、firewall、fs、include等
documentation:文档目录
fs:文件系统
init:内核启动相关的代码main.c、Makefile等基本都在该目录中。(main.c中的start_ kernel函数是Linux内核启动的起点,即初始化内核的起点)
kernel:Linux内核核心代码在kernel目录中。
lib:公用的库文件
mm:内存管理的代码
scripts:与脚本相关的代码
security:与安全相关的代码
sound目录:与声音相关的代码
tools目录:与工具相关的代码
net:与网络相关的代码
readme:介绍了什么是Linux,Linux能够在哪些硬件上运行,如何安装内核源代码等
……

 

实验过程及截图

1.使用实验楼的虚拟机打开shell

cd LinuxKernel/
qemu -kernel linux-3.18./arch/x86/boot/bzImage -initrd rootfs.img

2.内核启动完成后进入menu程序,支持三个命令help、version和quit。

  • 启动实验的Linux系统MenuOS,实际上就是一个在Linux内核的基础上,再运行一个简单菜单命令行程序。
  • 在MenuOS>的提示符下输入help,看到其全部支持的命令:help、version、quit

3.使用gdb跟踪调试内核

qemu -kernel linux-3.18./arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明:
-S freeze CPU at startup (use ’c’ to start execution)
-s shorthand for -gdb tcp:: 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

4.另开一个shell窗口

编译的目的就是生成自带内核中没有的符号表。符号是全局变量、函数名,符号表即名字与地址一一对应。

gdb
(gdb)file linux-3.18./vmlinux # 在gdb界面中targe remote之前加载符号表
(gdb)target remote: # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
(gdb)break start_kernel # 断点的设置可以在target remote之前,也可以在之后

(gdb)file linux-3.18./vmlinux
# 在gdb界面中targe remote之前加载符号表
(gdb)target remote:
# 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
(gdb)break start_kernel
# 在start_kernel函数入口处设置断点
(gdb)c
# 使得系统运行到start_kernel处停住
(gdb)list
# 显示当前行所在位置上下的代码

简单分析一下start_kernel

不管分析内核的哪一部分都会涉及到start_kernel,都会在init初始化。

1、全局变量init_task

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

2、trap_init

涉及到中断,初始化一些中断向量

set_intr_gate:设置中断门

set_system_trap_gate:系统陷阱门SYSCALL VECTOR

3、mm_init

内存管理模块初始化

4、sched_init

调用进程调度初始化

5、rest_init

kernel_init:创建1号进程

第一个用户态进程:init_process,1号进程,找默认路径下的程序作为1号进程

kthreadd:内核线程,用来管理系统资源

当系统没有进程需要执行时就调度idle进程,即0号进程,一直存在。

注意:init_process是一号进程。

 

【MOOC EXP】Linux内核分析实验三报告的更多相关文章

  1. “Linux内核分析”实验三报告

    构造一个简单的Linux系统 张文俊+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000290 ...

  2. 【MOOC EXP】Linux内核分析实验八报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的切换和系统的一般执行过程 知识点 ...

  3. 【MOOC EXP】Linux内核分析实验七报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 可执行程序的装载 知识点梳理 一.预处 ...

  4. 【MOOC EXP】Linux内核分析实验六报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的描述和进程的创建 知识点梳理: ...

  5. 【MOOC EXP】Linux内核分析实验二报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  [操作系统是如何工作的]   教学内 ...

  6. 【MOOC EXP】Linux内核分析实验四报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [使用库函数API和C代码中嵌入汇编代 ...

  7. 【MOOC EXP】Linux内核分析实验一报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  [反汇编一个简单的C程序]   实验 ...

  8. 【MOOC EXP】Linux内核分析实验五报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 分析system_call中断处理过程 ...

  9. “Linux内核分析”实验一报告

    张文俊 + 原创作品转载请注明出处 + <Linux 内核分析> MOOC 课程 实验要求: 1.总结部分要求阐明自己对“计算机是如何工作的”理解: 2.博客中需要使用实验截图: 实验内容 ...

随机推荐

  1. windows下安装python3 新手上路

    本文只针对刚刚拿到“驾照”的实习生 老司机回去开车.. 下载python 地址:https://www.python.org/ 选择Downloads下的windows 选择自己合适的版本  下面的是 ...

  2. python第二十七课——os模块

    演示os模块中常用的属性和函数: 1.os模块: 作用:管理文件和目录 属性: os.name:返回系统类型 常用的windows系统 --> nt os.environ:返回当前系统所有的环境 ...

  3. Python程序的执行原理

    1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行. 2. 字节码 字节码在Python虚拟机程序里对应的是PyCo ...

  4. Spring配置之context:annotation与、component-scan以及annotation-driven

    spring boot帮助我们隐藏了大量的细节,有些配置spring boot都是开启的,因此当我们查看遗留项目使用spring时候遇见问题一定细心排查 <!-- context:annotat ...

  5. 网络侦查与网络扫描-P201421410029

    中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告   实验一 网络侦查与网络扫描     学生姓名 李政浩 年级 2014 ...

  6. Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥

    1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...

  7. vue实例的属性和方法

    vue实例的属性和方法 1. 属性 vm.$el #指定要绑定的元素 vm.$data #Vue 实例的数据对象 vm.$options #获取自定义属性的值 new Vue({ customOpti ...

  8. Windows7系统下OpenCV2.4.4+PCL1.6.0+SSBA3.0+VS2010 IDE32环境下编译和安装以实现Sfm和PCL点云数据可视化

    最近在学习<深入理解OpenCV:实用计算机视觉项目解析>一书的第三章和第四章时,遇到很多编译问题,书中又没有详细的讲解环境配置和搭建过程.经过多天的捉摸.调试.排错终于将两章的程序都调试 ...

  9. Grunt-Kmc基于KISSY项目打包

    Grunt-Kmc基于KISSY项目打包 1. Grunt-Kmc 是基于nodejs开发的,所以未安装nodeJS,先需要安装nodejs.安装步骤如下:        1. 下载安装文件,下载地址 ...

  10. JAVA 第一周学习总结

    20175308 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 1.关于java 2.java开发环境的配置 3.java编译.运行的简单实例 4.git的 ...