驱动学习日记1--linux内核模块的简单笔记

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即可!













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值