android深度探索 hal与驱动开发,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驱动含有多个模块参数,参数要用单引号或双引号括起来;

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值