• 读《Android深度探索(卷1)HAL与驱动开发》的一些思考07


    七、LED将为我闪烁:控制发光二级管

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

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

    cdev的大多数成员变量并不需要我们自己去初始化,只要调用cdev init 函数就可以初始化大部分cdev的成员变量。

    第2 步:指定设备号

    Linux设备文件的设备号分为主设备号和次设备号。用1个int类型(dev_t)表示。其中前12位表示主设备号,后20位表示次设备号。设备号有如下两种指定方法。

    直接在代码中指定(硬编码)。

    动态分配。

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

    cdev_add函数用于将字符设备添加到probes.数组(保存己建立的字符设备)中。 cdev_add 函数在<Linux 内核源代码>Ifs/char dev.c 文件中实现。

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

    struct class 包含了一些与设备文件有关的变量以及一些回调函数指针变量。使用class_create宏创建struct class的代码如下:

    struct c1ass *leds_class=NULL;

    leds_class = class_create(THIS_MODULE,”dev_name”);

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

    device_creat函数用于创建设备文件,该函数在<linux内核源代码>/incIude/1innx/device.b,文件中定义,在<Linux内核源代码>/drivers/base/core.c文件中实现。

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

    卸载Linux驱动的设备文件稍微简单-些,需要依次调用device_destroy、class_destroy 和unreg ister_chrdev_region方法。这3 个方法的原型如下:

    void device_destroy(struct class *class, dev_t devt)

    void class_destroy(struct class *els)

    void unregister_chrdev_region (dev_t from,unsigned count)

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

    在控制LED亮、灭之前必须要了解如何设置寄存器。ARM处理器有多个寄存器,通过设置不同寄存器的值。可以设置LED引脚的状态、打开或禁止上拉(pull-up)电路以及控制LED的亮和灭。

    4.控制LED

    LED驱动可以使用如下两种方式控制LED:

    通过字符串控制LED,

    通过l/0命令控制LED;

    要想使用上述两种方式控制LED。LED驱动必须要接收相应的数据。如果通过字符串控制LED。需要使用file_operations.write函数。如果通过I/0 命令控制LED,需要使用file_operations.ioctl函数。其中file_operations.write函数在上一擎的word_count驱动中已经使用过,file_oprations.write函数可以接收向设备文件写入的数据。而自file-operations.ioctl函数我们是头一次接触,今该函数可以接收向字符设备发送的命令和参数。

    使用下面的命令可以通过字符串控制LED 的亮、灭。

    #adb shell 'echo 1101 > /dev/s3c6410_leds' //从电池一侧数第3个LED灭,其他LED都亮

    #adb shell 'echo 1 > /dev/s3c6410 leds'    //离电池最近的LED亮,其他LED都灭

  • 相关阅读:
    什么是大小端
    mina
    出现jar包找不到的问题解决方案
    InnoDB 静态数据加密的常见问题合集
    mysqldump 数据库备份程序,mysqldump 选项合集
    出现The MySQL server is running with the --secure-file-priv option so it cannot问题的原因
    小睡一会,做了一个梦
    IntelliJ IDEA is a solution that appears after importing a project with a clock icon(idea导入项目之后出现时钟的解决方案)
    IntelliJIDE不显示项目文件夹的问题
    夏天的记忆
  • 原文地址:https://www.cnblogs.com/limomo/p/5559958.html
Copyright © 2020-2023  润新知