android驱动开发8

PWM蜂鸣器驱动

C或C++语言中编译多个源代码文件时,如果a.c使用了b.c文件中的函数,需要a.c文件中使用 extern预先定义b.c中的函数,extern的作用就是告诉编译器该函数的函数名、参数个数、参数类型和返回值类型。这些信息对于将a.c编译成a.o已经足够了,等到将a.o和 b.o 链接成可执行文件或程序库时,编译器再到b.o中寻找函数的具体实现。也就是说,extern只在编译阶段起作用。除此之外,还可以使用b.h文件定义b.c中的函数,然后在a.c包含b.h文件。对于有些C/C++编译器,可以省略extern关键字。不过为了更通用,建议还是加上 extern。

如果编写的Linux驱动程序在逻辑上是正确的,那么可以正常装载和卸载,但在某些情况下, 可能某些程序会出现异常情况。这时Linux驱动可能会无法正常卸载。

对于部分异常情况的linux驱动强行卸载:

情况1:初始化函数崩溃

这种情况的关键是引用计数器的值和引用者不一致。实际上引用者是不存在的,因此,只需要将当前的Linux驱动模块的引用计数器清零即可。修改引用计数器可以使用下面两个函数。

static inline int try_module_get(struct module *module)

extern void module_put(struct module *module)

情况2:卸载函数被阻塞

这种情况的问题根源就是卸载函数,因此,只要将原来的卸载函数替换成一个空的卸载函数即可。

不管是哪种情况,都需要解决一个不可回避的问题,就是要获取表示要卸载的Linux驱动模

块module结构体指针。因为struct module表示了Linux驱动的相关信息。

cat /proc/kallsyms | grep _this_module | grep bad_driver1

时间: 2024-10-06 12:13:34

android驱动开发8的相关文章

【视频】嵌入式Linux/Android驱动开发揭秘(1)触摸屏驱动开发

嵌入式Linux/Android驱动开发揭秘(1)触摸屏驱动开发 专题简介:自1971年,美国人SamHurst发明了世界上第一个触摸传感器以来,触摸屏技术不断革新,给了程序设计师和UI工程师无限的想象空间,它极大改善了终端用户对各种设备的操作方便程度,现在我们的日常生活如手机.平板等,已经很大程度上依赖于和习惯于使用和操作触摸屏.做为工程师,我们很有必要掌握触摸屏的工作原理和软件驱动方法,如果您对一窥如何在嵌入式中操控和使用触摸屏这一司空见惯却又神奇的技术感兴趣,敬请关注! 1.LINUX驱动

Android驱动开发前的准备

最近看了一些Android驱动开发前需要知道的资料,收获很多,接下来就谈谈我自己的一些心得体会. Android在近几年时间发展迅速,已经成为智能手机操作系统的老大.不过,因为Android原生的代码支持的设备并不多,所以我们要想在自己的设备上完美地运行Android就需要另外地开发一些程序,从而可以让Android识别相应设备的硬件,这个过程就成为Android移植. Android移植可以分为两部分:应用移植和系统移植.其中,应用移植是指将Android系统架构的第四层应用程序移植到某一个特

Android驱动开发5-8章读书笔记

Android驱动开发读书笔记                                                              第五章 S5PV210是一款32位处理器,具有低功耗的的特点,可为移动设备和一般应用提高性能的微处理器解决方案.它集成了ARM CORTEX-A8核心.实现了ARM架构V7且支持外围设备.他的关键功能是“以带有NEON的cpu子系统为基础的arm”,32/32kb i/d缓存,512kb l2缓存,操作频率800hz为1.1v,1ghz为1.2

初入android驱动开发之字符设备(四-中断)

上一篇讲到android驱动开发中,应用是怎样去操作底层硬件的整个流程,实现了按键控制led的亮灭.当然,这是一个非常easy的实例,只是略微演变一下,就能够得到广泛的应用. 如开发扫描头,应用透过监听上报的按键的键值,监听到,则调用扫描头的模块.成功,则点亮LED灯,并把扫描头解码后的条码信息.通过广播的形式发出.又扯到其他地方,这里主要说说中断. 1. 中断的一些概念 中断,是什么? 中断.能够看成是cpu对特殊事件的一种处理的机制,这类特殊事件一般指紧急事件或者说异常事件.非常easy的一

Android安卓书籍推荐《Android驱动开发与移植实战详解》下载

百度云下载地址:点我 Android凭借其开源性.优异的用户体验和极为方便的开发方式,赢得了广大用户和开发者的青睐,目前已经发展成为市场占有率很高的智能手机操作系统. <Android驱动开发与移植实战详解>分为18章,依次讲解了Android系统的基本知识, Linux内核的基本知识,分析了Android系统的源码,深入分析HAL层的基本知识,GoldFish下的驱动.MSM内核和驱动.OMAP内核和驱动.显示系统驱动.输入系统驱动.振动器系统驱动.音频系统驱动和视频输出系统驱动,多媒体框架

Android驱动开发前的准备(一)

Android系统移植与驱动开发概述 1.1 Android 系统架构 1.2 Android系统移植的主要工作 1.3 查看linux内核版本 1.4 linux内核版本号的定义规则 1.5 linux驱动设备 1.1  Android系统架构如图所示: 第一层是linux内核,第二层是c/c++代码库,第三层是Android SDK API,第四层是应用程序. 1.2 Android系统移植的主要工作 Android移植可以分为两部分:应用移植和系统移植 1>应用移植:是将应用程序移植到某一

Android驱动开发前的准备(三)

Git使用入门 3.1安装Git 3.2查看Git文档 3.3源代码的提交与获取 3.1安装Git # apt-get install git # apt-get install git-doc git-svn git-email git-gui gitk 3.2查看Git文档 # man git-checkout 3.3源代码的提交与获取 3.3.1创建版本库: git init # mkdir -p /demo/helloworld-git # cd /demo/helloworld-git

Android驱动开发第七章

控制发光二极管 本章我们在Linux驱动开发中实践过所以也很熟悉.也做出过不同的实验结果.所以编写LED驱动: 1.测试开发板,打开电源开关 2.创建LED驱动设备文件 3.卸载LED驱动的设备文件 4.设置寄存器与初始化LED驱动 5.控制LED 6.设置LED驱动的模块参数 本章给出了LED驱动的完整代码可以借鉴 测试LED驱动,本章介绍了一些复杂的测试方法,不仅可以向LED设备文件发送字符串,还可以发送I/O控制命令. 1.编写测试I/O控制命令的通用程序 2.使用NDK测试LED驱动 3

android驱动开发前的准备(五)

搭建S3C6410开发板的测试环境 首先安装串口调试工具 第一步:检测当前系统是否支持USB转串口 # lsmod | grep usbserial 第二步:安装minicom # apt-get install minicom 第三步:配置 minicom # minnicom -a 第四步:测试minicom #minicom 烧写Android 系统 使用Eboot擦除NandFlash 第一步:准备工作 用串口线或USB转串口线连接开发板和pc,并启动minicom. 第二步:进入Ebo

Android驱动开发前的准备(二)

搭建android开发环境 2.1 Android底层开发需要哪些工具 2.2 安装 JDK 2.3 搭建Android 应用程序开发环境 2.4安装Android NDK开发环境 2.5安装交叉编译环境 2.1 Android底层开发需要哪些工具 ◇ JDK6或以上版本 ◇ Eclipse 3.4或以上版本 ◇ ADT ◇ CDT ◇ Android SDK◇ Android NDK ◇ 交叉编译环境 ◇ linux内核源代码 ◇ Android源代码 2.2 安装 JDK 从官网直接下载并进