• 安卓深度探索(卷一)第七章


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

     

    编写LED驱动

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

     

    第二步:指定设备号

    1. 直接在代码中指定(硬编码〉
    2. 动态分配

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

    第四步:使用 clas at 宏创建 struct class

    第五步:使用 ev ce ::.. crea 函数创建设备文件

     

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

    使用 module param arra nam , type, nump, perm )宏可以为 Linux 驱动指定数组形式的模块参数,其中oam~ 表示参数名, type 表示数组 素的数据类型, OWUJ) 表示存储数组长度的变茧的指钟, nn 参数文件的访问权限。 下面为 LED 驱动增加 个数组类型的模块参数。

    LED 驱动有两种与设备文件交互的方式 直接写入字符串数据和 νo 控制命令.直接向设备文写入数据可以使用命令行方式来完成,也 以通过 write 函数来完成。但 I/0 控制命令只能通过iocll 函数发出。为了以后测试方便,本节编写了 个通用的发送 命令的程序.

    NDK 程序测试和可执行程序测试差不多。只不过 ND Library 可以被 Java 程序调用,而Android 系统中的可执行程序在非 root 状态下是无法直接被调用的。所以如果想在 Android 应用程序中测试 inux 最直接的方法就是使用 NDK.

    LED驱动移植

    如果需要将 LED 驱动安装到 Linux 3. x内核的系统上( Android 4.x 及以上版本的系统〉,首先要获取linux 3.x 内核的源代码〈至少是 inux 内核的头文件〉,然后在新内核下重新编译即可。如果需要将 LED 驱动安装到 Linux 3. 内核的系统上( Android 4.x 及以上版本的系统〉,首先要获取 linux 3.x 内核的源代码〈至少是 inux 内核的头文件〉,然后在新内核下重新编译即可。

  • 相关阅读:
    (Java实现) 有重复元素排列问题
    玩转Google开源C++单元测试框架Google Test系列(转载)
    C++11之后,对源代码增加了UTF8和UCS4的支持(Windows内部使用Unicode,因为nt内核用的是ucs2,那是89年,utf8到了92年才发明出来)
    当年写的俄罗斯方块(现在更喜欢研究别人的代码)
    Stack的三种含义(数据超过栈的大小,就发生stack overflow)
    64位平台C/C++开发注意事项(转载)
    Redis集群方案
    Hadoop处理大量小文件的问题和解决方法
    Lazy Scheduler
    Solr与MongoDB集成,实时增量索引
  • 原文地址:https://www.cnblogs.com/5pi0/p/5543862.html
Copyright © 2020-2023  润新知