Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5480588
  • 博文数量: 1296
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 15466
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1296)

文章存档

2020年(78)

2019年(193)

2018年(81)

2017年(80)

2016年(70)

2015年(52)

2014年(41)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: LINUX

2009-06-01 18:17:15

2.6.26添加系统调用

内核版本:2.6.26
以下是要修改的内核文件:

  1. xux@zhwen:~$ vim include/asm-x86/unistd_32.h
  2. #define __NR_my_syscall         327
  3.  
  4. xux@zhwen:~$ vim arch/x86/kernel/syscall_table_32.S
  5. .long sys_my_syscall
  6.  
  7. xux@zhwen:~$ vim arch/x86/kernel/sys_i386_32.c
  8. asmlinkage long sys_my_syscall(void)
  9. {
  10.         return current->uid;
  11. }

完成上面的之后,从新编译内核,并用新内核启动。
以下是要修改的/usr/include/中的相关头文件。

  1. xux@zhwen:~$ sudo vim /usr/include/bits/syscall.h
  2. #define SYS_my_syscall __NR_my_syscall
  3.  
  4. xux@zhwen:~$ sudo vim /usr/include/asm/unistd_32.h
  5. #define __NR_my_syscall         327
  6.  
  7. xux@zhwen:~$ vim /usr/include/unistd.h 
  8. /* Get the process ID of the calling process.  */
  9. extern __pid_t my_syscall (void) __THROW;
  10. //现在这个加了之后不会起作用,我想应该要在glibc中也要实现相应的系统调用接口才可以。
  11. 这只是猜测。<br>
  12. //不过后来我使用了#define my_syscall() syscall(SYS_my_syscall),这样来处理的。
  13.  
  14. extern long int syscall (long int __sysno, ...) __THROW;
  15. //后面加可变参数。也就是说如果我们写的系统调用需要参数的话,就直接将参数跟到其后面就可以了。

用户态测试程序:

  1. include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <syscall.h>
  5. #include <sys/types.h>
  6.  
  7. #define my_syscall() syscall(SYS_my_syscall)  //这里这样处理之后就可以直接使用
  8.  
  9. int main()
  10. {
  11.         int x = 0;
  12.  
  13.         x = my_syscall();//其实这句话和下面的这句话是一样的。
  14.         //x = syscall(SYS_my_syscall);//这里使用syscall来调用我们自己写的系统调用函数
  15.  
  16.         printf("hello: %d \n", x );
  17.         return 0;
  18. }

下面是测试结果:
xux@zhwen:~$ vim test.c
xux@zhwen:~$ gcc test.c
xux@zhwen:~$ ./a.out
hello: 1000
xux@zhwen:~$

阅读(923) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~