安卓深度探索(卷一)第七章
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓深度探索(卷一)第七章相关的知识,希望对你有一定的参考价值。
led驱动的实现原理尽管 Linux 驱动直接与硬件打交道,但并不是 Linux 驱动直接向硬件中的内存写数据 而是与本机的 ν0 内存( νO Memory ,位于内核空间〉进行交互。所谓 1/0 内存是通过各种接口( PC I 、USB 、蓝牙、以太网口 等〉连接到主机( PC 、手机〉的硬件〈网卡、声卡、摄像头等〉在主机内存中的映射。
编写LED驱动
第一步:使用 cdev_init 函数初始化cdev
第二步:指定设备号
- 直接在代码中指定(硬编码〉
- 动态分配
第三步:使用 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 内核的头文件〉,然后在新内核下重新编译即可。
以上是关于安卓深度探索(卷一)第七章的主要内容,如果未能解决你的问题,请参考以下文章