Android深度探索(卷1)HAL与驱动开发第六章总结

操作系统是通过各种驱动程序赖家与硬件设备的,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并且提供统一的操作方式。设备驱动程序是操作系统最基本的组成部分之一,在Linux内核源程序中也占有60%以上,因此熟悉驱动的编写很重要。

Linux系统将每一个驱动都映射成一个文件。这些文件称为设备文件或驱动文件,都存在/dev目录中。这样,在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作,从而大大方便了对设备的处理。

编写驱动程序的步骤:

(1)建立Linux的驱动骨架(装载和卸载Linux驱动)任何类型的程序都有一个基本结构,linux驱动程序也不例外。Linux内核在使用驱动时首先需要装载驱动。在装载过程中也需要进行一些初始化的工作。

(2)注册和注销设备文件

任何一个linux驱动都需要一个设备文件,否则应用程序将无法与驱动程序交互。

(3)指定与驱动相关的信息

驱动程序是自描述的。

(4)指定回调函数

一个驱动程序并不一定要指定所有的回调函数。

(5)编写业务逻辑

(6)编写Makefile文件

(7)编写Linux驱动程序

(8)安装和卸载Linux驱动

1.准备工作

建立存放Linux驱动程序的目录

建立驱动源代码文件

编写一个makefile文件

2. 编写linux驱动程序的骨架(初始化和退出驱动)

安装linux驱动

查看word_count是否成功安装

卸载linux驱动

查看由驱动输出的日志信息

3. 指定与驱动相关的信息

模块作者,模块描述,模块别称,开源协议

4. 注册和注销设备文件

5.指定回调函数

6.实现统计单词数的算法

7.编译、安装、卸载linux驱动程序

测试linux驱动

使用ubuntu linux测试

在android模拟器上通过原声(native)C程序测试

使用android NDK测试

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

使用S3C6410开发板测试

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

使用eclipse开发和测试linux驱动

1.建立c工程

2.建立c源代码文件连接

3.设置include路径

4.编译linux驱动

在eclipse中测试linux驱动

1.导入test_word_count.c文件

2.设置include路径

3.建立targe

4.build工程

5.运行测试程序

需要注意的是,用户空间与内核空间完成同样或类似的功能的函数,宏等资源的名称并不一定相同,有的名称类似如:malloc和kmalloc ,有的不同如:atoi和simple_strol 等 
http://home.cnblogs.com/u/zivjeli/

转载于:https://www.cnblogs.com/qian950609/p/5574017.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

es mysql 同步插件_[es和数据库怎么同步]mysql与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)...

目前mysql与elasticsearch常用的同步机制大多是基于插件实现的,常用的插件包括:elasticsearch-jdbc,elasticsearch-river-MySQL,go-mysql-elasticsearch,logstash-input-jdbc。本文对四种插件的优缺点进行了图表对比。|序号|插件名称|地址|——:————…

linux上怎么快速删除一个目录?

使用rm -rf命令转载于:https://www.cnblogs.com/dyh-air/p/7726611.html

关于是否在C#中加入不可空引用类型的争论

来自微软的Mads Togersen在近期所提出的一条提议,即在C#语言中加入对不可空引用类型的支持在.NET社区中引起了热烈的争论。人们对此提议的反应大相径庭,既有人对此表示赞赏,也不乏倾向于保持现状的意见。\\在Reddit上,这条提议引起…

Andorid之提示java.lang.RuntimeException: Unable to start service net.gotev.uploadservice.UploadService@

1 问题 用android-upload-service上传一个文件提示错误如下 04-15 17:46:33.245 24932 24932 E AndroidRuntime: Process: com.appsinnova.android.keepshare, PID: 24932 04-15 17:46:33.245 24932 24932 E AndroidRuntime: java.lang.RuntimeException: Unable to start se…

使用 VS Code + Markdown 编写 PDF 文档

1背景介绍 作为一个技术人员,基本都需要编写技术相关文档,而且大部分技术人员都应该掌握 Markdown 这个技能,使用 Markdown 来编写并生成 PDF 文档将会是一个不错的体验,以下就介绍下如何使用 VS Code Markdown 来编写 PDF…

《看聊天记录都学不会C语言?太菜了吧》(6)编程很难吗?差一点就学不会了呢!

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证。 本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖…

