2019-2020-1 20199303《Linux内核原理与分析》第六周作业
系统调用的三层机制
首先是为系统增加新的命令
运行脚本自动生成文件系统
其中有一个显示时间的功能
编辑test.c文件,增加一个hello函数用来显示学号,再次使用make roofts自动编译,调用新增的函数
使用gdb跟踪系统调用内核函数sys_time
启动内核,水平分割shell,并使用gdb建立连接
在 start_kernel 处设置断点,在gdb中按c会在设置断点的 start_kernel 处停下来,使用list可以查看这段代码。
用b sys_time设置一个断点,启动MenuOS后执行time命令,程序会停到 sys_time 这个函数的位置,time命令执行到一半卡在那里。
单步执行,进入get_seconds() 中所在的 linux-3.18.6/kernel/time/timekeeping.c 文件,一直到 return i,获得的就是当前系统时间time的数值。
设置一个断点system_call,继续执行,观察time函数的返回值
Linux内核编译
首先采用的内核版本为5.3.7,按照教程操作,许多文件的位置并不完全对应,在为系统添加系统调用号的时候,需要按如下添加
否则会报错
另外缺少libssl-dev与bison等内容,从ubuntu默认源下载十分缓慢,可以更换阿里的源或者清华源,但是update需要较长时间。
最后经过许多尝试之后