zoukankan      html  css  js  c++  java
  • 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/

     

  • 相关阅读:
    动态获取Resources里面的图片列表
    在LINQ中实现多条件联合主键LEFT JOIN
    Failed to fetch URL http://dlssl.google.com/android/repository/repository.xml
    LINQ多条件OR模糊查询
    使用ILMerge将所有引用的DLL和exe文件打成一个exe文件
    安卓模拟器、电脑运行安卓系统android、apk文件
    C/C++中枚举类型(enum)
    指针详解
    Visaul Studio 2008 中配置DirectX9c的开发环境
    出自涅磐,缘自凤凰
  • 原文地址:https://www.cnblogs.com/xxyue/p/5559323.html
Copyright © 2011-2022 走看看