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

linux驱动开发-模块驱动

时间:2017-08-06 17:01:20      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:获取   style   printk   高度   gnu   arc   内核源码   环境   操作   

  linux内核是可以高度定制的,通过配置编译选项达到定制的目的。

  在配置kernel编译选项时驱动程序的编译选项一般有三种,不编译、编译为内核驱动、编译为模块驱动。所以linux驱动一般分为两类,内核驱动和模块驱动,当然这两者之间并无绝对区别;当编译为内核驱动时,驱动程序将会随内核一起运行,就相当于内核的固有部分一样;当编译为模块驱动时,每个驱动程序都是独立的个体,在需要的时候安装,用完了再卸载,可以节约硬件资源。以下内容描述的是模块驱动的开发过程。

  1、获取内核源码,按照目标器件(PC机或者开发板等等)的参数(ARCH和CROSS_COMPILE)编译源码,一般目标器件都有对应得交叉编译工具链,所以在编译内核源码之前要搭建好编译环境。

  2、编写模块驱动代码,此处用最简单的驱动框架做以说明:

    ①、驱动程序源文件:tsetDriver.c      

 1 #include <linux/init.h>
 2 #include <linux/module.h>
 3 
 4 int static hello_init(void)   //入口函数
 5 {
 6     printk(KERN_ALERT"install tsetDriver.ko\n");
 7     return 0;
 8 }
 9 
10 void static hello_exit(void)  //出口函数
11 {
12     printk(KERN_ALERT" exit tsetDriver.ko\n");
13 }
14 
15 module_init(hello_init);      
16 module_exit(hello_exit);

    ②、Makefile (tips内核程序的Makefile首字母必须大写):

1 obj-m := tsetDriver.o
2 
3 KDIR := ~/opt/linux-2.6   //编译后的内核源码所在路径
4 
5 all:
6     make -C $(KDIR) M=$(PWD)  ARCH=arm CROSS_COMPILE=linux-fsl-linux-gnueabi- modules  //交叉编译前缀,根据自己的修改
7 
8 clean:
9     rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions

   3、编译、安装、测试:

    ①、编译驱动:(生成*.ko文件)

      make    

    ②、安装驱动、卸载驱动:

      将*.ko拷贝到目标板,测试安装卸载操作

root@EasyARM-iMX283 /home# insmod tsetDriver.ko 
install tsetDriver.ko
root@EasyARM-iMX283 /home# rmmod tsetDriver.ko 
exit tsetDriver.ko

  4、结语:

  驱动开发不同于应用程序开发,驱动程序的入口函数由宏module_init()指定,参数为入口参数,在入口函数中完成资源申请、硬件设备初始化等操作;出口函数由宏module_exit()指定,完成资源释放等操作,以上内容是驱动程序最基本的框架。

      

 

linux驱动开发-模块驱动

标签:获取   style   printk   高度   gnu   arc   内核源码   环境   操作   

原文地址:http://www.cnblogs.com/zhangyi-studio/p/7295080.html

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