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

时间:2022-05-01 15:51:45
.ko好象是内核模块的动态链接库吧,我想问的是这样的ko要怎么制作生成???
.so用gcc就可以生成,.ko呢?
我想利用.ko技术生成可重用模块,网上对.ko的资料好象基本没有,谁能介绍一下?
多谢了!!!

4 个解决方案

#1


.so是用户层的动态联接库
.ko是内核模块
怎样编译内核模块,讲起来很复杂。LZ可以查一下想关的资料

#2


内核模块的例子:

#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

#3


两个完全不同的东西。 即使可能思想上有共同之处--简单的说,都是动态的。

.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专家编程》这本书,也可以看看 “第五章 对链接的思考”

#4


速度速度
ti manf

#1


.so是用户层的动态联接库
.ko是内核模块
怎样编译内核模块,讲起来很复杂。LZ可以查一下想关的资料

#2


内核模块的例子:

#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

#3


两个完全不同的东西。 即使可能思想上有共同之处--简单的说,都是动态的。

.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专家编程》这本书,也可以看看 “第五章 对链接的思考”

#4


速度速度
ti manf