在没有kldload的情况下向FreeBSD添加系统调用

时间:2015-04-03 03:36:03

标签: kernel freebsd

如何在内核(或相应的库中)静态编译syscall。不确定哪一个。我见过https://wiki.freebsd.org/AddingSyscalls。但它并没有说明如何将我自己的源文件添加到FreeBSD自己的编译中。

1 个答案:

答案 0 :(得分:3)

如果你能够构建一个内核模块来添加你的系统调用(正如你通过" kldload&#34所暗示的那样),你只需要做一个额外的步骤就可以拥有你的内核模块静态编译到内核中 - 使用'设备将其列在内核配置文件中。调用

例如,查看我的/usr/src/sys/amd64/conf/GENERIC内核配置文件,我看到cpufreq的设备条目:

# CPU frequency control
device      cpufreq

/usr/src/sys/modules/cpufreq目录中,我看到以下Makefile:

hostname(/usr/src/sys/modules/cpufreq) # cat Makefile

.PATH:  ${.CURDIR}/../../dev/cpufreq            \
        ${.CURDIR}/../../${MACHINE_CPUARCH}/cpufreq

KMOD=   cpufreq
SRCS=   ichss.c
SRCS+=  bus_if.h cpufreq_if.h device_if.h pci_if.h

.if ${MACHINE} == "i386" || ${MACHINE} == "amd64"
.PATH:  ${.CURDIR}/../../x86/cpufreq

SRCS+=  acpi_if.h opt_acpi.h
SRCS+=  est.c hwpstate.c p4tcc.c powernow.c
.endif

.if ${MACHINE} == "i386"
SRCS+=  smist.c
.endif

.if ${MACHINE} == "powerpc"
.PATH:  ${.CURDIR}/../../powerpc/cpufreq
SRCS+= dfs.c
.endif

.include <bsd.kmod.mk>

解析${.CURDIR}/../../x86/cpufreq将我们转到/usr/src/sys/x86/cpufreq,我们终于找到了这个模块的源文件:

hostname(/usr/src/sys/x86/cpufreq) # ll
total 106
-rw-r--r--  1 root  wheel    43K Jan 21  2014 est.c
-rw-r--r--  1 root  wheel    13K Jan 21  2014 hwpstate.c
-rw-r--r--  1 root  wheel   9.1K Jan 21  2014 p4tcc.c
-rw-r--r--  1 root  wheel    23K Jun 11  2013 powernow.c
-rw-r--r--  1 root  wheel    12K Jun 11  2013 smist.c

由于我的内核配置中有一个device cpufreq条目,我得到的cpufreq模块没有kldload