【问题标题】:Add new system call at FreeBSD 10.1在 FreeBSD 10.1 添加新的系统调用
【发布时间】:2016-05-31 14:28:11
【问题描述】:

我想在 FreeBSD 中添加新的系统调用。我的系统调用代码是:

#include <sys/types.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/proc.h>
#include <sys/mount.h>
#include <sys/sysproto.h>

int Sum(int a, int b);

int
Sum(a,b)
{
   int c;
   c = a + b;
   return (0);
}

但是当我重建内核时,我有一个错误:

怎么了?你能帮帮我吗?

非常感谢。

【问题讨论】:

  • 我的代码是真的还是假的?
  • 您能否编辑您的问题以将代码和错误包含为纯文本而不是屏幕截图?
  • @ajshort 是的,我改了 :)
  • 无需 ping 其他用户(使用Can you help me?)。此外,使用@ 引用仅适用于当前讨论中的用户。
  • 这似乎是一个常见的问题;例如看这里:stackoverflow.com/questions/29755770/…

标签: unix kernel system-calls freebsd


【解决方案1】:

请阅读this

我认为,您没有在内核 makefile 中包含带有 sys_Sum 函数的文件(请注意,在您提供的代码中,函数名称是 Sum 并且错误地调用了 @987654325 @. 我希望这只是您的代码中的一个错字,函数的名称是 sys_Sum )。

【讨论】:

  • 我在 usr/src/sys/conf ---> 文件中输入我的系统调用名称...是真的吗?如果没有,我应该更改的make文件目录在哪里?
  • 我说的是名称为 Makefile 的文件。如果您不熟悉 makefile,请阅读一些关于它的教程(开始 - en.wikipedia.org/wiki/Makefile)
【解决方案2】:

以下是我使用 setkey 的示例系统调用的方法,该调用采用两个无符号整数。 我将系统调用添加到末尾 /kern/syscalls.master

546 AUE_NULL    STD { int setkey(unsigned int k0, unsigned int k1);}

然后我做了

cd /usr/src
sudo make -C /sys/kern/ sysent

接下来,我将文件添加到 /sys/conf/files

kern/sys_setkey.c       standard

我的sys_setkey.c如下

#include <sys/sysproto.h>
#include <sys/proc.h>

//required for printf
#include <sys/types.h>
#include <sys/systm.h>

#ifndef _SYS_SYSPROTO_H_
struct setkey_args {
    unsigned int k0;
    unsigned int k1;
};
#endif
/* ARGSUSED */
int sys_setkey(struct thread *td, struct setkey_args *args)
{
    printf("Hello, Kernel!\n");
    return 0;
}

另外,我在 /kern/capabilities.conf 中添加了系统调用

##
## Allow associating SHA1 key with user
##
setkey

最后,在 /usr/src/ 中我运行了命令

sudo make -j8 kernel
sudo reboot

这是一个运行系统调用的程序

#include <sys/syscall.h>
#include <unistd.h>
#include <stdio.h>
int main(){
//syscall takes syscall.master offset,and the system call arguments
printf("out = %d\n",syscall(546,1,1));
return 0;
}

【讨论】:

    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 2011-12-18
    • 2017-07-03
    • 2011-04-23
    • 1970-01-01
    • 2015-12-07
    相关资源
    最近更新 更多