freebsd内核模块 - “make”命令:无法定位内核源代码树。设置SYSDIR以覆盖

时间:2017-02-02 10:18:32

标签: freebsd kernel-module

我是freebsd的新手。我在VMware上安装了freebsd。我想先编写一个freebsd内核模块。我找到了这个链接:How to write a FreeBSD Kernel Module

但是在第3步中,在 make 命令后,我得到: 无法找到内核源代码树。将SYSDIR设置为覆盖。

make 命令的输出是什么? 我现在该怎么办?

3 个答案:

答案 0 :(得分:1)

一般来说,你要开始的地方是检查FreeBSD源代码。像这样:

svnlite co http://svn.freebsd.org/base/head

这将创建“head”目录。然后:将包含模块源代码的目录移动到head / sys / dev /中。去做head / sys / modules /,使用'pty'作为示例(cp -r pty yourmodule),修改head / sys / modules / yourmodule / Makefile(这是不言自明的,只需更改输出名称和源文件名),修改head / sys / modules / Makefile以添加“yourmodule”(再次,只在那里搜索“pty”,复制,粘贴,重命名)。 Voila - 您已经以最佳方式将内核模块连接到构建;您现在可以使用“make buildkernel installkernel”,kgdb(8)将知道代码的来源,启用了INVARIANTS等。

答案 1 :(得分:0)

FreeBSD handbook描述了如何使用svn获取内核源代码。

答案 2 :(得分:0)

在创建/测试自己的模块之前,我建议首先尝试编译generic kernel,接下来是自定义内核,并且只有在成功完成所有这些之后,才尝试开始测试模块。这样做的目的是熟悉freebsd构建过程的工作原理,并帮助您更快地实现模块。

这是基本的"快速"步骤(滑动mergemaster)进行全面清洁升级:

  1. cd / usr / src
  2. svnlite co svn://svn.freebsd.org/base/stable/11 / usr / src
  3. 制作buildworld(如果有多个核心,你可以尝试制作-j40 buildworld)
  4. make kernel(或make -j40 kernel)
  5. make installworld(跳过mergemaster -p)
  6. 是| make delete-old
  7. cp -R / etc /etc.old& amp ;& amp; cd / usr / src&&分发DESTDIR = /
  8. cd /etc.old& amp ;& amp; cp group passwd master.passwd / etc&& pwd_mkdb /etc/master.passwd
  9. 重新启动
  10. 是| make delete-old-libs
  11. 完成所有这些操作后,您可以通过编辑/etc/src.conf文件和您可以定义的/etc/make.conf来自定义构建,以便仅编译模块,从而加快构建过程,以下是/etc/make.conf的示例,除了使用自定义内核/usr/src/sys/amd64/conf/TEQUILA之外,它只会编译zfsopensolaris个模块:

    MODULES_OVERRIDE=zfs opensolaris
    KERNCONF=TEQUILA
    

    通过这样做,您可以更快地编译/测试,您确实可以这样做:

    MODULES_OVERRIDE=mymodule