MIPS Linux 下添加系统调用
来源:互联网 发布:查看域名注册信息 编辑:程序博客网 时间:2024/05/21 17:55
添加一个系统调用有以下几个步骤:
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 中找到宏定义
.macro syscalltable /* 系统调用号从 4000 开始 */
......
......
sys sys_timerfd 4
sys sys_eventfd 1
sys sys_fallocate 6 /* 4320 */
sys sys_comcat 0 /* 系统调用号为 4321 */
.endm
最后加入自定义的系统调用 sys_comcat 于 sys_call_table 中, sys 为辅助宏,调用名后的数值 0 指示该系统调用所需的参数个数。
只能加在 sys_call_table 的最后,否则会扰乱标准的系统调用。
2. 实现系统调用
可以在 arch/mips/kernel/syscall.c 中给出一个实现,如:
asmlinkage void sys_comcat(void)
{
printk(KERN_EMERG "This's comcat syscall/n");
}
3. 修改 include/asm-mips/unistd.h
根据你的内核位和支持的ABI版本修改相应的宏定义,32bit 内核需修改:
#define __NR_Linux_syscalls 320 ---------> 321 (The number of linux syscalls)
#define __NR_O32_Linux_syscalls 320 ---------> 321 (The number of linux O32 syscalls)
相应的在其上的宏集的最后加入:
.......
#define __NR_timerfd (__NR_Linux + 318)
#define __NR_eventfd (__NR_Linux + 319)
#define __NR_fallocate (__NR_Linux + 320)
#define __NR_comcat (__NR_Linux + 321)
4. 测试新的系统调用sys_comcat
用重新编译后的内核启动,如下程序测试之:
.text
.globl main
.ent main
main:
li $2, 4321 /* sys_comcat 的系统的调用号 */
syscall
.end main
其中 MIPS 下系统调用的约定为:
v0: 用于置系统调用号
a0~a3: 置前四个参数,后面的参数用栈传
syscall 系统调用触发指令
编译 gcc cat.S -o cat
执行 ./cat
正确的话应有如下输出:
Message from syslogd@localhost at Wed Aug 29 13:15:37 2007 ...
localhost kernel: This's comcat syscall
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 中找到宏定义
.macro syscalltable /* 系统调用号从 4000 开始 */
......
......
sys sys_timerfd 4
sys sys_eventfd 1
sys sys_fallocate 6 /* 4320 */
sys sys_comcat 0 /* 系统调用号为 4321 */
.endm
最后加入自定义的系统调用 sys_comcat 于 sys_call_table 中, sys 为辅助宏,调用名后的数值 0 指示该系统调用所需的参数个数。
只能加在 sys_call_table 的最后,否则会扰乱标准的系统调用。
2. 实现系统调用
可以在 arch/mips/kernel/syscall.c 中给出一个实现,如:
asmlinkage void sys_comcat(void)
{
printk(KERN_EMERG "This's comcat syscall/n");
}
3. 修改 include/asm-mips/unistd.h
根据你的内核位和支持的ABI版本修改相应的宏定义,32bit 内核需修改:
#define __NR_Linux_syscalls 320 ---------> 321 (The number of linux syscalls)
#define __NR_O32_Linux_syscalls 320 ---------> 321 (The number of linux O32 syscalls)
相应的在其上的宏集的最后加入:
.......
#define __NR_timerfd (__NR_Linux + 318)
#define __NR_eventfd (__NR_Linux + 319)
#define __NR_fallocate (__NR_Linux + 320)
#define __NR_comcat (__NR_Linux + 321)
4. 测试新的系统调用sys_comcat
用重新编译后的内核启动,如下程序测试之:
.text
.globl main
.ent main
main:
li $2, 4321 /* sys_comcat 的系统的调用号 */
syscall
.end main
其中 MIPS 下系统调用的约定为:
v0: 用于置系统调用号
a0~a3: 置前四个参数,后面的参数用栈传
syscall 系统调用触发指令
编译 gcc cat.S -o cat
执行 ./cat
正确的话应有如下输出:
Message from syslogd@localhost at Wed Aug 29 13:15:37 2007 ...
localhost kernel: This's comcat syscall
- MIPS Linux 下添加系统调用
- mips处理器linux内核添加系统调用
- MIPS Linux 下添加系统调用,以Linux kernel 2.6.18为例.
- MIPS Linux 下添加系统调用,以Linux kernel 2.6.18为例
- ARM Linux下添加自定义系统调用
- Linux下添加系统调用实例
- Linux下如何添加系统调用
- Linux 4.9.2 下添加系统调用
- 如何给MIPS架构的kernel添加系统调用
- mips的系统调用
- 添加Linux系统调用
- Linux添加系统调用
- 添加Linux系统调用
- Linux添加系统调用
- Linux添加系统调用
- Linux添加系统调用
- 添加linux系统调用--基于3.5内核下
- 为linux添加系统调用
- 端口
- 实现简单的struts,hibernate上传文件
- RegisterStartupScript和RegisterClientScriptBlock输出位置的区别
- 关于时间的模糊查询
- 制作WHOIS的源代码
- MIPS Linux 下添加系统调用
- 一个简单的Socket消息转发程序中使用ThreadPool和不使用的性能比对
- oracle中某月天数的获取
- 正则模式修正符
- 话说罗盘
- 我设计的UNIX根文件系统目录结构
- Chapter 3(1): Helper Classes
- 做数据表比较的存储过程
- 写给我小弟的PHP培训教材!