导出符号:
Linux的 /proc/kallsyms 文件对应着内核符号表。它记录了符号以及符号所在的内存地址。
模块可以使用下面的宏导出符号到内核列表当中:
EXPORT_SYMBOL(符号名);
EXPORT_SYMBOL_GPL(符号名);
导出整数加减运算函数符号的内核模块:
// 所谓的内核符号表就是在内核内部函数或变量中可供外部引用的函数。
#include <linux/init.h>
#include <linux/module.h>
int add_integar(int a,int b)
{
return a+b;
}
EXPORT_SYMBOL_GPL(add_integar);
int sub_integar(int a,int b)
{
return a-b;
}
EXPORT_SYMBOL_GPL(sub_integar);
MODULE_LICENSE("GPL v2");
模块的声明与描述
对于USB、PCI等设备驱动,通常会创建一个 MODULE_DEVICE_TABLE,以表明该驱动模块所支持的
驱动。
模块额使用计数:
模块自身通过MOD_INC_USE_COUNT、MOD_DEC_USE_COUNT宏来管理自己被使用的计数。
linux 2.6 以后的内核提供了模块技术管理接口try_module_get(&module)和module_put(&module).
模块计数管理还考虑了SMP与PREEMPT机制的影响。
模块的编译
KVERS = $(shell uname -r)
#kernel modules
obj-m += hello.o
#Specify flags for the module compilation
#EXTRA_FLAGS=-G -O0
build:kernel_modules
kernel_modules:
make -C /lib/modules/$(KVERS)/build M=(CURDIR) modules
clean:
make -C /lib/modules/$(KVERS)/build M=(CURDIR) modules
一个模块包含多个文件,则核心编译语句改为
obj-m := modulename.o
modulename-objs := file1.o file2.o
总结
Linux设备驱动以内核模块额形式存在。
今天自学到这里,爱你,叶铮。
Linux的 /proc/kallsyms 文件对应着内核符号表。它记录了符号以及符号所在的内存地址。
模块可以使用下面的宏导出符号到内核列表当中:
EXPORT_SYMBOL(符号名);
EXPORT_SYMBOL_GPL(符号名);
导出整数加减运算函数符号的内核模块:
// 所谓的内核符号表就是在内核内部函数或变量中可供外部引用的函数。
#include <linux/init.h>
#include <linux/module.h>
int add_integar(int a,int b)
{
return a+b;
}
EXPORT_SYMBOL_GPL(add_integar);
int sub_integar(int a,int b)
{
return a-b;
}
EXPORT_SYMBOL_GPL(sub_integar);
MODULE_LICENSE("GPL v2");
模块的声明与描述
对于USB、PCI等设备驱动,通常会创建一个 MODULE_DEVICE_TABLE,以表明该驱动模块所支持的
驱动。
模块额使用计数:
模块自身通过MOD_INC_USE_COUNT、MOD_DEC_USE_COUNT宏来管理自己被使用的计数。
linux 2.6 以后的内核提供了模块技术管理接口try_module_get(&module)和module_put(&module).
模块计数管理还考虑了SMP与PREEMPT机制的影响。
模块的编译
KVERS = $(shell uname -r)
#kernel modules
obj-m += hello.o
#Specify flags for the module compilation
#EXTRA_FLAGS=-G -O0
build:kernel_modules
kernel_modules:
make -C /lib/modules/$(KVERS)/build M=(CURDIR) modules
clean:
make -C /lib/modules/$(KVERS)/build M=(CURDIR) modules
一个模块包含多个文件,则核心编译语句改为
obj-m := modulename.o
modulename-objs := file1.o file2.o
总结
Linux设备驱动以内核模块额形式存在。
今天自学到这里,爱你,叶铮。