- 1、本文档共50页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告提交: 时间安排16 内容简介设计目的设计内容实施方法及
添加系统调用(续) Linux系统调用机制 int 0x80 使用寄存器中适当的值跳转到内核中事先定义好的代码中执行:跳转到系统调用的总入口system_call,检查系统调用号,再查找系统调用表sys_call_table,调用内核函数,最后返回 系统调用是靠一些宏,一张系统调用表,一个系统调用入口来完成的 * 添加系统调用(续) 与系统调用相关的内核代码文件: 系统调用服务例程 如 arch/x86/kernel/sys.c 系统调用清单(为每个系统调用分配唯一号码) 如 arch/x86/include/asm/unistd.h 系统调用表 如 arch/x86/kernel/syscall_table.s 不同版本Linux,文件名和存放位置会有所不同! * 添加系统调用(续) 步骤_1 添加源代码 编写添加到内核中的源程序,函数名以sys_开头。 如:mycall(int num),在arch/x86/kernel/sys.c 文件中添加如下代码: asmlinkage int sys_mysyscall(int number) { return number; //该系统调用仅返回一个整型值 } * 添加系统调用(续) 步骤_2 连接新的系统调用 使内核的其余部分知道该系统调用的存在。为此,需编辑两个文件: arch/x86/include/asm/unistd.h ——系统调用清单(为每个系统调用分配唯一号码) #define _NR_mysyscall nnn 其中,mysyscall:系统调用名 nnn:系统调用号,不能与其他系统调用号相同 并修改系统调用总数: #define NR_syscalls XXX arch/x86/kernel/syscall_table.s ——增加新的内核函数指针 .long sys_mysyscall * 添加系统调用(续) 步骤_3 重建Linux内核 以root身份进入/usr/src/linux目录,重建内核 #make mrproper //清除之前编译信息,避免生成的文件不一致 #make oldconfig //配置内核与当前配置相同 make config 基于文本的传统配置界面 make menuconfig 基于文本的菜单形式,字符终端下使用 make xconfig 基于图形窗口模式,Xwindow下使用 #make //编译内核 #make modules_install //生成并安装模块 #make install //安装新的系统 * 添加系统调用(续) 步骤_4 重启选用新内核 步骤_5 使用新的系统调用 应用程序app.c中调用新添加的系统调用mysyscall: int syscall(int number, …); * 课程设计辅导 Linux系统的相关知识 进程并发 添加系统调用 添加设备驱动程序 /proc文件分析 * 添加设备驱动程序 设备驱动程序 一组常驻内存的具有特权的共享库,是低级硬件处理例程 每个设备文件有两个设备号 主设备号标识驱动程序 从设备号表示使用同一个设备驱动程序的不同硬件设备 设备驱动程序的功能 对设备初始化和释放 把数据从内核传送到硬件和从硬件读取数据 ???? 读取应用程序传给设备文件的数据和回送应用程序请求的数据 检测和处理设备出现的错误 * 添加设备驱动程序(续) Linux支持的设备类型 字符设备—— c 存取时没有缓存;对字符设备发出读写请求时,实际的I/O就发生了。如:鼠标、键盘等。 块设备—— b 利用一块系统内存区域作缓冲区,当用户进程对设备请求能满足用户要求时,返回请求数据,否则,调用请求函数进行实际的I/O操作。如:硬盘、软盘、CD-ROM等。 网络设备 * 添加设备驱动程序(续) 注册设备:向系统登记设备及驱动程序的入口点 int register_chrdev (unsigned int major, const char *name, struct file_operations *fops); //向系统的字符设备表登记一个字符设备 //major:希望获得的设备号,为0时系统选择一个没有被占用的设备号返回。 //name:设备名 //fops:登记驱动程序实际执行操作的函数的指针 //登记成功,返回设备的
您可能关注的文档
- 省城市零售店名地址江苏省南京南京广秀金鹰商场店南京 - samsung.pdf
- 省级都市圈高位协调机构的建立与实施机制研究.pdf
- 省级科技文献共享服务平台特色资源服务评价体系 - 中国科技资源导刊.pdf
- 省级医保政策调整解读.ppt
- 省科协党组书记李德忠莅临公司考察 - 浙江晨光电缆股份有限公司.pdf
- 省社科应用研究优秀成果选编(十二) 江苏省产业结构 - 江苏省社科联.pdf
- 省域国民体质与经济、环境因素间pls-da软模式 - 南京体育学报学报.doc
- 省政府党组成员高树勋一行到公司土官钢结构制造基地调研 - 昆钢控股.pdf
- 晟通科技集团有限公司跟踪评级报告 - 联合资信.pdf
- 盛振文高校可持续发展动态能力的作用及对策探析_以民办高校为例.pdf
文档评论(0)