开发可统计单词个数的Android驱动程序(上)

Android本质上是基于Linux内核的系统,也就是说Android就是一种Linux操作系统。只不过大多数时候都会运行在ARM架构的设备上,例如,Android手机、平板等。Android驱动实际上就是Linux驱动,只是这里使用Android深度探索(卷1):安装C/C++交叉编译环境 介绍的交叉编译器将Linux驱动编译成了ARM架构的,所以驱动可以安装在Android模拟器、Android手机(需要root)或平板上(这些设备 都要使用给予ARM架构的CPU),当然,使用传统的GCC也可以编译成X86架构的驱动(并不需要修改代码),这样也可以在Ubuntu  Linux上安装Linux驱动。

 本文及后面几篇文章主要介绍如何利用Android模拟器和S3C6410开发板开发给予ARM架构的Linux驱动,当然,测试的环境是 Android,而不是我们通常使用的Ubuntu  Linux等X86架构的系统。最后会介绍通过多种方式测试这个驱动,测试方法包括命令行、NDK、Android程序(Java代码)等,当然,在最最 后还会介绍如果将驱动嵌入到LInux内核中,这样Android在启动是就自动拥有了这个驱动。

想学习Android底层开发的童鞋可以通过本文完全掌握开发基于Android的LInux驱动的完整步骤。在《Android深度探索(卷1):HAL与驱动开发》随书光盘上有完整的实验环境(VMWare Ubuntu Linux12.04LTS),如果嫌自己配置麻烦,可以从光盘中复制该虚拟环境,虚拟文件太大(3.6G),传不上去,只能发文章了!

一、Linux驱动到底是个什么东西

对于从未接触过驱动开发的程序员可能会感觉Linux驱动很神秘。感觉开发起来会很复杂。其实这完全是误解。实际上Linux驱动和普通的LinuxAPI没有本质的区别。只是使用Linux驱动的方式与使用Linux API的方式不同而已。

在学习Linux驱动之前我们先来介绍一下Linux驱动的工作方式。如果读者以前接触过Windows或其他非Unix体系的操作系统,最好将它们的工作方式暂时忘掉,因为这些记忆会干扰我们理解Linux底层的一些细节。

 Linux驱动的工作和访问方式是Linux的亮点之一,同时受到了业界的广泛好评。Linux系统将每一个驱动都映射成一个文件。这些文件称为设备文件 或驱动文件,都保存在/dev目录中。这种设计理念使得与Linux驱动进行交互就像与普通文件进行交互一样容易。当然,也比访问LinuxAPI更容 易。由于大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据就变成了与设备文件交换数据。例如,向Linux打印机驱动发送一个 打印命令,可以直接使用C语言函数open打开设备文件,再使用C语言函数ioctl向该驱动的设备文件发送打印命令。

当然,要编写Linux驱动程序还需要更高级的功能。如向打印机驱动写入数据时,对于打印机驱动来说,需要接收这些被写入的数据,并将它们通过PC的并 口、USB等端口发送给打印机。要实现这一过程就需要Linux驱动可以响应应用程序传递过来的数据。这就是Linux驱动的事件,虽然在C语言里没有事 件的概念,但却有与事件类似的概念,这就是回调(callback)函数。因此,编写Linux驱动最重要的一步就是编写回调函数,否则与设备文件交互的 数据将无法得到处理。图6-1是应用软件、设备文件、驱动程序、硬件之间的关系。

时间: 2024-09-12 22:54:46

开发可统计单词个数的Android驱动程序(上)的相关文章

开发可统计单词个数的Android驱动程序(中)

五.指定与驱动相关的信息 虽然指定这些信息不是必须的,但一个完整的Linux驱动程序都会指定这些与驱动相关的信息.一般需要为Linux驱动程序指定如下信息. 1. 模块作者:使用MODULE_AUTHOR宏指定. 2. 模块描述:使用MODULE_DESCRIPTION宏指定. 3. 模块别名:使用MODULE_ALIAS宏指定. 4. 开源协议:使用MODULE_LICENSE宏指定. 除了这些信息外,Linux驱动模块自己还会包含一些信息.读者可以执行下面的命令查看word_count.ko

开发可统计单词个数的Android驱动程序(3)

