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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android深度探索(卷1)HAL与驱动开发阅读心得7相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

Android深度探索(卷1)HAL与驱动开发学习笔记

Android深度探索(卷1)HAL与驱动开发学习笔记