文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>为x86架构Linux添加系统调用

为x86架构Linux添加系统调用

时间:2010-11-18  来源:tq08g2z

目的是要:

1、为kernel增加一个系统功能调用,把kernel当前被缓冲的所有dentry及其父子关系都返回给调用者;

比较容易做实验的环境还是我们的PC机,所以,也就选择了往x86架构的Linux中添加一个系统调用了。

 

添加一个系统调用大致需要以下步骤:

1、编写系统调用例程。考虑到我们要实现的系统调用要返回被缓冲的dentry极其父子结构,我们要使用fs/dcache.c文件里正是各种各样与dentry有关的函数。所以,我们的系统调用就直接添加在fs/dcache.c文件的末尾处了。最初我们打算仅仅实现一个框架:

/* Added by hanpfei, 2011.11.18 */

SYSCALL_DEFINE0(dentry_info)

{

   printk(KERN_ALERT”Hello, World.\n”);

   return 0;

}

 

2、在系统调用表中添加我们实现的系统调用例程的函数指针:

    .long sys_rt_tgsigqueueinfo /* 335 */

    .long sys_perf_event_open

    .long sys_recvmmsg

 

   .lonh sys_dentry_info

 

3、在文件include/linux/syscalls.h中添加系统调用例程的原型:

asmlinkage long sys_dentry_info(void);

 

4、我们自己添加的这个系统调用,如果要用的话,还没有封装例程可供使用,所以需要使用syscall()例程来调用:

#include <syscall.h>
#include <stdio.h>
#include <linux/unistd.h>
#define __NR_silly_copy      338
int main()
{     printf("Before call silly_copy\n");
      syscall(__NR_silly_copy);
      printf("After call silly_copy\n");
      return 0;
}

上面的#define __NR_silly_copy      338是我们定义的系统调用号,当然,我们也可以在文件中<asm/unistd.h>(通过追踪syscall.h文件,在usr/include/目录下)添加相同的内容来实现。

 

重新编译内核,调用我们上面完成的用户空间程序。之查看/var/log/messages文件,我们看到:

Nov 15 21:23:51 hanpfei kernel: Hello, World.

这说明我们搭的框架是成功的。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载