首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在solaris上制作可加载的内核模块?没有linux

如何在solaris上制作可加载的内核模块?没有linux
EN

Stack Overflow用户
提问于 2018-06-07 05:21:34
回答 1查看 309关注 0票数 1

1.如何在solaris 11上创建可加载的内核模块?

  • 简单的可加载内核模块(hello world)。
  • 我进行了搜索,但只展示了如何创建Linux内核模块。
  • 在linux中,头linux/kernel.h,但不包括solaris上的标头。

2.如何在solaris 11上编译可加载内核模块?

  • gcc -D_KERNEL -m64 -c cpluscplus.cpp
  • 按照上面的方式编译合适吗?
  • 64位,x86
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-16 12:29:08

下面是我可以提出的最小hello内核模块:

代码语言:javascript
复制
#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位二进制文件,如下所示:

代码语言:javascript
复制
cc -D_KERNEL -I include -m64 -c foomod.c
ld -64 -z type=kmod -znodefs -o foomod foomod.o

对于GCC来说,你可能需要一套独特的选择。

然后用以下内容加载:

代码语言:javascript
复制
modload ./foomod

这将抱怨签名验证。这是无害的,除非您正在运行已验证启动的系统。

检查模块是否已加载:

代码语言:javascript
复制
# 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.4SRU 33上工作(实际上是VirtualBox实例)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50733459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档