首页 > 代码库 > linux驱动模块编写规范以及Makefiel文件的编写规范
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
linux驱动模块编写规范以及Makefiel文件的编写规范