查看MIPS Linux 下添加系统调用的源代码
←
MIPS Linux 下添加系统调用
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
添加一个系统调用有以下几个步骤: ;;1. 在 kernel 的系统调用表 sys_call_table 中添加你的系统调用入口 根据你用的内核位数(32/64bit) 选择需要修改的文件: arch/mips/kernel/scall32-o32.S ------> 32bit kernel arch/mips/kernel/scall64-64.S ------> 64bit kernel 64bit内核,如果支持兼容32 bit ABI (o32, n32 ) 则还需修改 scall64-o32.S 或 scall64-n32.S 以32bit 内核为例,在 arch/mips/kernel/scall32-o32.S 中找到宏定义 <pre> .macro syscalltable /* 系统调用号从 4000 开始 */ ...... ...... sys sys_timerfd 4 sys sys_eventfd 1 sys sys_fallocate 6 /* 4320 */ sys sys_comcat 0 /* 系统调用号为 4321 */ .endm </pre> 最后加入自定义的系统调用 sys_comcat 于 sys_call_table 中, sys 为辅助宏,调用名后的数值 0 指示该系统调用所需的参数个数。 只能加在 sys_call_table 的最后,否则会扰乱标准的系统调用。 <br><br> ;;2. 实现系统调用 可以在 arch/mips/kernel/syscall.c 中给出一个实现,如: <pre> asmlinkage void sys_comcat(void) { printk(KERN_EMERG "This's comcat syscall/n"); } </pre> <br><br> ;;3. 修改 include/asm-mips/unistd.h 根据你的内核位和支持的ABI版本修改相应的宏定义,32bit 内核需修改: <pre> #define __NR_Linux_syscalls 320 ---------> 321 (The number of linux syscalls) #define __NR_O32_Linux_syscalls 320 ---------> 321 (The number of linux O32 syscalls) </pre> 相应的在其上的宏集的最后加入: <pre> ....... #define __NR_timerfd (__NR_Linux + 318) #define __NR_eventfd (__NR_Linux + 319) #define __NR_fallocate (__NR_Linux + 320) #define __NR_comcat (__NR_Linux + 321) </pre> <br><br> ;;4. 测试新的系统调用sys_comcat 用重新编译后的内核启动,如下程序测试之: <pre> .text .globl main .ent main main: li $2, 4321 /* sys_comcat 的系统的调用号 */ syscall .end main </pre> 其中 MIPS 下系统调用的约定为: * v0: 用于置系统调用号 * a0 - a3: 置前四个参数,后面的参数用栈传 * syscall 系统调用触发指令 编译 gcc cat.S -o cat 执行 ./cat 正确的话应有如下输出: <pre> Message from syslogd@localhost at Wed Aug 29 13:15:37 2007 ... localhost kernel: This's comcat syscall </pre> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br>
返回到
MIPS Linux 下添加系统调用
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面