zoukankan      html  css  js  c++  java
  • LED将为我闪烁:控制发光二极管

      一个完整的linux驱动主要由内部处理和与硬件交互两部分组成。其中内部处理主要是指linux驱动的装载、卸载、与设备文件相关的动作处理以及业务逻辑等;与硬件交互主要是指通过iowrite32、ioread32等函数与硬件中的寄存器进行数据交互。

      我们想要实现控制led,就应该先了解它的实验原理。Linux驱动并不是直接向硬件中的内存写数据,而是与本机的I/O内存进行交互。Linux内核提供了多个与I/O内存交互的函数,每一个连接Linux的硬件在I/O内存中都会有映射首地址,开发板上的LED也有其映射首地址。

      接下来是开始编写LED驱动:

        1.测试开发板,打开电源开关

        2.创建LED驱动设备文件:由于misc_register函数只能建立主设备号为10的设备文件,如果想建立其他主设备号的设备文件,就需要使用cdev_init、register_chrdev_region、cdev_add等函数:初始化cdev。cdev的大多数成员变量并不需我们自己去初始化,只要调用cdev_init函数即可;指定设备号;使用cdev_add函数将字符设备添加到内核中的字符设备数组中;使用class_create宏创建struct class;使用device_create函数创建设备文件.

        3.卸载led驱动的设备文件:依次调用device_destroy、class_destroy和unregister_chrdev_region方法。

        4.设置寄存器与初始化led驱动。

        5.控制led:字符串控制led,使用file_operations.write函数;I/O命令控制led,使用file_operations.ioctl函数。

        6.设置led驱动的模块参数

        7.测试led驱动:编写测试I/O控制命令的通用程序、使用NDK测试LED驱动、使用Java测试LED驱动

      此外还有LED驱动的移植,最简单的移植是将其在不同Linux内核版本下进行编译,移植驱动时要注意再修改驱动的源代码时,尽量不修改驱动的接口。

    虽然LED驱动并不复杂,我们还是要注意在不同Linux内核版本和不太硬件平台驱动移植的不同,有助于我们深入理解Linux技术。

                                                                                                                                      09:14:39

                                                                                                                                     2016-06-05

  • 相关阅读:
    (转)要在自己感兴趣的领域成为专家,要经过一万小时训练
    (学习日记)数据结构第一章中life游戏开发的学习记录
    (转)响应式Web设计是大势所趋还是时代的产物
    (学习日记)裘宗燕:C/C++ 语言中的表达式求值
    (转)如果你喜欢编程 给想做程序员的人的7个建议
    NHibernate 中删除数据的几种方法
    如何避免在安装SQL SERVER 2008时,出现Rule “Previous releases of Microsoft Visual Studio 2008″ failed.
    【转】A brief overview of Ncqrs
    爱博图微博图片批量下载小工具
    解释用Q号算出你的年龄的“奥妙”。。。
  • 原文地址:https://www.cnblogs.com/sakura029/p/5560084.html
Copyright © 2011-2022 走看看