【问题标题】:freebsd compile is so complicated?freebsd编译这么复杂?
【发布时间】:2015-04-28 03:57:18
【问题描述】:

我想将自定义系统调用添加到 freebsd(学校作业)。我谷歌数百次。没有正确的解决方案。 我的作业是:“将自定义系统调用添加到 freebsd 内核并重新编译内核并使用它”。 最后我发现我应该按照这两页中的说明进行操作:

1:http://www.onlamp.com/pub/a/bsd/2003/10/09/adding_system_calls.html

然后

2:https://www.freebsd.org/doc/en/books/handbook/kernelconfig-building.html

它会在编译时显示错误吗:

<sys/parma.h> no such file or directory
<sys/kern.h> no such file or directory
<sys/syscallargs.h> no such file or directory

我从我的文件中删除了这三个包含头文件,然后重新编译它。现在显示其他错误,例如:MAXCPU 在 pcpu.h 文件中未解密。

我错过了什么?我怎样才能完成我的学业?

注意:我在 vbox 中使用 freebsd8

【问题讨论】:

  • 也许您应该尝试使用 2003-10-09 的 FreeBSD 版本,因为它是撰写该文章的日期。

标签: freebsd bsd


【解决方案1】:

看看错误信息是怎么说的;文件不存在。

  • 第一个包含文件是错字;是param.h,不是parma.h
  • 没有kern.h。也许你的意思是sys/kernel.h
  • 同上syscallargs.h。你的意思可能是syscall.h

你可以找到头文件,例如:

find /usr/src/sys/ -type f -name '*.h'|grep 'sys/.*kern.*\.h'
/usr/src/sys/ofed/include/linux/kernel.h
/usr/src/sys/dev/netmap/netmap_kern.h
...

更新:更重要的是确定哪些包括您真正需要

FreeBSD 有很好的文档。如果您想使用内核函数或数据结构,可能会在手册页的第 9 节中介绍。

您可以使用ls /usr/share/man/man9/ | less 列出该部分中的所有手册页。或者您可以使用apropos 命令。 既然你想实现一个系统调用,就从例如开始

apropos syscall

它会返回:

SYSCALL_MODULE(9)        - syscall kernel module declaration macro
syscall(2), __syscall(2) - indirect system call

在我看来,第一个可能与您的任务相关。 (第二个是如何从用户空间调用系统调用。)所以请阅读man SYSCALL_MODULE。或阅读online

注意:

     A minimal example for a syscall module can be found in
     /usr/share/examples/kld/syscall/module/syscall.c.

该示例应该足以让您开始编写自己的系统调用模块...

【讨论】:

  • 是的,前两个是我的错字。第三是教程中提到的。毕竟我改变了你的指导,但现在:所有 3 个文件(param.h、kernel.h、syscall.h)都没有这样的文件或目录。同样的错误
  • 文件syscallargs.h存在于OpenBSD内核中,与FreeBSD内核不同!关于“没有这样的文件”错误,请编辑您的问题以显示您是如何编译代码的。
  • @NaserHamidi 看看我更新的答案中提到的示例。
【解决方案2】:

看看 share/examples/kld/syscall 作为一个模块的完整实现。

向内核添加新文件留作读者练习。

这里有一个提示:在 kern/* 子目录中找到最新添加的文件,并检查已完成哪些提交以使其编译。

事实上,您可以对 syscall 做同样的事情:找到最新添加的 SYSCALL 并检查它是如何实现的。

所有这些都在 svn/git 存储库历史中可用。

【讨论】:

    猜你喜欢
    • 2018-02-20
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多