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

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

一. 实验过程

1、打开shell,输入启动指令,内核启动完成后进入menu程序,支持三个命令help、version和quit。

2、然后使用gdb跟踪调试内核,输入命令qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S

3、按住Ctrl+ALt键打开一个新的Shell窗口,并输入以下代码。

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

将break 放在start处输入C ,观察qemu

输入list可以查看断点附近的代码。

查看linux-3.18.6的内核代码。这里有很多个文件目录。

其中arch包括了所支持的多种CPU体系结构,这里我们只关心里面的x86文件夹就好了。

其他还有如drivers为驱动相关代码。fs为文件系统相关内核代码,ipc是进程相关代码,mm是存储管理代码,net是和网络相关的内核代码等等。、

init为初始化相关的模块,在init/main.c/start_kernel中之后开始C代码的操作系统初始化,最后执行第一个用户态进程init。。

在start_kernel函数中可以看到很多_init相关函数,涉及到操作系统启动相关的多种初始化操作。

这里的init_task为相当于0号进程的pcb。   还有sched_init();为进程调度相关初始化。trap_init();为中断相关的内核代码。等等。

这里看到start_kernel 最后一句 rest_init().

当操作系统为空闲时,就会执行这个idle程序。

总结:

浅入的学习了xLinux内核的启动过程。

学习了gdb的操作使用。

x86 CPU启动的第一个动作CS:EIP=FFFF:0000H(换算为物理地址为000FFFF0H,因为16位CPU有20根地址线),即BIOS程序的位置。BIOS例行程序检测完硬件并完成相应的初始化之后就会寻找可引导介质,找到后把引导程序加载到指定内存区域后,就把控制权交给了引导程序。引导程序BootLoader开始负责操作系统初始化,然后起动操作系统。启动操作系统时一般会指定kernel、initrd和root所在的分区和目录。内核启动过程包括start_kernel之前和之后,之前全部是做初始化的汇编指令,之后开始C代码的操作系统初始化,最后执行第一个用户态进程init。一般分两阶段启动,先是利用initrd的内存文件系统,然后切换到硬盘文件系统继续启动。

时间: 2024-12-01 04:05:25

Linux内核分析 实验三:跟踪分析Linux内核的启动过程的相关文章

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

Ubuntu 16.04下搭建MenuOS的过程: 1.下载内核源代码编译内核 1 # 下载内核源代码编译内核 2 cd ~/LinuxKernel/ 3 wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz 4 xz -d linux-3.18.6.tar.xz 5 tar -xvf linux-3.18.6.tar 6 cd linux-3.18.6 7 make i386_defconfig 8 make

“Linux内核分析”实验三

跟踪分析Linux内核的启动过程 作者:何振豪 原创作品转载请注明出处 http://www.cnblogs.com/scoyer/p/6516032.html <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 这节课讲了如何查看linux内核源代码,构造一个简单的linux系统(算不上构造,实际上就是编译内核,然后打包git上的根文件系统,然后启动这个简单系统而已),最后还讲了如何利用gdb来跟踪调试linu

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

Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linux的内存管理子系统,linux的内存管理子系统相当的庞大,所以我们今天只是初识,只要对其进行简单的了解就好了,不会去追究代码,但是在后面我们还会对内存管理子系统进行一次深度的分析. 在分析今天的内容之前,我们先来看出自http://bbs.chinaunix.net/thread-2018659-2-1.html的一位大神做的内存管理图,真心佩服大神.其实这张图可以

Linux 学习笔记(三)- 查看Linux版本系统信息方法汇总

Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等等,整个CPU信息一目了然. 1.# uname -a (Linux查看版本当前操作系统内核信息) Linux localhost.localdomain 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003 i686 athlon i386 GNU/Linux 2.# cat /proc/version (Linux查看当前操作系统版本信息) Linux version 2.4.2

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

构造一个简单的Linux系统 张文俊+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验内容: 一.gdb跟踪调试内核从start_kernel到init进程启动 1.qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明: // -S freeze CPU at s

Linux及安全实验三:ShellShock 攻击实验

ShellShock 攻击实验 20125107聂航 一. 实验描述 2014年9月24日,Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,并且既可以远程也可以在本地触发.在本实验中,学生需要亲手重现攻击来理解该漏洞,并回答一些问题. 二. 预备知识 1. 什么是ShellShock? Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开.许多互联网守护进程,如网页服务器,使用bash来处

Linux第一周实验报告总结

北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1352 姓名:马悦 学号:20135235 成绩: 指导教师:娄嘉鹏 实验日期:2015.9.20 实验密级: 预习程度: 实验时间: 仪器组次: 必修/选修:必修 实验序号:1 实验名称: Linux简介  实验目的与要求:1. 了解Linux. 2.学习,安装Linux. 实验仪器: 名称           型号           数量  PC          ThinkPad        1 虚拟机

Linux学习方法之以始为终—Linux工作分类

/** ****************************************************************************** * @author    暴走的小哥哥 * @version   V1.0.0 * @date       2016-02-29 ****************************************************************************** * <  Beijing university

走进Linux之systemd启动过程

Linux系统的启动方式有点复杂,而且总是有需要优化的地方.传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方式,宣称弥补了以传统Linux SysV init为 基础的系统的缺点.在这里我们将着重讨论systemd的特性和争议,但是为了更好地理解它,也会看一下通过传统的以SysV init为基础的系统的Linux启动过程是什么样的.友情提醒一下,syst