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/

  • 相关阅读:
    解决Thread 的关闭问题
    使用.NET实现断点续传
    如何将int类型数据转换成byte数组
    怎么样读取Excel表格中的数据(C#.Net)
    .NET平台下WEB应用程序的部署(安装数据库和自动配置)
    ASP.NET程序中常用的三十三种代码
    C#中的类型转换
    解决StreamReader读取中文出现乱码的问题
    C#下的Raw Socket编程实现网络封包监视
    利用键盘钩子在Windows平台下捕获键盘动作
  • 原文地址:https://www.cnblogs.com/Mr-zsj/p/5555414.html
Copyright © 2011-2022 走看看