【ArcGIS风暴】气象台站气温(降水)矢量数据插值成栅格气温(降水)空间数据

关于文本格式的气象数据生成Shapefile矢量数据的过程,可以参照文章《ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层》。本文在前面生成的具有气温和降水属性的气象台站矢量数据的基础上,通过栅格插值,栅格裁剪等过程生成空间分布的气温和…

时间差几天 php,计算和当前时间差多少天

我们有时在做网站时会碰到比较特别的需求,一条信息显示是几天和几天后的或者一个月前的,上次做一个APP时就碰到了这周情况,留下当时用的代码以便以后用时不需要东奔西走。PHP代码:function calcTime($time){$now time(); //当前时…

Android studio之导入新库提示Add library ‘Gradle*****@aar‘ to classpath

1 问题 as导入第三方库在依赖的基类build.gradle里面添加如下 implementation com.truizlop.sectionedrecyclerview:library:1.2.0 提示错误如下 2 原因 implementation 单层引用,只引用当前aar包层, api 多层引用,引用当前aar包层&#…

Windows 查看端口占用

查看 Windows 端口占用情况 在 Windows 命令行窗口下执行一下命令 查看所有端口占用情况netstat -ano 查看特定端口的占用情况netstat -aon|findstr "8080" 查看PID对应的进程tasklist|findstr "2212" 实例 博主碰到的是8080端口被占用了,如下图…

Android quot;QR二维码扫描quot;

支持灯 扫描结果 支持 抄、分享、浏览打开(超链接) 自己主动保存扫描记录 划删除 和源代码 git: http://git.oschina.net/892642257/QRCode csdn(0分): http://download.csdn.net/detail/onlyonecoder/7713589 版权声明:本文博主原创文章。博…

ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationInstance和ImplementationFactory属性均为Null,那么ServiceProvider最终会利用其ImplementationT…

C# WPF布局控件LayoutControl介绍

Dev学习地址文档地址 :https://docs.devexpress.com/wpf:https://docs.devexpress.com/WPF/7875/wpf-controlswinform:https://docs.devexpress.com/WindowsForms/7874/winforms-controlsasp.NET: https://docs.devexpress.com/AspNet/7873/a…

《看聊天记录都学不会C语言?太菜了吧》(7)下一篇文章告诉你牛郎是谁

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证。 本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖…

【遥感物候】30年物候始期空间分布特征(平均值)和变化趋势分析(Slope 一元线性回归分析)

问题分析:本文的数据为经过预处理和计算得到的30年(1983-2012年)物候参数始期遥感数据,共计30期影像,现在需要逐像元计算整个物候始期的空间分布特征(平均值)和变化趋势分析(Slope 一元线性回归分析)。最终的效果(左图为分布特征,右图为变化趋势): 一、方法原理 …

Android之CheckBox进行代码设置setChecked(true)会触发setOnCheckedChangeListener事件

1 问题 我们对CheckBox设置了setOnCheckedChangeListener监听,代码里面对CheckBox单独代码进行设置勾选(setChecked(true))的时候,会触发OnCheckedChangeListener事件 2 解决办法 用buttonView.isPressed()解决,这样就只有手动点击CheckBox…

密码技术

要理解SSL就必须理解密码系统、消息摘要函数(单向或散列函数)和数字签名,这些技术是许多文献所讨论的主题(比如[AC96),提供了保密性、完整性和认证的基础。 密码系统 假设Alice想给她的银行发一个消息以划转资金,并希望这个消息是保密的&…

deb php7 fileinfo,linux安装php7.2扩展fileinfo

最简便的方法是使用pecl安装php的扩展,方便快捷,这里使用的是源码编译安装php扩展项目 中上传图片遇到的问题:明显是fileinfo不被支持,没有安装fileinfo。接下来开始安装因为我的linux服务器里比较干净,所以之前的php源…

Android之提示java.lang.RuntimeException: Parcel: unable to marshal value Image问题

1 问题 使用Intent携带数据(putExtra)跳转activity,提示如下错误 04-18 22:42:49.664 16194 16194 E AndroidRuntime: Process: com.appsinnova.android.keepshare, PID: 16194 04-18 22:42:49.664 16194 16194 E AndroidRuntime: java.lang.RuntimeException: Parcel: unabl…

使用keepalived实现双机热备

2019独角兽企业重金招聘Python工程师标准>>> 通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。下面来以kee…