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