0
如何在內核中靜態編譯syscall
(或相應的庫,不知道哪一個)。我見過https://wiki.freebsd.org/AddingSyscalls。但是它沒有說明如何將我自己的源文件添加到FreeBSD自己的編譯中。在沒有kldload的情況下向FreeBSD添加系統調用
如何在內核中靜態編譯syscall
(或相應的庫,不知道哪一個)。我見過https://wiki.freebsd.org/AddingSyscalls。但是它沒有說明如何將我自己的源文件添加到FreeBSD自己的編譯中。在沒有kldload的情況下向FreeBSD添加系統調用
如果你能夠構建一個內核模塊來添加你的系統調用(正如你在你的標題中通過「kldload」所暗示的那樣),你只需要做一個額外的步驟就可以將你的內核模塊靜態編譯到內核中 - 使用'設備'調用將其列在內核配置文件中。
舉例來說,看着我/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
項,我得到的CPU頻率模塊沒有kldload
所以在內核配置映射到一個目錄下的'device'進入'/ usr/src目錄/ SYS/modules'那是做'製作'? – user2268997 2015-04-08 04:36:10
這似乎是設計,是的。然而,我看到這個工作有兩種方式,我不確定哪個是實際設計 - 綁定是基於目錄名發生的,或者綁定程序掃描所有尋找帶有KMOD定義的Makefiles的目錄,如你可以在cpufreq Makefile中看到上面的內容。 – antiduh 2015-04-08 15:33:34