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

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

实现原理:linux驱动与本机的I/O内存进行交互,连接到主机的硬件在主机内存的映射

1编写LED驱动

1.1创建LED驱动的设备文件

使用cdev_init函数初始化cdev

Cdev 结构体

struct cdev {

     Struct konject kobj;

     Struct module *owner;

     Const struct file_operation *ops;

     Strust list_head list;

     Dev_t dev;

     Unsigned int count;

}

指定设备号

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

使用class_create宏创建struct class

使用device_create函数创建设备文件

卸载LED驱动

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

设置不同寄存器的值,可以设置LED引脚的状态

LED有两个引脚GPB1GPB0

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

每个寄存器可以使用4个字节(int

控制LED状态

通过字符串控制LED

通过I/o命令控制LED

LED驱动的移植

测试LED驱动程序

编写测试程序为每一个测试程序

Abd shell ‘/data/local/ioctl/  /dev/s3c6420_lkeds  1  2’

本节完成了LED驱动的开发,一个硬件驱动主要有内部处理和硬件交互两部分组成。其中,内部处理是指linux驱动的装载、卸载,与设备文件相关的动作处理(读写设备文件、向设备发送I/O命令等动作)以及业务逻辑等。与硬件交互是指通过iowriter32ioread32等函数等函数与硬件中的寄存器进行数据交互。

原文地址:https://www.cnblogs.com/Wqian/p/5560655.html