《android深入探索》第六章心得

看了本书第六章,我学到了:

  1. linux系统下每个驱动都映射成一个文件(设备文件/驱动文件),都保存在/dev目录下。回掉函数的功能是使linux驱动能响应应用程序,使设备文件和应用程序交互的接口。
  1. 编写linux驱动程序(大体框架):

①   装载驱动:module_init()   卸载驱动:module_exit()

②   注册设备文件:misc_register()  注销设备文件:misc_deregister()

③   指定与驱动相关信息:MODULE_AUTHOR、MODULE_LICENSE(必需)、MODULE_ALIAS、MODULE_DESCRIPTION等宏。

④   指定回掉函数:通过事件触发各回掉函数:open/read/write/icntl/close等

⑤   编写Makefile文件:修改目标及路径及交叉编译工具

⑥   编译linux驱动程序:make

⑦   安装linux驱动:insmod/modprobe

卸载linux驱动:rmmod

  1. 编写统计单词个数的linux驱动程序(详细):

①   建立存放驱动程序的目录及编写驱动源码文件word_count.c,编写Makefile文件:

  • obj-m :=word_count.o

word_count=y “=process.o data.o

②   初始化和退出驱动:module_init(word_count_init)、module_exit(word_count_exit)

③   指定与驱动相关信息:查看驱动自身信息 #modinfo word_count

MODULE_AUTHOR、MODULE_LICENSE(必需)、MODULE_ALIAS、MODULE_DESCRIPTION等宏信息放在源代码最后。

④   指定回掉函数:word_count_read()、word_count_write()

由于内核空间程序不能直接访问用户空间数据,所以在两个函数中分别使用copy_to_user()、copy_from_user()实现内核与用户空间数据的交互。

⑤   编译驱动源码:#make –C (linux内核头文件目录) M=(驱动程序所在目录)

编译完成后生成linux驱动模块文件word_count.ko

⑥   安装linux驱动:#insmod word_count.ko

查看是否安装成功:# lsmod | grep word_count

卸载linux驱动:#rmmod word_count

查看linux驱动输出的日志信息:#dmesg | grep word_count | tail –n 2 或#cat /var/log/syslog | grep word_count | tail –n 2

  1. 测试linux驱动:

①   在虚拟机中测试:

编写一个测试程序(test.c),

#gcc test.c –o test

#./test

终端中查看测试结果

②   Android模拟器中测试:

进入安卓模拟器goldfish中配置linux内核,再#make menuconfig 进入设置界面将第二项选中,再回车进入子菜单选中前三项,保存退出。最后重新编译linux内核。

执行build.sh脚本完成对驱动的编译、上传、安装,再进入android模拟器终端使用“echo”、”dmesg“测试驱动并查看结果。

③   使用Android NDK测试:

启动模拟器,

#emulator –avd myavd –kernel /root/kernel/goldfish/arch/arm/boot/zImage

④   使用java代码直接操作设备文件测试。

⑤   使用S3C6410开发板测试:

重新编译test.c文件,将编译好的test源码上传给开发板,测试方法与android模拟器类似。

在Eclipse中重新编译android NDK程序即可在S2C6410开发板上运行。

在S3C6410开发板中使用java代码测试。

⑥   将驱动编译进linux内核测试

将源码(word_count.c)放到<linux内核目录中>/drivers/char目录

修改Kconfig>文件,在endmenu前添加:

config WORD_COUNT

bool “word_count driver“

help

This is a word count driver.It can get a word count from /dev/wordcount

修改Makefile文件,插入:obj - $(CONFIG_WORD_COUNT)                += word_count.o

用菜单项设置.config文件:#make menuconfig 选择“Device Drivers”-“Character devices”-“word_count_driver”

编译linux内核:进入/root/kernel/goldfish,执行#make (在之前要提前赋予访问设备的权限)

  1. 使用eclipse开发和测试linux驱动程序:

①   Eclipse开发:建立C工程——建立C源码文件链接——设置include路径——编译linux驱动

②   测试linux驱动:导入test.c文件——设置include路径——建立Target——Build工程——运行测试程序

时间: 2024-08-05 00:23:54

《android深入探索》第六章心得的相关文章

《Android深度探索》第六章心得体会

第六章讲述了一个简单的驱动程序:统计单词个数 本章的重点在于了解到linux将每一个驱动都映射到一个文件当中,保存在/dev中.目的在与使与linux驱动的交互变得简单.另外很重要的一点就是需要指定回调函数,回调函数可以处理设备文件交换的数据. 第一步.建立linux驱动骨架 目的是给linux程序创建一个基本结构.Linux驱动中一般使用moudle_inie和moudle_exit来宏指定.因为这是linux驱动中比较重要的两个函数.所以包含这两个函数的文件也可以看作是linux驱动的骨架

安卓移植和驱动开发第六章心得体会

