我用 LinuxLinux学习之路

linux-4.14.11 添加自定义的系统调用

2018-01-16  本文已影响744人  扫帚的影子

声明系统调用服务例程
asmlinkage long sys_hello(const char __user *name);

其中

  1. asmlinkage即为extens C, 按 c的编译方式
  2. 返回值必须是1long;
  3. 函数名以sys_为前缀;
  4. __user表示是从用户空间传递来的参数;
定义系统调用服务例程
asmlinkage long sys_hello(const char __user *name) {         
        char *name_kd;                                       
        long ret;                                            
                                                             
        name_kd = strndup_user(name, PAGE_SIZE);             
        if (IS_ERR(name_kd)) {                               
             ret = PTR_ERR(name);                            
             goto error;                                     
        }                                                    
                                                             
        printk("Hello, %s!\n", name_kd);                     
        ret = 0;                                             
error:                                                       
        return ret;                                          
}                                                            
添加系统调用号
333     64      hello                   sys_hello
编译安装新内核并使用新内核重启
测试新的系统调用
#include <stdio.h>

int main(int argc, char *argv[]) {
   long ret = syscall(333, "lw");
   printf("ret: %d\n", ret);
   return 0;
}
[  402.829360] Hello, lw!
上一篇 下一篇

猜你喜欢

热点阅读