【问题标题】:Adding a syscall to FreeBSD without kldload在没有 kldload 的情况下向 FreeBSD 添加系统调用
【发布时间】:2015-04-03 03:36:02
【问题描述】:

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

【问题讨论】:

    标签: kernel freebsd


    【解决方案1】:

    如果你能够构建一个内核模块来添加你的系统调用(正如你在标题中通过“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 条目,我得到没有kldload 的cpufreq 模块

    【讨论】:

    • 所以内核配置中的device条目映射到一个目录/usr/src/sys/modules,即maked ?
    • 这似乎是设计,是的。但是,我看到这有两种工作方式,我不确定哪种是实际设计 - 绑定基于目录名称发生,或者活页夹扫描所有目录以查找其中包含 KMOD 定义的 Makefile,如你在上面的 cpufreq Makefile 中看到了。
    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 2011-12-18
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2015-01-18
    • 2011-03-03
    相关资源
    最近更新 更多