.kmod 和 .ko - 区别?

.kmod and .ko - difference?

一直在使用 Ndisgen 尝试为我的 Freebsd 9 上网本的 rtl8192se driver 生成一个 .ko 内核模块,并遵循了在几个不同的开发博客网站上找到的说明。

不知何故,我一直无法生成扩展名为 .ko 的文件。相反,我不断收到一个 .kmod 文件。 问题是,这些有什么区别?

我也尝试过 kldload 这个 .kmod 文件。当我通过 kldstat 检查它时,好的,我在那里看到它但是,当我用 dmesg 和 pciconf -lv 检查时,我的 realtek 卡仍然没有连接。

所以我想我真的需要首先生成 .ko 文件,但是我做错了什么或遗漏了什么,以至于只生成了一个 kmod? 任何指针将不胜感激!谢谢! :)

更新::

有一条消息我忽略了。

我的错!

转换后的消息是:

"...正在清理...rm: machine: 是一个目录清理 failed.Exiting"

这都是因为我粘贴了“/usr/include/machine”文件夹的副本,其中包含我认为在转换 driver 的路径中需要的所有 headers。

但我忽略了它的想法,因为 ndisgen 已经创建了一个 .kmod 文件(我认为这也是一个内核模块,只是不是 .ko 形式)所以没关系。

所以最后,因为它抱怨它是一个目录并且无法清理,所以我为该文件夹创建了一个符号 link。

瞧瞧!清理成功,现在我有了 .ko 文件! :D

看起来您获得的是 NetBSD 内核模块,而不是 FreeBSD 内核模块。查看这些帖子:

hubertf's NetBSD Blog Modern net bsd kernel module

您使用的源代码是否可以公开获取,以便我们按照您的步骤进行尝试?

ndisgen 脚本临时将 .ko 文件重命名为 .kmod 以进行一些清理。

如果清理有效,它应该将其重命名回 .ko 文件。请参阅 drvgen 函数 /usr/src/usr.sbin/ndiscvt/ndisgen.sh。 我假设在两次重命名之间出现了问题。您收到任何错误消息吗?

请记住,如果您加载驱动程序,它应该显示为 ndis0 设备!