zoukankan      html  css  js  c++  java
  • 《Android深度探索》(卷1)HAL与驱动开发读后感

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

      在上一章我们已经了解了开发Linux驱动程序的步骤,并给了一个实例来演示如何开发完一个完整的Linux驱动。而对大多数Linux驱动来说,需要直接与硬件交互。在这章中,需要自己动手编写控制LED的驱动程序,注重实践操作。本章将完成一个真正意义上的Linux驱动。

    1.LED驱动的实现与原理

    尽管Linux 驱动直接与硬件打交道, 但并不是 Linux 驱动直接向硬件中的内存写数据, 而是与本机的 I/O 内存(I/O Memory, 位于内核空间)进行交互。 所谓 I/O 内存是通过各种接口(PCI、USB、蓝牙、以太网等)连接到主机(PC、手机)的硬件(网卡、声卡、摄像头等)在主机内存的映射。

      2.编写LED驱动

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

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

              第二步:指定设备号

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

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

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

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

              其中使用到的函数 device_destory、class_destory和unregister_chrdev_region方法

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

         4.控制LED

              通过字符串控制LED

              通过I/O命令控制LED

         5.LED驱动的模块参数

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

    module _param支持的参数类型包括byte、short、ushort (无符号short〕、int、uint (无符号int〕、 long、ulong (无符号long)、charp (字符指针)、boo和invbool (布尔的反。

    3.测试LED驱动

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

      2.可以使用NDK测试LED驱动

      3.可以使用Java测试驱动

    LED 驱动是本书第一个真正和硬件打交道的 Linux 驱动。虽然 LED 驱动并不复杂, 只是控制了4个 LED,但 LED 驱动已经包括了 Linux 驱动所有必要的部分。 一个完整的 Linux 驱动主要由内部处理和与硬件交互降部分组成。其中内部处理主要是指 Linux 驱动的装载、卸载、与设备文件相关的动作处理(读写设备文件、向设备文件发送 I/O 命令等动作)以及业务逻辑等。与硬件交互主要是指通过 iowrite32、 .ioread32 等函数与硬件中的寄存器进行数据交互。Linux 驱动在不同平台的移植也是处理这两部分。

    http://www.cnblogs.com/Mr-zsj/

  • 相关阅读:
    Ubuntu18.04, WPS表格生成中文大写数字的script
    Java实现的简单神经网络(基于Sigmoid激活函数)
    Naive Bayes Classifier 朴素贝叶斯分类器
    动态规划处理diff算法 Myers Diff (正向)
    动态规划处理01背包问题
    文本diff算法Patience Diff
    API返回错误信息的最佳实践
    CAP理论中, P(partition tolerance, 分区容错性)的合理解释
    mysql: SELECT ... FOR UPDATE 对SELECT语句的阻塞实验
    Probability&Statistics 概率论与数理统计(1)
  • 原文地址:https://www.cnblogs.com/Mr-zsj/p/5555414.html
Copyright © 2011-2022 走看看