第七章

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

一、编写LED驱动

1、创建LED驱动的设备文件

第一步:使用cdev_init函数初始化cdev

leds_cdev.owner = TRIS_MODULE;

第二步:指定设备号

设备号指定方法:1.直接在代码中指定;2.动态分配。

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

第四步:使用class_create宏创建struct class

struct class 包含了一些与设备文件有关的变量以及一些回调函数指针变量。

第五步:使用device_create函数创建设备文件

device_create(ldes_class, NULL, dev_number, NULL, DEVICE_NAME);

2、卸载LED驱动的设备文件

void device_destroy(struct class *class, dev_t devt)

void class_destroy(struct class *cls)

void unregister_chrdev_region(dev_t from, unsigned count)

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

LED的两个引脚:GPB0GPB1

4、控制LED

1.通过字符串控制LED

2.通过I/O命令控制LED

5LED驱动的模块参数

使用module_param宏指定模块参数

6、LED驱动的完整代码

二、测试LED驱动

  LED 驱动的模块参数

  为 Linux 驱动指定一个模块参数需要使用 module_param Cname, type, perm)宏。其中 name 表 示参数名, type 表示参数类型, perm表示读/写权限。 

1、编写测试I/O控制命令的通用程序

LED 驱动有两种与设备文件交互的方式: 直接写入字符串数据和控制命令.直接向设备文件写入数据可以使用命令行方式来完成,也可以通过 write 函数来完成。

2、使用NDK测试LED驱动

  NDK 程序测试和可执行程序测试差不多。只不过 NDK Library 可以被 Java 程序调用,而在 Android 系统中的可执行程序在非 root 状态下是无法直接被调用的。

3、使用Java测试LED驱动

  由于 JDK 未提供发送命令的 API,困此使用 Java 只能通过发送控制字符串测试 LED 驱动。

三、LED驱动的移植

移植Linux驱动时,在修改Linux驱动的源代码时,应尽量不修改Linux驱动的接口。

 这章充分说明LED 驱动已经包括了 Linux 驱动所有必要的部分,一个完整的 Linux 驱动主要由内部处理和与硬件交互降部分组成。其中内部处理主要是指 Linux 驱动的装载、卸载、与设备文件相关的动作处理以及业务逻辑等。

原文地址:https://www.cnblogs.com/diyizhang/p/5560316.html