【问题标题】:Add new system call at FreeBSD在 FreeBSD 添加新的系统调用
【发布时间】:2016-06-02 07:58:21
【问题描述】:

我想向 FreeBSD 添加自定义的 helloworld 系统调用。我使用以下链接作为我的指南:http://members.tripod.com/s_mathur/bsdhowto.html 在第 4 步中说:修改 Make File 以包含 sys_hello.c 等并重新编译内核!哪个制作文件?它在哪里?以及如何编译它以及如何调用 syscall hello?

我遇到的错误是: init_sysent.o:(.data + 0x6638): undefined reference to 'sys_hello'

我认为是因为我的 Make 文件,因为我不知道我应该修改哪个 Make File。

【问题讨论】:

    标签: makefile system-calls freebsd


    【解决方案1】:

    恐怕您还没有准备好进行任何内核开发,因此强烈建议您不要这样做。

    我不知道您是怎么读到那本指南的,当我寻找将系统调用添加到 FreeBSD 内核的方法时,我很难找到它。

    该指南有些内容已经过时,有些内容总是错误的。

    您创建了一个新文件 (sys_hello.c),但没有将其添加到构建过程中。弄清楚如何做到这一点应该是微不足道的。 1. 选择一个始终提供的系统调用,例如 fork 2.找到实现它的文件 3. grep 源树以获取该文件的提及 4. 利润

    执行步骤并获得答案留给读者作为练习。

    int syshello(p, uap)
    struct proc* p; struct syshello_args uap;
    

    K&R C 声明?这是几岁? 几年来的第一个参数是struct thread *。

    {
    sprintf(uap->buf,"Hello"); /* fill the buffer with Hello */
    

    根本上是错误的。考虑如果用户空间传递一个内核地址会发生什么。这也假设共享地址空间“工作”。代码应该使用了copyout。除了代码是错误的,因为没有参数允许用户空间说出大小是多少。

    p->p_retval[0] = 0; /* set the return value of the system call*/
    return 0;
    }
    

    如前所述,鉴于您难以弄清楚如何处理新文件,很明显您是编程新手,因此在成长之前您真的不应该接触内核。

    【讨论】:

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