如何在 solaris 上制作可加载内核模块?没有 linux
how to make loadable kernel module on solaris? no linux
1。如何在 solaris 11 上创建可加载内核模块?
- 简单的可加载内核模块 (hello world)。
- 我搜索过,但只显示了如何创建 Linux 内核模块。
- 在 linux、header linux/kernel.h 中,但在 solaris
上不包括 header
2。如何在solaris 11上编译可加载内核模块?
- gcc -D_KERNEL -m64 -c cpluscplus.cpp
- 这样编译合适吗?
- 64 位,x86
这是我能想到的最小的 hello world 内核模块:
#include <sys/modctl.h>
#include <sys/cmn_err.h>
/*
* Module linkage information for the kernel.
*/
static struct modlmisc modlmisc = {
&mod_miscops, "test module"
};
static struct modlinkage modlinkage = {
MODREV_1, (void *)&modlmisc, NULL
};
int
_init(void)
{
return (mod_install(&modlinkage));
}
int
_fini(void)
{
return (mod_remove(&modlinkage));
}
int
_info(struct modinfo *modinfop)
{
cmn_err(CE_NOTE, "hello kernel");
return (mod_info(&modlinkage, modinfop));
}
使用 Oracle Developer Studio 12.6 和 Solaris 链接器将其编译为 64 位二进制文件,如下所示:
cc -D_KERNEL -I include -m64 -c foomod.c
ld -64 -z type=kmod -znodefs -o foomod foomod.o
对于 GCC,您可能需要一组不同的选项。
然后加载它:
modload ./foomod
这将抱怨签名验证。这是无害的,除非你是 运行 启用了验证启动的系统。
检查模块是否已加载:
# modinfo -i foomod
ID LOADADDR SIZE INFO REV NAMEDESC
312 fffffffff7a8ddc0 268 -- 1 foomod (test module)
# dmesg | tail -1
Mar 16 12:22:57 ST091 foomod: [ID 548715 kern.notice] NOTICE: hello kernel
这适用于 x86 机器上的 Solaris 11.4 SRU 33 运行(实际上是 VirtualBox 实例)。
1。如何在 solaris 11 上创建可加载内核模块?
- 简单的可加载内核模块 (hello world)。
- 我搜索过,但只显示了如何创建 Linux 内核模块。
- 在 linux、header linux/kernel.h 中,但在 solaris 上不包括 header
2。如何在solaris 11上编译可加载内核模块?
- gcc -D_KERNEL -m64 -c cpluscplus.cpp
- 这样编译合适吗?
- 64 位,x86
这是我能想到的最小的 hello world 内核模块:
#include <sys/modctl.h>
#include <sys/cmn_err.h>
/*
* Module linkage information for the kernel.
*/
static struct modlmisc modlmisc = {
&mod_miscops, "test module"
};
static struct modlinkage modlinkage = {
MODREV_1, (void *)&modlmisc, NULL
};
int
_init(void)
{
return (mod_install(&modlinkage));
}
int
_fini(void)
{
return (mod_remove(&modlinkage));
}
int
_info(struct modinfo *modinfop)
{
cmn_err(CE_NOTE, "hello kernel");
return (mod_info(&modlinkage, modinfop));
}
使用 Oracle Developer Studio 12.6 和 Solaris 链接器将其编译为 64 位二进制文件,如下所示:
cc -D_KERNEL -I include -m64 -c foomod.c
ld -64 -z type=kmod -znodefs -o foomod foomod.o
对于 GCC,您可能需要一组不同的选项。
然后加载它:
modload ./foomod
这将抱怨签名验证。这是无害的,除非你是 运行 启用了验证启动的系统。
检查模块是否已加载:
# modinfo -i foomod
ID LOADADDR SIZE INFO REV NAMEDESC
312 fffffffff7a8ddc0 268 -- 1 foomod (test module)
# dmesg | tail -1
Mar 16 12:22:57 ST091 foomod: [ID 548715 kern.notice] NOTICE: hello kernel
这适用于 x86 机器上的 Solaris 11.4 SRU 33 运行(实际上是 VirtualBox 实例)。