码迷,mamicode.com
首页 > 移动开发 > 详细

Android深度探索(卷1)HAL与驱动开发阅读心得7

时间:2016-05-30 00:52:14      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

LED将为我闪烁:控制发光二极管

一.编写LED驱动

创建LED驱动的设备文件

1.使用cdev_init函数初始化cdev

cdev结构体

struct cdev{

  struct kobject kobj;

  struct module *owner;

  const struct file_operations *ops;

  struct list_head list;

  dev_t dev;

  unsigned int count;

};

2.指定设备号

  直接在代码中指定:使用MKDEV宏将主次设备号组合成设备号,使用MAJOR和MINOR宏从设备号中获取主次设备号

  动态分配:alloc_chrdev_region函数

3.使用cdev_add函数将字符设备添加到内核中的字符设备数组中

  指定设备文件指针,设备号和设备文件数量。调用cdev_add函数

4.使用class_creat宏创建struct class

5.使用device_creat函数创建设备文件

卸载LED驱动的设备文件

  依次调用device_destroy,class_destroy和unregister_chrdev_region方法

设置寄存器与初始化LED驱动

  须知:LED有两个引脚GPB0和GPB1;

     控制LED需要通过3个寄存器来完成;

     每一个寄存器可以使用4个字节;

     使用GPMCON寄存器的低16位将LED的两个端口的属性设为Output;

     使用GPMDAT寄存器的低4位控制LED的亮灭;

     使用GPMPUD寄存器的低8位分别打开LED灯的上拉电路。

控制LED

  通过字符串控制LED:使用命令行方式或通过write函数

  通过I/O命令控制LED:通过ioctl函数发出

LED驱动的模块参数

  注意:通过module_param_array宏的第三个参数指定数组长度时要使用指针类型的数据;

     如果linux驱动含有多个模块参数,参数要用单引号或双引号括起来;

     指定数组类型的参数值时,逗号前后不能有空格

  

Android深度探索(卷1)HAL与驱动开发阅读心得7

标签:

原文地址:http://www.cnblogs.com/liuqiling/p/5540695.html

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