Android驱动开发读书笔记六
第六章
Linux 驱动的工作和访问方式是 Linux 的亮点之一,Linux 系统将每一个驱动都映射成一个文件。这些文件称为设备文件或驱动文件,都保存在/dev目录中,由于大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据就变成了与设备文件交换数据。介绍到如何在多种平台,使用多种方式测试Linux驱动。给出的实例是统计单词的个数,但是关键还在实现该算法的技术是Linux
驱动。
(一)、编写Linux驱动程序的步骤
1.建立Linux驱动骨架(装载和卸载Linux驱动)
在 Linux 驱动程序中需要提供两个函数来分别处理驱动初始化和退出的工作。这两个函数分别用module_init和module_exit宏指定
2.注册和注销设备文件
删除设备文件一般在第1步编写的处理Linux退出工作的函数中完成。可以分别使用misc_register和misc_deregister函数创建和移除设备文件。
3.指定与驱动相关的信息
可以通过modinfo命令获取驱动程序的作者姓名、使用的开源协议、别名、驱动描述等信息
4.指定回调函数
一个驱动程序并不一定要指定所有的回调函数。回调函数会通过相关机制进行注册。
5.编写业务逻辑
业务逻辑可能由多个函数、多个文件甚至是多个Linux驱动模块组成
6.编写Makefile文件
编写一个新的Linux驱动程序必须要有一个Makefile文件。
7.编译Linux驱动程序
Linux驱动程序可以直接编译进内核,也可以作为模块单独编译
8.安装和卸载Linux驱动
如果将Linux驱动编译进内核,只要Linux使用该内核,驱动程序就会自动装载。如果Linux驱动程序以模块单独存在,需要使用insmod或modprobe命令装载Linux驱动模块,使用rmmod命令卸载Linux驱动模块
9.上面8步中的前5步是关于如何编写Linux驱动程序的,通过后3步可以使Linux驱动正常工作
(二)、第一个Linux驱动:统计单词个数
Java部分(WordCountNDKTestMain.java)的完整代码:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class WordCountNDKTestMain extends Activity
{
private TextView tvWordCount;
private EditText etString;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvWordCount = (TextView) findViewById(R.id.textview_wordcount);
etString = (EditText) findViewById(R.id.edittext_str...
(三)、将驱动编译进Linux内核进行测试
动态装载驱动模块不会随着Android系统的启动而自动装载,因此Android系统每次启动都必须使用insmod或modprobe命令装载Linux驱动模块。可以使用如下的步骤将word_count驱动加入Linux内核源代码树。
1.将word_count.c文件放入Linux内核源代码
将word_count.c文件放到<Linux内核目录>/drivers/char目录中
2.修改Kconfig文件
打开/root/kernel/goldfish/drivers/char/Kconfig文件,找到endmenu,并在endmenu前面添加如下代码:
config WORD_COUNT
bool "word_count driver"
Help
3.修改Makefile文件
打开/root/kernel/goldfish/drivers/char/Makefile文件。
4.设置.config文件
.config文件可以通过手工配置,也可以通过make menuconfig命令在菜单中配置。
5.编译Linux内核
进入/root/kernel/goldfish目录,执行下面的命令编译Linux内核。
# make
6.建立新的Kconfig文件
在word_count目录中建立一个Kconfig文件,并输入如下内容:
config WORD_COUNT
tristate "word_count driver"
default y
help
This is a word count driver. It can get a word count from /dev/wordcount
(四)、在Eclipse中开发Linux驱动程序
1.建立C工程
在Eclipse 中单击“File”>“New”>“Other”菜单项,打开“New”对话框,选择“C Project”项(选“C++ Project”项也可)
2.建立C源代码文件链接
单击word_count_eclipse 工程右键菜单中的“New”>“Soruce Folder”菜单项目,打开“New Soruce Folder”对话框,在“Folder name”文本框中输入“src”
3.设置include路径
单击word_count_eclipse工程右键菜单的“Properties”菜单项(或选中word_count_eclipse,按Alt+Enter 键)打开工程属性对话框。选中“C/C++ General”>“Paths and Symbols”项,选中右侧“Includes”页的“GNU C”项,单击右侧的“Add”按钮添加如下两个路径,/root/kernel/goldfish/include
/root/kernel/goldfish/arch/arm/include
4.编译Linux驱动
为工程添加一个Program,并且去掉系统原先的两个建立项前的复选框。其中Argument直接填写脚本文件的路径即可
http://www.cnblogs.com/xxyue/
Android驱动开发读书笔记六的更多相关文章
- Android驱动开发读书笔记五
第五章 本章介绍了S3C6410开发板的功能,开发板的不同主要是在烧录嵌入式系统的方式不同,以及如何在此开发板上安装Android. 1.安装串口调试工具minicom 首先需要一根USB转串口线,由 ...
- Android驱动开发读书笔记七
第七章 (一)创建设备文件 1.使用cdev_init函数初始化cdec 描述设备文件需要一个cdev结构体,代码如下: struct cdev{ struct kobject kobj; struc ...
- Android驱动开发5-8章读书笔记
Android驱动开发读书笔记 第五章 S5PV210是一款32位处理器,具有 ...
- 驱动开发学习笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇
驱动开发读书笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentatio ...
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...
- 驱动开发学习笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇
驱动开发读书笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇 下面这段摘自 linux源码里面的文档 : 内核版本2.6.22Doc ...
- 驱动开发学习笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统
驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflas ...
- 驱动开发学习笔记. 0.01 配置arm-linux-gcc 交叉编译器
驱动开发读书笔记. 0.01 配置arm-linux-gcc 交叉编译器 什么是gcc: 就像windows上的VS 工具,用来编译代码,具体请自己搜索相关资料 怎么用PC机的gcc 和 arm-li ...
- 《Android系统开发》笔记
<Android系统开发>笔记1:Android系统概述 Android四层架构: 1. Linux Kernel&driver层 a.依赖于Linux 2.6内核,包含安全性.内 ...
随机推荐
- jmeter读取本地CSV文件
用jmeter录制考试上传成绩等脚本时,出现的问题及解决方法如下: 1.beanshell前置处理器,不能读取本地csv文件里的数据: 方法一: 在beanshell里不能直接从本地的csv文件里读取 ...
- js怎样实现继承
js实现继承的5种方式 js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对 ...
- 查询时根据权限更改sql
import java.lang.reflect.Method; import org.apache.log4j.Logger; import org.springframework.aop.Meth ...
- Java中的==和equals区别
概述: A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同:当用于引用类型的时候,是比较对象是否相同. B.对于String a = “a”; Integer b = 1;这种类型 ...
- orcale函数
字符函数 1.ASCII 返回与指定的字符对应的十进制数; select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space ...
- Spring Cloud config中,使用数据库存储配置信息
主要内容 在springcloud config中,使用数据库存储配置信息. 系统默认采用git的方式,此处我们介绍使用jdbc的方式存储配置信息 准备数据库 数据库我们使用mysql. 新建库 p- ...
- 解决Django Rest Framework中的跨域问题
方案一: 全局配置 自定义中间件 # my_md.py class MiddlewareMixin(object): def __init__(self, get_response=None): se ...
- 【转】【C++】【MFC】关于RADIO BUTTON的使用方法
*原文地址:http://blog.csdn.net/c_cyoxi/article/details/23868979 1. 环境:VS2010 2. 分组 将radio1.radio2.radio3 ...
- PHP代码规范的一些总结
世界第一语言在手,辅以前人的最佳实践,天下又算什么. 1.代码是写给小白用的 注释,注释,注释,重要的事情说三遍.我们做的虽然不是拿去卖源码的商业产品,不需要把注释写的多么优美.但也不要太过吝啬,到头 ...
- Element-ui多选下拉实现全部与其他互斥
1.以事件类型为例,给下拉绑定选项改变的change事件 2.当已选项个数大于1(即先选了其他,再选不限)且最后选的是不限时,取消其他选项选中状态: 当已选项个数等于2(即先选了不限,再选其他)且第一 ...