2019-2020-1 20199326《Linux内核原理与分析》第四周作业
第四周学习内容
庖丁解牛Linux内核分析第三章:MenuOS的构造
Linux内核分析实验三
学到的一些知识
-
操作系统两大宝剑:1.中断上下文的切换--保存现场和恢复现场 2.进程上下文的切换
-
Linux内核版本号命名规则:A.B.C.D,A代表大幅度转变的内核,B指一些重大修改的内核,C是内核的真实版本,D是安全补丁和bug修复
-
linux内核源码目录结构:
- arch里的内容可以使Linux内核支持不同的CPU和体系结构,我们用的电脑基本都是x86架构,所以只需要关注x86文件目录即可
- block存放Linux存储体系中关于块设备管理的代码
- crypto存放长假的呢加密算法的C语言代码,譬如crc32、md5、sha1等
- document存放一些文档
- drivers驱动目录,里面存放了linux内核支持的所有硬件的驱动源代码
- firmware固件
- fs文件系统,里面列出了Linux支持的各种文件系统的实现
- include头文件目录,存放公共的头文件
- init存放Linux内核启动时的初始化代码,其中main.c源文件是整个Linux内核启动的起点
- ipc是进程间通信,存放的是linux支持的IPC的代码实现
- kernel内核,存放内核本身需要的一些核心代码文件
- lib公用库文件,是一些公用的库函数
- mm是memory management内存管理,存放linux的内核管理代码
- net存放了网络相关代码,譬如TCP/IP协议栈
- readme就是个文档,介绍了什么是Linux,Linux能在那些硬件上运行等问题。
-
Linux内核分析中比较重要的是arch目录下的x86目录下的源文件,init目录下的main.c,kernel下和进程调度相关的代码,其他还有内存管理,网络,文件系统等代码
实验内容
跟踪分析Linux内核的启动过程
1.启动menuos
cd LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
启动效果如图
2.使用gdb跟踪调试内核
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
另开shell窗口,进入Linuxkernel目录下输入gdb
在gdb下设置断点
file linux-3.18.6/vmlinux #加载符号表
target remote:1234 #建立gdb和gdbserver之间的连接
break start_kernel #设置断点
c #让qemu上的linux继续运行
break rest_init #设置另一个断点
c #继续执行
执行效果如图