Makefile 在FreeBSD添加新的系统调用

Makefile 在FreeBSD添加新的系统调用,makefile,system-calls,freebsd,Makefile,System Calls,Freebsd,我想向FreeBSD添加自定义helloworld系统调用。我使用以下链接作为指导:在第4步中说:修改Make文件以包含sys_hello.c等,然后重新编译内核!哪个牌子的文件?它在哪里?如何编译它,如何调用syscall hello 我面临的错误是: init_sysent.o:(.data+0x6638):对“sys_hello”的未定义引用 我认为这是因为我的Make文件,因为我不知道应该修改哪个Make文件。我担心您还没有准备好进行任何内核开发,因此强烈建议您不要这样做 我不知道你是怎

我想向FreeBSD添加自定义helloworld系统调用。我使用以下链接作为指导:在第4步中说:修改Make文件以包含sys_hello.c等,然后重新编译内核!哪个牌子的文件?它在哪里?如何编译它,如何调用syscall hello

我面临的错误是: init_sysent.o:(.data+0x6638):对“sys_hello”的未定义引用


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

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

我不知道你是怎么读到这本指南的,当我寻找向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;
}
如前所述,考虑到您很难弄清楚如何处理新文件,很明显您是编程新手,因此,在您成长之前,您确实不应该接触内核