第五章
系统调用的三层机制(下)
1.给MenuOS增加命令
- 代码如下:
rm -rf menu
git clone http://github.com/mengning/menu.git
make rootfs
2.使用gdb跟踪系统调用内核sys_time
- 返回LinuxKernel的目录下启动内核
cd ..
qemu -kernel linux3-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
-
打开一个新的命令窗口,启动gdb,加载内核建立连接cd LinuxKernel/ gdb file linux-3.18.6/vmlinux target remote:1234
-
设置断点b sys_time,按c继续运行,运行到断点停止。time系统调用的是sys_time函数,因此在sys_time函数处设置断点,我们可以看到的就是输入time命令后没有反应
-
sys_time是在宏中实现的,无法直接看到。用`list命令列出sys_time对应代码
- 单步执行gdb调试
- system_call代码分析
实验中遇到的问题:
- 上周实验是做的rename和rename_asm的,在给menuos增加这两条命令时,函数一直在报错,也没有找到解决的办法,于是只能先做time和time_asm的命令添加。
- 分析system_call代码时,不会找systime_call中哪个位置调用了sys_time(),不过这个问题在云班课视频中有解释讲解清楚。
- 由于宿舍网不好,实验楼环境比较卡顿,一个实验反反复复做了很久。