驱动学习日记1--linux内核模块的简单笔记
2014-08-31 11:59
239 查看
lsmod 命令可以获得系统中加载了的所有模块以及模块间的依赖关系。
Linux内核模块主要由以下几个部分组成:
(1)模块加载函数(一般需要)
insmod 或 modprobe(这个命令更强大,会同时加载该模块所依赖的其他模块)
(2)模块卸载函数(一般需要)
rmmod 或 modprobe -r filename 这两个命令与上面对应相反。
(3)模块许可声明(必须)
GPL,Linux2.6内核模块最常见的以 MODULE_LICENSE("Dual BSD/GPL")
语句声明模块采用BSD/GPL双LICENSE。
(4)模块作者等其他声明(可选)
其他暂时忽略。。。
内核加载模块:
加载函数一般以__init标识声明,eg. static int __init initialization_function(void){.......}
module_init(initialization_function);将这个函数注册为加载函数。
内核卸载模块:
卸载函数一般以__exit标识声明,eg. stati void __exit cleanup_function(void){.......}
module_exit(cleanup_function);将这个函数注册为加载函数。
模块的编译 Makefile :
KVERS = $(shell uname -r)
#Kernel modules
obj-m +=hello.o
#Specify flag for the module complication.
#EXTRA_CFLAGS=-g -O0
build: kernel_modules
kernel_modules:
[Tab] make -C /lib/modules/$(KVERS)/build M=$(CURDIR) modules
[Tab] make -C /lib/modules/$(KVERS)/build M=$(CURDIR) clean
Makefile文件与源代码hello.o位于同一目录,开启其中的 EXTRA_CFLAGS=-g -O0 可以得到包括调试信息的hello.ko模块。运行make命令得到的模块可直接在PC机上运行。
如果包括多个.c文件,则修改:
obj-m :=modulename.o
modulename-objs : file1.o file2.o
得到我们编译的内核模块.ko文件放置在目标文件系统的相关目录中。可用insmod 加载 ,如果要修改加载的模块,只需要rmmod并insmod即可!
Linux内核模块主要由以下几个部分组成:
(1)模块加载函数(一般需要)
insmod 或 modprobe(这个命令更强大,会同时加载该模块所依赖的其他模块)
(2)模块卸载函数(一般需要)
rmmod 或 modprobe -r filename 这两个命令与上面对应相反。
(3)模块许可声明(必须)
GPL,Linux2.6内核模块最常见的以 MODULE_LICENSE("Dual BSD/GPL")
语句声明模块采用BSD/GPL双LICENSE。
(4)模块作者等其他声明(可选)
其他暂时忽略。。。
内核加载模块:
加载函数一般以__init标识声明,eg. static int __init initialization_function(void){.......}
module_init(initialization_function);将这个函数注册为加载函数。
内核卸载模块:
卸载函数一般以__exit标识声明,eg. stati void __exit cleanup_function(void){.......}
module_exit(cleanup_function);将这个函数注册为加载函数。
模块的编译 Makefile :
KVERS = $(shell uname -r)
#Kernel modules
obj-m +=hello.o
#Specify flag for the module complication.
#EXTRA_CFLAGS=-g -O0
build: kernel_modules
kernel_modules:
[Tab] make -C /lib/modules/$(KVERS)/build M=$(CURDIR) modules
[Tab] make -C /lib/modules/$(KVERS)/build M=$(CURDIR) clean
Makefile文件与源代码hello.o位于同一目录,开启其中的 EXTRA_CFLAGS=-g -O0 可以得到包括调试信息的hello.ko模块。运行make命令得到的模块可直接在PC机上运行。
如果包括多个.c文件,则修改:
obj-m :=modulename.o
modulename-objs : file1.o file2.o
得到我们编译的内核模块.ko文件放置在目标文件系统的相关目录中。可用insmod 加载 ,如果要修改加载的模块,只需要rmmod并insmod即可!
相关文章推荐
- 【学习笔记】DM9000裸机驱动(三)之简单ARP协议的实现
- 【学习笔记】DM9000裸机驱动(三)之简单ARP协议的实现
- linux 设备驱动开发学习笔记(一):最简单的内核模块
- linux驱动学习笔记1(简单实现open,read,write,ioctl)
- 学习笔记:创建一个简单字符设备驱动的过程
- linux 驱动学习笔记04--简单驱动
- 简单的IO驱动学习笔记
- linux字符设备驱动学习笔记(一):简单的字符设备驱动
- BDA驱动学习笔记(2):例程注册
- BDA驱动学习笔记(1):功能拓扑图
- 狂人日记学习 之十一 简单横向导航
- BDA驱动学习笔记(5):APP和Driver的通信
- Java开发学习笔记之二:一个简单的Servlet
- BDA驱动学习笔记(3):NODE例程
- 学习Altas 笔记[JS简单调用服务端方法]
- Chap 7 学习笔记-事件驱动编程技术和回送
- ACE学习笔记 ----- 一个简单的网页链接提取程序
- 委托学习笔记:最简单的委托
- [原创]Ruby学习笔记(2)-简单例子
- 学习Altas 笔记[JS简单调用服务端方法]