linux驱动模块编写规范以及Makefiel文件的编写规范

内核驱动模块的编写规范


驱动模块一般涉及的必用的头文件:

<linux/init.h>
<linux/module.h>
<linux/kernel.h>

驱动模块的入口函数的规范:

int __init entry_name(void)
{
/*xxx*/

return 0;
}

module_init(entry_name);

驱动模块的出口函数规范:

void __exit exit_name(void)
{

}

module_exit(exit_name);

模块的信息的声明:

MODULE_LICENSE("GPL"); //模块当中此行必须要写,下面三行可选
MODULE_VERSION("版本");
MODULE_AUTHOR("作者");
MODULE_DESCRIPTION("对模块的描述");

===========================================================
一个模块对应一个test.c那么,Makefile如下编写

obj-m := test.o //

KERNLE := /lib/modules/2.6.32-358.el6.i686/build/

all:
make -C $(KERNLE) M=$(shell pwd) modules
clean:
make -C $(KERNLE) M=`pwd` clean;
rm -f *.order
mymove:
mv *.ko /nfsroot/

===========================================================
一个模块对应对个.c,比如test1.c test2.c test3.c,Makefile如下

obj-m := name.o
name-objs := test1.o test2.o test3.o

KERNLE := /lib/modules/2.6.32-358.el6.i686/build/

all:
make -C $(KERNLE) M=$(shell pwd) modules
clean:
make -C $(KERNLE) M=`pwd` clean;
rm -f *.order
mymove:
mv *.ko /nfsroot/

==========================================================
如果在一个单独的目录当中,一次用一个Makefile管理编译对个.c
对应多个模块对应的.ko文件,比如,test1.c test2.c要编译生成
两个单独的模块,那么Makefile如下编写:

obj-m := test1.o test2.o

KERNLE := /lib/modules/2.6.32-358.el6.i686/build/

all:
make -C $(KERNLE) M=$(shell pwd) modules
clean:
make -C $(KERNLE) M=`pwd` clean;
rm -f *.order
mymove:
mv *.ko /nfsroot/

=========================================================
如果要在任意位置或者想智能的在插入某个模块时需要自动先插入
被依赖的模块,就是说如果想用modprobe 命令插入模块,那么
Makefile必须如下写:


obj-m := test1.o test2.o

KERNEL := /linux-millet-driver
DEST_DIR := /nfsroot/
PWD := $(shell pwd)

all:

make -C $(KERNEL) M=$(PWD) modules
install:
make -C $(KERNEL) M=$(PWD) INSTALL_MOD_PATH=$(DEST_DIR) modules_install
depmod -A

clean:

make -C $(KERNEL) M=$(PWD) clean
rm -f *.order

mycopy:
cp *.ko /nfsroot/

*************************************************************************************
与驱动模块操作有关的命令:

将当前目录下的xx.ko模块插入内核:
insmod xx.ko

将内核当中正在运行的模块xx移除:
rmmod xx

查看当前目录下的xx.ko模块的详细信息:
modinfo xx.ko

在模块已经成功安装的前提下利用此命令智能
安装驱动模块(分析依赖关系,先安装被依赖的
驱动模块):
modprobe xx

智能移除模块驱动,会将依赖的模块也移除:
modprobe -r xx

查看当前内核当中插入的驱动列表:
lsmod

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。