开发可统计单词个数的Android驱动程序(1) 五.指定与驱动相关的信息 虽然指定这些信息不是必须的,但一个完整的Linux驱动程序都会指定这些与驱动相关的信息.一般需要为Linux驱动程序指定如下信息. 1. 模块作者:使用MODULE_AUTHOR宏指定. 2. 模块描述:使用MODULE_DESCRIPTION宏指定. 3. 模块别名:使用MODULE_ALIAS宏指定. 4. 开源协议:使用MODULE_LICENSE宏指定. 除了这些信息外,Linux驱动模块自己还会包含一些信息.读

开发可统计单词个数的Android驱动程序(下)

八. 指定回调函数 本节讲的内容十分关键.不管Linux驱动程序的功能多么复杂还是多么"酷",都必须允许用户空间的应用程序与内核空间的驱动程序进行交互才有意义.而最 常用的交互方式就是读写设备文件.通过file_operations.read和file_operations.write成员变量可以分别指定读写 设备文件要调用的回调函数指针. 在本节将为word_count.c添加两个函数:word_count_read和word_count_write.这两个函数分别处理从设备文件读

《Android深度探索(卷1):HAL与驱动开发》——6.3节第一个Linux驱动:统计单词个数

6.3 第一个Linux驱动:统计单词个数Android深度探索(卷1):HAL与驱动开发源程序目录:<光盘根目录>/sources/word_count本节将给出我们的第1个Linux驱动的例子.这个驱动程序并没有访问硬件,而是利用设备文件作为介质与应用程序进行交互.应用程序通过向设备文件传递一个由空格分隔的字符串(每一个被空格隔开的子字符串称为一个单词),然后从设备文件读出来的是该字符串包含的单词数.本例的驱动程序使用C语言实现,源代码文件路径如下. 6.3.1 编写Linux驱动程序前的

Linux驱动程序:统计单词个数

本例为Android升读探索(卷1):HAL与驱动开发 一书中附带的示例程序.现粘贴出来,以便查阅. 终端操作,可能用到的命令: insmond word_count.ko lsmod | grep word_count 查看驱动是否安装成功 rmmod word_count dmesg | grep word_cout | tail -n 2 查看有linux驱动输出的日志信息 cat /var/log/syslong | grep word_count | tail -n 2 modinfo

C语言编程中统计输入的行数以及单词个数的方法_C 语言

统计输入的行数 标准库保证输入文本流以行序列的形式出现,每一行均以换行符结束.因此,统计行数等价于统计换行符的个数. #include <stdio.h> /* count lines in input */ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } 在该程序中,while 循环语句的循环体是一个 if 语句,它控

Python实现统计单词出现的个数

  这篇文章主要介绍了Python实现统计单词出现的个数,本文给出了实现代码以及使用方法,需要的朋友可以参考下 最近在看python脚本语言,脚本语言是一种解释性的语言,不需要编译,可以直接用,由解释器来负责解释.python语言很强大,而且写起来很简洁.下面的一个例子就是用python统计单词出现的个数. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import sys import string #import collectio

AMD开发针对AMD硬件产品的Android驱动程序

在对Google Android系统平台观察良久之后,AMD终于正式启程,并且已经开始招募工程师,开发针对AMD硬件产品的Android驱动程序.AMD在其官方网站上连续张贴了两份招聘启事,都属于软件工程方面,其一是寻求"Linux驱动程序开发工程师",加入其Linux基础图形团队,主要工作是为Android平台开发驱动程序堆栈,并且要符合Android生态系统的开发趋势,尤其需要应聘者具备在Android网络浏览器或者视频播放器软件中的视频解码加速开发经验,再有webm和/或Open

安卓(Android)开发之统计App启动时间_Android

前言 作为 Android 开发者,想必多多少少要接触启动速度优化相关的事情,当用户越来越多,产品的功能也随着迭代越来越多,App 逐渐变得臃肿是一件很常见的现象,甚至可以说是不可避免的现象,随之而来的工作就是优化 App 性能,其中最主要的一项就是启动速度优化.但本文的主角并不是启动速度优化,而是启动时间统计. 一.启动类型 工欲善其事,必先利其器.想要优化 App 的启动速度,必须有准确衡量启动时间的方法,否则优化完之后效果怎样,自己都不知道,说出去别人也不信服不是.在做 App 启动时间统