如何在LINUX内核中添加模块--实验环境READ HAT LINUX 5.0
2012-05-25 21:45
309 查看
由于LINUX设备驱动以内核模块的形式而存在,因此,掌握这一章的内容是编写任何类型设备驱动所必须的。在具体的设备驱动开发中,将驱动编译为内核模块也有很强的工程意义,因为如果将正在开发中的驱动直接编译入内核,而开发过程中会不断修改驱动的代码,则需要不断地编译内核并重启内核,但是如果编译为模块,则只需要rmmod并insmod即可,开发效率大为提高。下面说明如何添加、编译并允许LINUX模块。
LINUX的模块主要由6部分组成:
1、模块的加载函数(必须)
当通过insmod或modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作。
2、模块的卸载函数(必须)
当通过rmmod命令卸载某模块时,模块的卸载函数会自动被内核执行,完成与模块加载函数相反的功能。
3、模块许可证声明
模块许可证(LICENSE)声明描述内核模块的的许可权限,如果不声明LICENSE,模块被加载时,将接到内核被污染的警告。
4、模块参数(可选)
模块参数是模块被加载的时候可以被传递给它的值,它本身对应模块内部的全局变量。
5、模块导出符号(可选)
内核模块可以导出符号(symbol,对应于函数或者是变量),这样其他模块就可以使用本模块中的变量或者是函数。
6、模块作者等信息声明(可选)
知道了LINUX模块的组成后,我们来编写一个简单的LINUX内核模块hello.c
在内核源代码树形目录的drivers目录下新建一个文件夹,名字为testmod,然后进入此文件夹中,创建我们的.c源文件,hello.c
源代码编写完之后,接下来我们添加MAKFILE编译文件,首先修改drvier目录下的MAKEFILE文件,添加testmode目录到此MAKEFILE
文件中,drvier目录下修改的MAKEFILE文件如下所示:
然后在testmode目录下,添加一个MAKEFILE 文件,文件的内容为:
做好上面的准备工作之后,我们开始编译模块文件,使用如下的编译命令:
make -C /usr/src/linux-2.6.35.13 M=/usr/src/linux-2.6.35.13/drivers/testmod modules
输入以上命令之后,我们将会成功得到模块文件,hello.ko
当模块文件生成之后,使用命令insmod hello.ko,我们将看到屏幕上打印Hello World enter
使用命令rmmod hello,ko,我们将在屏幕看到打印Hello World exit.
LINUX的模块主要由6部分组成:
1、模块的加载函数(必须)
当通过insmod或modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作。
2、模块的卸载函数(必须)
当通过rmmod命令卸载某模块时,模块的卸载函数会自动被内核执行,完成与模块加载函数相反的功能。
3、模块许可证声明
模块许可证(LICENSE)声明描述内核模块的的许可权限,如果不声明LICENSE,模块被加载时,将接到内核被污染的警告。
4、模块参数(可选)
模块参数是模块被加载的时候可以被传递给它的值,它本身对应模块内部的全局变量。
5、模块导出符号(可选)
内核模块可以导出符号(symbol,对应于函数或者是变量),这样其他模块就可以使用本模块中的变量或者是函数。
6、模块作者等信息声明(可选)
知道了LINUX模块的组成后,我们来编写一个简单的LINUX内核模块hello.c
在内核源代码树形目录的drivers目录下新建一个文件夹,名字为testmod,然后进入此文件夹中,创建我们的.c源文件,hello.c
源代码编写完之后,接下来我们添加MAKFILE编译文件,首先修改drvier目录下的MAKEFILE文件,添加testmode目录到此MAKEFILE
文件中,drvier目录下修改的MAKEFILE文件如下所示:
然后在testmode目录下,添加一个MAKEFILE 文件,文件的内容为:
做好上面的准备工作之后,我们开始编译模块文件,使用如下的编译命令:
make -C /usr/src/linux-2.6.35.13 M=/usr/src/linux-2.6.35.13/drivers/testmod modules
输入以上命令之后,我们将会成功得到模块文件,hello.ko
当模块文件生成之后,使用命令insmod hello.ko,我们将看到屏幕上打印Hello World enter
使用命令rmmod hello,ko,我们将在屏幕看到打印Hello World exit.
相关文章推荐
- LINUX内核编译方法以及其步骤(在READ HAT LINUX 5.0上面运行成功)
- Linux下ipv6配置系列二:如何为Nginx添加ipv6模块
- 如何用Maven手动添加Linux环境下的JZMQ依赖库
- linux(Red Hat Linux 9)中添加环境变量
- LINUX SSH jail 笼环境下如何添加命令
- 玩转Linux_Linux如何添加环境变量_GCC编译器怎么添加INCLUDE与LIB环境变量
- linux下为已经编译好的php环境添加mysql扩展(php安装完成后如何添加mysql扩展)
- Linux环境下不重新编译php添加扩展模块
- Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
- “Linux内核分析”实验报告(七)Linux 操作系统如何装载链接并执行程序
- linux read hat 5 语言环境切换
- linux实验_添加内核模块-完整版本_百度文库
- linux环境下载apache中添加php模块
- Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
- 如何在LINUX内核中添加模块
- 如何在linux环境添加新用户
- 如何将自己的模块添加到Linux 2.6内核的配置系统中
- linux如何添加环境变量
- Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
- linux 添加环境变量