linux内核系统调用实验指导书.ppt
《linux内核系统调用实验指导书.ppt》由会员分享,可在线阅读,更多相关《linux内核系统调用实验指导书.ppt(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 of 31 内核出口内核出口系统调用2 of 31基本知识基本知识3 of 31xyz()system_call:sys_xyz()ret_from_sys_call:iretxyz()int 0 x80sys_xyz()用户态用户态 内核态内核态在应用程序中使用系统调用glibc标准库中的封装例程(系统调用函数的具体实现)系统调用处理程序系统调用服务例程(内核函数)系统调用处理过程系统调用处理过程4 of 31为什么有系统调用?为什么有系统调用?一般用户进程不能直接访问系统内核,不能直接使用或修改内核数据,以免干扰内核程序的执行,妨碍系统安全。系统调用是什么?系统调用是什么?u用户进程要
2、使用内核功能时,只能通过内核提供的接口系统调用来实现,系统调用实际是操作系统内核提供的、功能较强的一系列函数。u系统调用好比一个中间人,把用户进程的系统调用请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间。u系统调用是用户空间访问内核的唯一手段。系统调用发生时会从用户态转到内核态,完成功能后又由内核态转回用户态。5 of 31使用系统调用的两种方式使用系统调用的两种方式1、通过C库函数2、使用syscall函数 syscall函数原型为:int syscall(int number,);通过指定系统调用号和一组函数来调用系统调用*2.6.19版前使用_syscall宏C C库函
3、数库函数 内核内核系统调用系统调用应用程序代码应用程序代码6 of 31C库函数系统调用例子用户程序中使用用户程序中使用C C库中的函数库中的函数malloc函数函数free函数函数srccpy函数函数open函数函数brk系统调用系统调用open系统调用系统调用7 of 31系系统统如何响如何响应调应调用的?用的?系统调用函数中的int$0 x80汇编指令,会产生向量为128的异常。内核通过查中断向量表找到128号异常对应的处理程序系统调用处理程system_call()如何找到如何找到对应对应的内核函数?的内核函数?system_call()利用系统调用号查系统调用表sys_call_ta
4、ble,找到对应每个系统调用号的处理函数。8 of 31实验实验9 of 31一、实验目的学习如何产生一个系统调用往内核中 添加一个新的函数实现对用户空间的读写理解、掌握Linux系统调用的实现框架、用户界面、参数传递、进入/返回过程。10 of 31二、主要实验环境Linux环境:CentOS 6.0,linux kernel 2.6.32.71欲编译内核:linux-2.6.35.13命令uname r11 of 31三、实验指导获得内核源代码www.kernel.org,本次下载的内核版本为2.6.35.13将内核源码保存到/usr/src目录下 cd/usr/src tar xjvf
5、linux-2.6.35.13.tar.bz2 tar zxvf linux-2.6.35.13.tar.gz定义系统调用编号和修改系统调用表12 of 311)系统调用表 系统调用表sys_call_table存储了所有系统调用对应的服务例程的函数地址。u对于X86 32位体系结构的系统调用表位于arch/X86/kernel/syscall_table_32.S文件中定义。u系统调用服务例程的名字均遵守一定的规则:系统调用名称前增加“sys_”前缀,比如open系统调用对应sys_open函数。u可以使用man 2 syscalls浏览所有系统调用的添加历史13 of 31系统调用表位置c
6、d /usr/src/linux-2.6.35.13/arch/x86/kernelvi syscall_table_32.S第第n个表个表项对应项对应了系了系统调统调用号用号为为n的服的服务务例程的入口地址的指例程的入口地址的指针针修改系统调用表:将.long sys_my_new_call添加到arch/x86/kernel/syscall_table_32.S中最后一行14 of 312 2)系统调用号)系统调用号/arch/x86/include/asm/unistd_32.h 每个系统调用号都是唯一的,依次对应sys_call_table中的一项,系统调用号写在unistd.h文件中
7、,以“_NR_”开头。内核通过系统调用号作为下标去获取sys_call_table中的服务例程函数地址。系统调用号一旦分配就不能再有任何变更,系统运行中即使该系统调用被删除,它所拥有的系统调用号也不能被回收利用。15 of 31对于对于对于对于3232位位位位x86x86架构系统调用号位于架构系统调用号位于架构系统调用号位于架构系统调用号位于arch/x86/include/asm/unistd_32.harch/x86/include/asm/unistd_32.h16 of 314.编译内核的方法make mrpropermake cleanmake oldconfigmake allma
8、ke modules_installmake install命 令“make all”用于生成期望的内核映像及模块;“make modules_install”将安装模块到“默认目录/lib/module/”下面;“make install”最终将内核映像等几个文件复制到“/boot”目录,并修改引导程序的配置以启用该新内核。17 of 31 以上命令执行完毕后,会在当前目录下生成一个名为System.map的文件,会在/usr/src/linux-版本号/arch/i386/boot/下生成一个bzImage文件和vmlinuz文件。cd/boot (进入/boot目录)18 of 315.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 内核 系统 调用 实验 指导书
限制150内