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