动态链接库.ko与.so的区别???怎么生成制作.ko文件 ???

rgbsky_nudt 2008-07-25 12:31:22
.ko好象是内核模块的动态链接库吧,我想问的是这样的ko要怎么制作生成???
.so用gcc就可以生成,.ko呢?
我想利用.ko技术生成可重用模块,网上对.ko的资料好象基本没有,谁能介绍一下?
多谢了!!!
...全文
2813 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
plato__xie 2010-03-10
  • 打赏
  • 举报
回复
速度速度
ti manf
joyself 2008-07-28
  • 打赏
  • 举报
回复
两个完全不同的东西。 即使可能思想上有共同之处--简单的说,都是动态的。

.ko -- kernel object,内核模块,可以在Linux内核起来之后动态的加载和卸载。
.so -- shared object,用户层的动态库 (于.a 对应),使用同一个.so的程序在运行时
只需要该.so的同一份拷贝。

关于.ko,上面有范例了。在Linux Device Driver 3rd那本书上也有说明。
至于.so,这里有例子:
http://blog.csdn.net/thinkerABC/archive/2006/03/11/621817.aspx

另外,如果你有 《C专家编程》这本书,也可以看看 “第五章 对链接的思考”
KimenWu 2008-07-25
  • 打赏
  • 举报
回复
内核模块的例子:

#include <linux/module.h>
#include <linux/init.h>
#include <buffbu_debug.h>

MODULE_LICENSE("GPL");

int init_debug(void)
{
PDEBUG("Hello World!%s","\n");
return 0;
}
void exit_debug(void)
{
PDEBUG("exit the module%s","\n");
}

module_init(init_debug);
module_exit(exit_debug);


Makefile

ifneq($(KERNELRELEASE),)
obj-m := hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

KimenWu 2008-07-25
  • 打赏
  • 举报
回复
.so是用户层的动态联接库
.ko是内核模块
怎样编译内核模块,讲起来很复杂。LZ可以查一下想关的资料

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