码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2015-01-09 23:43:20      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

内核驱动模块的编写规范


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

<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文件的编写规范

标签:

原文地址:http://www.cnblogs.com/yanshare/p/4214304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!