在Linux的ARM平台上的驱动设计需要遵循一个基本的模式,也就是说在你的驱动设计里面除了有些是关于你的硬件知识,但是有些东西是设计这个驱动的几个必须的模块:
1、内核驱动的加载函数(必须的)
static int _ _init initialization_function(void)
{
………………………..
}
module_init(initialization_function);但是在2.6的内核中可以用requset_module(module_name)或者request_module(“char-major-%d-%d”,MAJOR(dev),MINOR(dev));
2、内核驱动卸载模块(必须的)
static void _ _exit cleanup_function(void)
{
……………………………
}
module_exit(cleanup_function);
3、内核模块参数(可以选择的)
在这一点上要说清楚,我们可以在加载驱动的时候给我们的驱动传一些参数,这个参数可是单个的也可以说数组,具体的可以按照实际情况。
static char *student_name =”xmphoenix!”;
static int num=9;
module_param(num,int,S_IRUGO);
module_param(student_name,char *p,S_IRUGO);
这样在内核加载的时候就传进去了两个参数,如果你是在命令行加载该驱动的话,那么你可以在命令行后加入该参数的名称=xxx,类似的模式来加载你传入的参数
4、模块许可声明(必须的)
在这个部分由于Linux的版权的问题,你需要在你的驱动模块里面添加一些声明,其实这个模块什么很大的实际意义,对于的编程没有任何的影响,但是必须加上去
5、模块导出符号(可以选择的)
具体的什么意思,不是很清楚也没有用到过,但是估计就是把内核的符号表导出来,可以让其他的模块使用罢了
6、模块的声明与描述
在这个模块主要是描述你些的这个驱动的一些基本信息,版本…….等一系列的信息,具体的参见一般的说明书就可以。