2019-2020-1 20199305《Linux内核原理与分析》第六周作业

系统调用的三层机制(下)

(一)给MenuOS增加命令

(1)打开虚拟机,首先用rm -rf menu指令删除当前的menu目录,然后用git clone重新克隆一个新版本的menu,进入menu,运行make rootfs脚本结果报错

(2)经过与同学的讨论,我发现问题出在应该提前进入LinuxKernel目录,重新打开一个新的shell,按照新的流程走一遍,运行MenuOS系统,输入help命令后发现支持的命令增加了两个:time(显示系统时间)和time-asm(用汇编方式显示系统时间)


(二)使用gdb跟踪系统调用内核函数sys_time

(1)用如下方式调试内核,首先用命令启动内核:

cd ..#返回到LinuxKernel目录下
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s

(2)在进行gdb调试前先启动gdb,把3.18.6的内核加载进来,之后连接到target remote:1234,操作完成后就连接到需要调试的MenuOS了。接下来设置断点:

  • 在start_kernel处设置断点,按c停下;

  • time系统调用对应的是内核处理函数——sys_time,用b sys_time设置断点,启动Menu并执行time命令,程序停在函数这个位置,通过list命令列出sys_time对应的代码如下图所示

(3)用gdb的finish命令把函数全部执行完,再单步执行一直到return i。

猜你喜欢

转载自www.cnblogs.com/20199305yizihan/p/11734864.html