控制发光二极管
控制发光二极管
一. 创建LED驱动的设备文件
1.使用cdev_init函数初始化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.指定设备号
直接在代码中指定或者动态分配
3.使用cdev_add函数将字符设备添加到内核中的字符设备数组中
4.使用class_create宏创建struct class
5.使用device_create函数创建设备文件
二.卸载LED驱动的设备文件
需要一次调用device_destroy、class_destroy和unregister_chrdev_region方法
三. 设计寄存器与初始化LED驱动
LED有两个引脚:GPB0和GPB1,控制LED需要通过三个寄存器来完成,三个寄存器分别是GPMCON、GPMDAT和GPMPUD。
每一个寄存器可以使用4个字节,相当于int类型数据占用的空间。
四. 控制LED
通过字符串控制LED:使用命令行方式或通过write函数
通过I/O命令控制LED:通过ioctl函数发出
五. LED驱动的模块参数
通过module_param_array宏的第三个参数指定数组长度时要使用指针类型的数据;
如果linux驱动含有多个模块参数,参数要用单引号或双引号括起来;
指定数组类型的参数值时,逗号前后不能有空格
六. LED驱动的完整代码
测试LED驱动
- 编写测试I/O控制命令的通用程序
- 使用NDK测试LED驱动
- 使用Java测试LED驱动
LED驱动的驱动移植