Linux内核分析第五周总结
系统调用在内核代码中的工作机制和初始化
xyz()与sys_xyz()是通过系统调用号联系在一起的
0x80与system_call是通过中断向量联系起来的
系统调用机制的初始化
用汇编代码编写系统调用的过程:
- 确定出需传入的参数,以及函数的返回值
- 选择适当的寄存器存储输入参数值,将输入参数值传给相应的寄存器
- 将系统调用号存入到eax寄存器中,并使用"int $0x80"语句,进入中断处理程序,中断号80代表进入系统调用
进入系统调用后:
- 进入sys_ call函数,该函数调用涉及到的系统调用函数(sys _ xxx函数)
- 执行sys_ xxx函数的内部细节,最终将返回值传递给sys_ call函数过程
- 在sys_ call函数中iret最后的结果
实验
在main函数中增加MenuConfig和详细函数
Make rootfs
设置断点
进行单步调试
总结
系统调用就是一个函数,它需要用到内核中的代码,但这部分代码我没有办法直接访问,所以通过系统调用这个中介,它去让内核执行需要执行的代码,把最后的结果告诉用户。这时为用户就是什么都不知道了,等着系统调用来告诉用户结果。