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/

时间: 2024-12-13 15:48:12

Android驱动开发读书笔记六的相关文章

Android驱动开发读书笔记五

第五章 本章介绍了S3C6410开发板的功能,开发板的不同主要是在烧录嵌入式系统的方式不同,以及如何在此开发板上安装Android. 1.安装串口调试工具minicom 首先需要一根USB转串口线,由于安装的是Ubuntu Linux所以需要按照以下步骤.配置和测试minicom (1).检测当前系统是否支持USB转串口 命令lsmod  | grep usbserial (2)安装minnicom apt-get install minicom (3)配置minicom minicom -s,

Android驱动开发读书笔记七

第七章 (一)创建设备文件 1.使用cdev_init函数初始化cdec 描述设备文件需要一个cdev结构体,代码如下: struct cdev{ struct kobject kobj; struct module *owener; const struct file_operations *ops; struct list_head list; dev_t dev; unsigned int count; } 大多数的成员变量不需要我们自己初始化,调用cdev-init函数即可. 2.指定设

驱动开发读书笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇

驱动开发读书笔记. 0.04  linux 2.6 platform device register 平台设备注册  1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentation/driver-model/platform.txt Device Enumeration 82 ~~~~~~~~~~~~~~~~~~ 83 As a rule, platform specific (and often board-specific) setup code will 84 reg

驱动开发读书笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统

驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflash或者nandflash:只好用另一块arm9(i.mx283a)来继续学习: 从开发教程上面可知,烧写uboot和Linux是通过各种批处理脚本和exe程序来执行的,称之为固件烧写,然而并没有需要我们选择uboot路径.Linux内核和文件系统的地方.这样的话是不是意味着只能烧写官方默认提供的文件

驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识

驱动开发读书笔记. 0.06  嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB video class 或USB video device class.是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,目前已成为USB org标准之一. UVC linux driver: UVC linux 驱动 需要在编译内核的时候选上 配置内核 Device

驱动开发读书笔记. 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.22Documentation/driver-model/platform.txt找到一篇译文:http://blog.csdn.net/yili_xie/article/details/5193609 Device Enumeration 82 ~~~~~~~~~~~~~~~~~~ 83 As a rule

Android深度探索(卷1)HAL与驱动开发--读书笔记(第二章)

搭建Android底层开发环境的步骤 l  安装JDK: 1.下载JDK,解压,打开profile设置PATH环境变量 2.#gedit  /etc/profile Export PATH= .:/developer/jdk6/bin:$PATH 3.#source /etc/profile # . /etc/profile 注:可通过echo $PATH查看环境变量的值 l  搭建Android应用程序开发环境 安装Android SDK 首先下载好SDK,然后将这个压缩包文件复制到Linux

Android深度探索(卷1)HAL与驱动开发--读书笔记(第六章)

Linux 驱动的工作方式:Linux系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中.对于驱动来说,需要接收这些被写入的数据,并将它们通进PC 的井口.USB 等端口发送给设备.要实现这一过程就需要Linux 驱动可以响应应用程序传递过来的数据.这就是Linux 驱动的事件,这就是回调( callback )函数. 编写Linux驱动程序的步骤: 1)         建立Linu x 驱动骨架(装载和卸载Linu x 驱动):.Linux 内核在使用驱

Android深度探索(卷1)HAL与驱动开发--读书笔记(第四章)

l  配置Android源代码下载环境步骤 创建一个用于存放下载脚本文件(repo)的目录 #mkdir ~/bin #PATH=~/bin/repo 下载repo脚本文件 #curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo >~bin/repo #chmod a+x~/bin/repo 创建用于存放Android源代码目录 #mkdir android_source #cd android_source 初始化 #repo