2015-04-03 145 views

回答

3

如果你能夠構建一個內核模塊來添加你的系統調用(正如你在你的標題中通過「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

+0

所以在內核配置映射到一個目錄下的'device'進入'/ usr/src目錄/ SYS/modules'那是做'製作'? – user2268997 2015-04-08 04:36:10

+0

這似乎是設計,是的。然而,我看到這個工作有兩種方式,我不確定哪個是實際設計 - 綁定是基於目錄名發生的,或者綁定程序掃描所有尋找帶有KMOD定義的Makefiles的目錄,如你可以在cpufreq Makefile中看到上面的內容。 – antiduh 2015-04-08 15:33:34

相關問題