第六章 第一个LINUX驱动程序:统计单词个数 统计单词数的word_count 驱动是本书实现的第一个完整的Linux 驱动.虽然word_count 驱动的功能并不复杂,但足以让以前从来接触过Linux 驱动的开发人员了解Linux 驱动的完整开发过程.本章不仅仅是介绍一个示例,还介绍了如何使用不同的方法测试Linux 驱动.这些方法主要以平台来区分.当然,要编写 Linux 驱动程序还需要更高级的功能. 如向打印机驱动写入数据时, 对于打印机 驱动来说,需要接收这些被写入的数据,并将它们通

第六章心得体会

第六章主要学习到了安卓底层开发的相关知识,这章主要介绍了第一个linux驱动程序:统计单词个数.Linux驱动的工作和访问方式是Linux的亮点之一. Linux系统将每一个驱动都映射成一个文件,这些文件称为设备文件或驱动文件,都保存在/dev目录中.这种 设计理念使得与Linux驱动进行交互就像与普通文件进行交互一样容易.当然,也比访问LinuxAPI 更容易. 由于大多数Linux驱动都有与其对应的设备文件, 因此与Linux驱动交换数据就变成了与 设备文件交换数据.例如,向Linux打印机

第六章 心得体会

通过第六章的学习,使自己对Linux驱动程序的理解更加深刻,通过一个简单的单词统计驱动程序,使自己学到了很多. 学到的知识: 一.编写Linux驱动程序的步骤 第1步:建立Linux驱动骨架 第2步:注册和注销设备文件 misc_register 创建设备文件 misc_deregister 移除设备文件 第3步:指定与驱动相关的信息 通过MODULE_AUTHOP.MODULE_LICENSE.MODULE_ALIAS.MODULE_DESCRIPTION等宏指定与驱动相关的信息. 第4步:指

Android深度探索-卷1第六章心得体会

这章主要介绍了第一个linux驱动程序:统计单词个数.Linux系统将每一个驱动都映射成一个文件,这些文件称为设备文件或驱动文件,都保存在/dev目录中.大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据就变成了与文件交换数据,也就是文件操作. 编写Linux驱动程序的步骤 第一步:建立Linux驱动骨架(装载和卸载Linux驱动) 第二步:注册和注销设备文件 第三步:指定于驱动相关的信息 第四步:指定回调函数 第五步:编写业务逻辑 第六步:编写Makefile文件 第七步

android驱动开发第六章心得笔记

这一章主要讲解了统计单词个数. 统计一个文件中某个字符串的个数,其实就能当成是在一块沙地里面找石头,有人看到石头以后,在上面做标记grep,然后记住做过多少个标记:有人看到石头以后,把它挖(tr),最后统计自己挖多少石头:有人看到石头以后,把它跳过去(awk),然后统计自己跳多少次. cat file hafsdha hahafsdfsdhaha haha 假如我想匹配的是‘haha’这个字符串 1.grep的-o选项 最开始的时候是用-c这个选项,不过-c只能统计一行的,如果一行里面有多个匹配

第六章心得

编写Linux驱动程序步骤如下: 一.建立Linux驱动框架(装载.卸载Linux驱动) Linux内核在使用驱动时首先要装载驱动,在装载过程中进行一些初始化动作(建立设备文件.分配内存等),在驱动程序中需提供相应函数来处理驱动初始化工作,该函数须使用module_init宏指定:Linux系统在退出是需卸载Linux驱动,卸载过程中进行一些退出工作(删除设备文件.释放内存等),在驱动程序中需提供相应函数来处理退出工作,该函数须使用module_exit宏指定.Linux驱动程序一般都要这两个宏

阅读《软件工程—理论方法与实践》第六章心得体会

面向对象技术是软件工程领域中的重要技术,不仅仅是一种程序设计方法,更是一种对真实世界的抽思维方式.面向对象的软件工程方法涉及到从面向对象分析.面向对象设计.面向对象编程.面向对象测试到面向对象软件维护的全过程.面向对象的基本概念包括对象.类.封装.继承.消息.关联.聚合.多态性.属性和服务是构成对象的两个基本要素.使用共同的建模语言进行软件建模在软件开发过程中很必要(①以一种容易理解的形式为后期使用信息提供了便利的方法,②便于交流).UML富有表达力,描述开发所需要的各种视图,以此为基础组建系统

《Android深度探索》(卷1)HAL与驱动开发 第六章心得体会

编写Linux驱动程序的步骤: 第1步:建立Linux驱动骨架(装载和卸载Linux驱动) 任何类型的程序都有一个基本的结构,例如,C语言需要有一个入口函数main.Linux驱动程序也不例外.Linux内核在使用驱动时首先需要装载驱 动. 在装载过程中需要进行一些初始化工作,例如,建立设备文件,分配内存地址空间等.当Linux系统退出时需要卸载Linux驱动,在卸载的过程中需要释放 由Linux驱动占用的资源,例如,删除设备文件.释放内存地址空间等.在Linux驱动程序中需要提供两个函数来分别