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  #继续执行

执行效果如图

posted @ 2019-10-03 16:19  不摸鱼  阅读(143)  评论(0编辑  收藏  举报