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

  • 相关阅读:
    sql语句 之聚合函数
    UML类图几种关系的总结
    关于Object.defineProperty的get和set
    devDependencies和dependencies的区别
    函数声明和函数表达式的区别
    移动端滑屏滚动事件的问题(横向滑动阻止垂直页面滚动)
    使用Cordova和JQM在ios上需要注意的问题
    阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return fal的区别
    有关闭包的总结
    CSS命名规范——BEM思想(非常赞的规范)
  • 原文地址:https://www.cnblogs.com/sakura029/p/5560084.html
Copyright © 2011-2022 走看看