专题5-内核模块开发3-内核模块可选项

1、模块申明

a、MODULE_LICENSE("遵守的协议")

申明该模块遵守的许可证协议,如:"GPL","GPL V2"等

b、MODULE_AUTHOR("作者")

申明模块的作者

c、MODULE_DESCRIPTION("模块的功能描述")

申明模块的功能

d、MODULE_VERSION("V1.0")

申明模块的版本

2、模块参数

在应用程序中

int main(int argc,char **argv)

argc表示命令行输入的参数个数

argv中保存输入的参数

通过module_param指定保存模块参数的变量,模块参数用于在加载模块时传递参数给模块。

module_param(name,type,perm)

name:变量的名称

type:变量类型,bool布尔型;int,整型;charp,字符串型;

perm:是访问权限,S_IRUGO,读权限;S_IWUSR,写权限。

eg:

touch Makefile(跟之前类似)

touch helloworld.c

chmod 777 -R helloworld.c

int a=3;char *st;

module_param(a,int,S_IRUGO|S_IWUSR);

module_param(st,charp,S_IRUGO);

那么在加载的时候可以对模块参数a进行改变,如:

insmod helloworld.ko a=10

3、符号导出

如果某个内核模块中实现了某个函数且该函数要在其他内核模块中获得调用,那么要把该实现了的函数声明导出能给其他模块调用。内核符号的导出使用宏

EXPORT_SYMBOL(符号名)

EXPORT_SYMBOL_GPL(符号名)

说明:

其中EXPORT_SYMBOL_GPL只能用于包含GPL许可证的模块

EXPORT_SYMBOL(add) ;

add为一个函数。

时间: 2024-11-04 03:11:11

专题5-内核模块开发3-内核模块可选项的相关文章

Linux内核模块编程与内核模块LICENSE -《详解(第3版)》预读

Linux内核模块简介 Linux内核的整体结构已经非常庞大,而其包含的组件也非常多.我们怎样把需要的部分都包含在内核中呢?一种方法是把所有需要的功能都编译到Linux内核.这会导致两个问题,一是生成的内核会很大,二是如果我们要在现有的内核中新增或删除功能,将不得不重新编译内核. 有没有一种机制使得编译出的内核本身并不需要包含所有功能,而在这些功能需要被使用的时候,其对应的代码被动态地加载到内核中呢?Linux提供了这样的一种机制,这种机制被称为模块(Module).模块具有这样的特点. 模块本

Linux内核模块编程与内核模块LICENSE -《具体解释(第3版)》预读

Linux内核模块简单介绍 Linux内核的总体结构已经很庞大,而其包括的组件或许多.我们如何把须要的部分都包括在内核中呢?一种方法是把全部须要的功能都编译到Linux内核.这会导致两个问题.一是生成的内核会很大,二是假设我们要在现有的内核中新增或删除功能,将不得不又一次编译内核. 有没有一种机制使得编译出的内核本身并不须要包括全部功能,而在这些功能须要被使用的时候,其相应的代码被动态地载入到内核中呢?Linux提供了这样的一种机制,这样的机制被称为模块(Module).模块具有这样的特点. 模

Linux内核分析(二)----内核模块简介|简单内核模块实现

Linux内核分析(二) 昨天我们开始了内核的分析,网上有很多人是用用源码直接分析,这样造成的问题是,大家觉得很枯燥很难理解,从某种意义上来说linux系统本身就是由一个个模块构成的,所以我会结合内核模块的设计,去分析内核,从而达到对linux内核的理解. 今天我们会分析到以下内容: 1.      Linux内核模块简介 2.      简单内核模块实现 l  Linux内核模块简介 1.       何为内核模块 在上一篇博文中我们先通过内核配置,在配置的过程中我们对内核的组件进行了选择(当

专题5-内核模块开发2内核模块设计与编写

1.范例 touch helloworld.c chmod 777 -R helloworld.c #include<linux/init.h> #include<linux/module.h> static int hello_init(void) { printk(KERN_WARNING"hello,world!\n"); return 0; } static void hello_exit(void) { printk(KERN_INFO"Go

Linux内核模块开发基础【转】

本文转载自:http://blog.csdn.net/coding__madman/article/details/51298180 1. 什么是内核模块 内核模块具有以下两个特点:1. 模块本身并不被编译进内核文件(zImage或bzImage),可以根据需求,在内核运行期间动态的安装或卸载. 2. 为什么需要内核模块 原因:Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢,方法1:把所有的组件都编译键内核,即:zImage或bzImage,但这样会导致一个问题:占用

linux内核模块开发基础

1. 什么是内核模块 内核模块具有以下两个特点:1. 模块本身并不被编译进内核文件(zImage或bzImage),可以根据需求,在内核运行期间动态的安装或卸载. 2. 为什么需要内核模块 原因:Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢,方法1:把所有的组件都编译键内核,即:zImage或bzImage,但这样会导致一个问题:占用内存过多.然后内核模块就诞生了,可以不用被编译进内核但是可以动态的添加到正在运行的内核中! 3. 如何使用内核模块 1> 安装模块 i

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转)

linux是如何组成的?答:linux是由用户空间和内核空间组成的为什么要划分用户空间和内核空间?答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的安全性,比如X86可以有4种模式RING0~RING3  RING0特权模式给LINUX内核空间RING3给用户空间linux内核是如何组成的?答:linux内核由SCI(System Call Interface)系统调用接口.PM(Process Management)进程管理.MM(Memory Managem

【整理】--Linux简单内核模块开发

1.linux 内核模块不被编译到内核文件(zImage,bzImage), 而是在运行期间动态的安装和卸载 2.内核模块包括一下几部分:主体部分设计,编译内核模块,安装卸载NHMK,可选项使用(模块申明,MK参数,符号输出) 3.简单例子: hello.c: #include<linux/init.h>#include<linux/module.h>#include<linux/kernel.h> MODULE_LICENSE("Dual BSD/GPL&q

linux内核模块开发

一,内核模块功能: 让内核文件(zImage或bzImage)本身并不包含某组件,而是在该 组件需要被使用的时候,动态地添加到正在运行的内核中 二,内核模块安装和卸载加载:insmod (insmod hello.ko)卸载:rmmod (rmmod hello)查看:lsmod加载:modprobe (modprobe hello)modprobe如同insmod,也是加载一个模块到内核.它的不同之处在于它会根据文件/lib/modules/<$version>/modules.dep来查看

5、Linux内核模块开发

Linux的模块驱动 接下来写个最简单的驱动程序,就像程序语言的hello world程序. 首先是:hello.c的代码: 这是个最简单的驱动程序.就是打印hello的信息.驱动程序和我们的程序语言结果有点不大一样.驱动模块的入口是倒数第二行的module_init()的函数.驱动模块的出口是module_exit()的函数. 3.接着是makfile文件: 这也是一个很简单的Makefile文件了.Obj-m后面跟的是我们的最终目标依赖的文件hello.o.第三行的KDIR是我们编译进的内核