驱动程序开发笔记_驱动程序开发笔记怎么写

       大家好,很高兴有机会和大家一起探讨驱动程序开发笔记的问题。我将用专业的态度回答每个问题,同时分享一些具体案例和实践经验,希望这能对大家有所启发。

1.深入浅出windows驱动开发的目录

2.驱动程序的开发同应用程序的开发相比要注意什么

3.如何正确入门Windows系统驱动开发领域

4.linux驱动开发要有哪些基础

5.做linux下的驱动开发,需要掌握哪些技能和知识点?有没具体的要求列一下.谢谢各位

6.驱动开发的步骤有哪些

驱动程序开发笔记_驱动程序开发笔记怎么写

深入浅出windows驱动开发的目录

       向内核世界说一声:hello,我来了。如果你是一个初学者,并对这个世界充满好奇心,请从这一章开始,我们一起打招呼~

       第1章 Hello World驱动 1

       1.1 从Hello World开始 2

       1.1.1 HelloDRIVER 4

       1.1.2 代码解释 8

       1.1.3 驱动程序的编译和安装 11

       1.1.4 查看我们的驱动 14

       1.2 虚拟环境 15

       1.2.1 使用虚拟环境进行驱动开发 15

       1.2.2 使用VMware虚拟机 15

       1.2.3 目标机设置 16

       1.2.4 Virtual PC虚拟机 18

       1.3 小结 19

       如何在规范的商业环境中,开发成功而有效的驱动软件?驱网站长马勇(ZnSoft)将向你娓娓道来。你会学到这些内容:建立一个简单而有效的开发、调试环境;64位环境下的内核编程技巧;如何发布你的驱动软件。

       第2章 商业驱动开发技术 20

       2.1 建立开发调试环境 21

       2.1.1 SVN环境 21

       2.1.2 创建工程,导入SVN 23

       2.1.3 建立符号服务器 25

       2.1.4 用符号调试 27

       2.2 64位驱动开发技术 34

       2.2.1 64位驱动编写技术 35

       2.2.2 32位应用程序与64位驱动混合模式 36

       2.3 驱动程序的发布与测试 42

       2.3.1 驱动程序签名 42

       2.3.2 驱动程序测试 46

       2.3.3 WHQL 49

       2.4 小结 50

       WDF是目前最新的驱动编程框架。当很多内核程序员还紧抱WDM的巨大佛脚时,千万要记住,WDF已是大势所趋。本章介绍了WDF最重要的几个概念,并进行了一定程度的深度挖掘。对于WDF框架的三大核心模型:对象模型、事件模型、PNP/Power模型,本章作了重点讲述。

       第3章 WDF概述 51

       3.1 主要特点 52

       3.2 框架视图 53

       3.3 兼容性 55

       3.4 对象模型 56

       3.4.1 对象和句柄 59

       3.4.2 引用计数 60

       3.4.3 上下文空间 61

       3.4.4 PME接口 67

       3.4.5 DDI接口 69

       3.4.6 父子关系 76

       3.4.7 对象同步 77

       3.5 驱动对象和设备对象 78

       3.5.1 驱动对象 78

       3.5.2 驱动入口DriverEntry 81

       3.5.3 设备对象 84

       3.5.4 创建设备对象 85

       3.5.5 设备栈 86

       3.6 IO模型 88

       3.6.1 IO目标对象 88

       3.6.2 IO目标对象的细节 90

       3.6.3 安全的缓冲区 93

       3.6.4 内存对象(一) 96

       3.6.5 内存对象(二) 98

       3.6.6 框架和IO请求 102

       3.6.7 更详细的处理流程 103

       3.6.8 IO请求参数 105

       3.6.9 队列 107

       3.6.10 创建IO请求 110

       3.7 PNP和电源模型 112

       3.8 小结 115

       使用WDF框架开发USB驱动,方便且简单。本章首先总体上从硬件和软件两个方面介绍USB相关知识点,包括设备的电气特性、总线结构、USB驱动类型以及类驱动。编程方面,从USB设备初始化、数据操作以及设备控制等几个方面来讲解,透彻并且翔实。

       第4章 WDF USB设备驱动开发 116

       4.1 USB设备硬件结构 117

       4.1.1 主从结构 117

       4.1.2 硬件拓扑 118

       4.1.3 USB中断 119

       4.2 USB软件结构 120

       4.2.1 总线驱动 120

       4.2.2 系统类驱动 121

       4.2.3 功能驱动 122

       4.2.4 父驱动与混合设备 122

       4.2.5 过滤驱动 125

       4.2.6 USB驱动栈、设备栈 125

       4.3 内核开发 127

       4.3.1 设备驱动 127

       4.3.2 入口函数 128

       4.3.3 USB描述符 129

       4.3.4 描述符介绍 130

       4.3.5 汇总举例 133

       4.3.6 读取描述符 135

       4.3.7 初始化 137

       4.3.8 设备初始化函数 138

       4.3.9 创建设备对象 141

       4.3.10 设备命名、符号链接 143

       4.3.11 启动设备 147

       4.3.12 创建队列 156

       4.3.13 停止设备/反初始化 158

       4.4 数据I/O操作 160

       4.4.1 USB控制命令 160

       4.4.2 构造并发送控制命令 162

       4.4.3 读USB中断端口 163

       4.4.4 连续读操作 165

       4.4.5 数据处理函数 166

       4.4.6 中断端口的效率 167

       4.4.7 读/写批量端口 168

       4.5 设备控制 171

       4.5.1 关于I/O Target对象 171

       4.5.2 获取USB版本 172

       4.5.3 管道重置 174

       4.5.4 设备重置 176

       4.5.5 管道中止与终止 177

       4.6 用户程序 179

       4.6.1 内核读/写 179

       4.6.2 控制命令 179

       4.7 小结 180

       1394俗称火线。大伙平时最多接触它的地方大概是内核调试时,借助1394卡进行双机互联。本章首先从硬件方面介绍了1394的知识,它的总线结构很特别,极具可扩性,能非常方便地在各种类型的1394设备之间建立数据链路。内核编程方面,本章重点讲解了数据通信相关知识,分为异步通信和同步通信两种方式,颇为复杂,相对难于掌握,但套路是现成的,变化的东西不多,可以熟能生巧。本章最后介绍了1394双机互联的原理,有兴趣的读者可参考之。

       第5章 WDF 1394驱动开发 181

       5.1 1394一席谈 182

       5.1.1 版本情况 183

       5.1.2 电源特性 183

       5.1.3 1394卡 183

       5.1.4 总线拓扑 184

       5.2 发送请求 186

       5.2.1 同步方式 187

       5.2.2 异步方式 189

       5.2.3 对WDM的回忆 191

       5.3 总线重置与计数 193

       5.3.1 总线重置 193

       5.3.2 设置重置回调 193

       5.3.3 计数更新 194

       5.4 PNP操作 195

       5.5 异步通信 196

       5.5.1 地址范围 197

       5.5.2 异步读 200

       5.5.3 异步写 201

       5.5.4 异步锁请求 202

       5.5.5 数据流 203

       5.6 等时通信 204

       5.6.1 申请带宽 205

       5.6.2 释放带宽 206

       5.6.3 等时通道 206

       5.6.4 资源句柄 207

       5.6.5 缓冲区挂载 210

       5.6.6 缓冲区解挂 211

       5.6.7 开始传输 211

       5.6.8 停止传输 212

       5.6.9 其他等时操作 213

       5.7 其他操作 213

       5.7.1 设备配置 213

       5.7.2 获取控制器信息 214

       5.7.3 速度信息 215

       5.7.4 厂商自定义命令 216

       5.8 安装与测试 216

       5.8.1 1394虚拟设备 216

       5.8.2 创建虚拟设备 218

       5.8.3 示例代码 219

       5.8.4 安装与测试 221

       5.9 小结 222

       内核天生适合于C语言编程,但越来越多的内核项目,规模达到10数万的规模。在这种情况下,人们不由地会将目光投向优雅的C++语言。总体上说,C和C++是至亲好友,内核中使用C++本不应有什么大问题,但有几个暗礁潜伏已久,不小心的程序员,你可千万不要触礁。

       第6章 内核驱动C++编程 223

       6.1 驱动中的类 224

       6.1.1 一个简单的例子 224

       6.1.2 new/delete 225

       6.1.3 extern C 227

       6.1.4 全局/静态变量 228

       6.1.5 栈的忧虑 230

       6.2 类封装的驱动程序 233

       6.2.1 寻找合适的存储所 233

       6.2.2 类方法与事件函数 235

       6.2.3 KMDF驱动实现 236

       6.2.4 WDM驱动实现 237

       6.3 多态 238

       6.3.1 基类、子类 238

       6.3.2 实现多态 239

       6.3.3 测试 241

       6.4 小结 241

       使用WDF框架编写的驱动程序,在测试和调试的时候,有特殊的工具。本章介绍了目前所知的三个,它们分别是:Windbg扩展调试命令、WDFTester测试工具、WDFVerifier测试工具。本章将以示例方式,介绍这些工具的使用。

       第7章 WDF驱动测试 242

       7.1 WDF错误 243

       7.1.1 实例分析 245

       7.1.2 USB错误 246

       7.2 WDF扩展调试命令 247

       7.3 WDFTester 254

       7.3.1 WDFFiTester 254

       7.3.2 使用 256

       7.3.3 WDFCallTracer 260

       7.4 WDFVerifier 263

       7.4.1 识别KMDF驱动 263

       7.4.2 使用与介绍 265

       7.5 小结 266

       SoftIce渐行渐远之后,Windbg成为内核调试的第一利器。使用Windbg的最大难点是命令繁多,参数复杂。本章以总结归纳的形式,介绍了作者在工作中经常用到的几大类调试命令,并以实例形式一一介绍。作者根据个人经验所作的分类,未能全备,但能够保证的是,所有实例翔实而可靠,可以作为可信的参考。

       第8章 调试命令详解 267

       8.1 概述 268

       8.1.1 寻求帮助 269

       8.1.2 DML语言 270

       8.1.3 基本信息 271

       8.1.4 基本设置 272

       8.1.5 格式化显示 273

       8.1.6 开始调试 273

       8.2 符号与源码 276

       8.2.1 模块列表 277

       8.2.2 模块信息 279

       8.2.3 符号路径 280

       8.2.4 符号加载 283

       8.2.5 符号搜索 285

       8.2.6 源码命令 287

       8.3 进程与线程 289

       8.3.1 进程命令 289

       8.3.2 线程命令 292

       8.3.3 异常与事件 296

       8.3.4 局部变量 300

       8.3.5 显示类型 301

       8.4 断点 301

       8.4.1 软件断点 301

       8.4.2 硬件断点 303

       8.4.3 其他操作 303

       8.5 内存命令 304

       8.5.1 查看内存 304

       8.5.2 内存信息 307

       8.5.3 其他命令 311

       8.6 小结 312

       相信大多数人在学习内核开发的时候,都问过这样一个问题:内核驱动怎么向用户程序发送消息,或者如何调用Win32函数。用户程序和内核同步,是一个基本而重要的知识,本章介绍了三种主要的实现方式。至于内核是否可以调用Win32函数,读一读本章开篇的话,你就有答案了。

       第9章 内核同步 313

       9.1 关于内核同步 314

       9.2 内核事件同步 316

       9.2.1 原理 316

       9.2.2 用户程序 318

       9.2.3 内核实现 319

       9.3 IRP同步 320

       9.3.1 用户程序 321

       9.3.2 内核实现 323

       9.4 WMI同步 325

       9.5 数据缓冲区同步 326

       9.6 反向调用 328

       9.7 小结 330

       微软最新的音视频编程框架即AVStream框架,不管从什么方面来说,音视频编程都是一个很小众的领域。AVStream框架极其复杂,个人看法是掌握的难度超过了WDF。本章介绍了AVStream框架的各种基本知识点,并以实例讲解一个内核音频过滤器在系统中是如何工作的。

       第10章 音频驱动开发 331

       10.1 简介 332

       10.1.1 音频模块架构 332

       10.1.2 系统中的音频设备 334

       10.2 AVStream对象 338

       10.2.1 设备对象 339

       10.2.2 Filter工厂和Filter对象 340

       10.2.3 Pin工厂和Pin对象 342

       10.2.4 Node对象与Connection结构体 343

       10.3 AVStream描述符 346

       10.3.1 描述符简介 346

       10.3.2 描述符示例 347

       10.3.3 分发函数表 349

       10.3.4 自控表 349

       10.3.5 自控表示例 351

       10.4 代码讲解 355

       10.4.1 入口函数 355

       10.4.2 设备分发函数 357

       10.4.3 Filter与Pin分发函数 358

       10.4.4 创建和删除 359

       10.4.5 数据处理 360

       10.4.6 数据格式 362

       10.5 自控表函数 364

       10.5.1 事件函数 364

       10.5.2 属性函数 366

       10.5.3 方法函数 367

       10.5.4 用户接口 367

       10.6 硬件操作 370

       10.6.1 数据DMA 370

       10.6.2 AVStream中的DMA实现 371

       10.6.3 谈谈ISR 374

       10.7 安装与测试 376

       10.7.1 安装 376

       10.7.2 测试工具 376

       10.8 小结 379

       ASIO音频驱动具有两个非常亮眼的优点:低延迟、多通道。低延迟能够达到几毫秒,使得最灵敏的耳朵也难也察觉;多通道则让通常的双声道、6.1声道等一齐歇菜,而可以很轻松地让多达十几、几十个声道同时工作,在进行高级音频编辑时,这非常重要。

       第11章 ASIO虚拟声卡 380

       11.1 引言 381

       11.2 关于ASIO 383

       11.3 ASIO用户驱动 384

       11.3.1 COM接口 384

       11.3.2 安装与卸载 386

       11.3.3 IASIO接口 387

       11.3.4 技术核心 390

       11.3.5 计算延迟 392

       11.4 内核驱动实现 393

       11.4.1 同步 393

       11.4.2 原理 393

       11.4.3 实现 396

       11.5 ASIO音频软件 396

       11.6 小结 397

       从本章开始的三章内容,讲的都是“驱动安装”这个话题。在本章中,介绍了系统中和驱动安装有关的各种系统模块。读者通过阅读本章后,至少能够掌握这两个基本知识:系统如何识别一个旧设备,并为它加载合适的驱动文件;系统如何发现一个新设备,并完成驱动安装。

       第12章 设备驱动安装入门 399

       12.1 基础知识预介 400

       12.1.1 设备类型 400

       12.1.2 设备实例ID 401

       12.1.3 驱动加载和安装 403

       12.2 安装模块 404

       12.2.1 内核PNP管理器 405

       12.2.2 用户PNP管理器 406

       12.2.3 安装接口函数(Setup API) 408

       12.2.4 配置管理器接口(CfgMgr API) 410

       12.2.5 类安装器(Class Installers) 410

       12.2.6 类协安装器(Class Co-Installers) 410

       12.2.7 设备协安装器(Device Co-Installers) 411

       12.2.8 驱动包(Driver Package) 412

       12.2.9 驱动仓库(Driver Store) 413

       12.2.10 设备管理器(Device Manager) 414

       12.2.11 安装程序 415

       12.2.12 新设备向导 416

       12.2.13 添加硬件向导 416

       12.2.14 驱动安装器(Driver Installer) 416

       12.3 重要问题 417

       12.3.1 寻找和选择 417

       12.3.2 32位与64位系统兼容 418

       12.3.3 系统重启 419

       12.4 安装模式 420

       12.4.1 示例1:客户端模式 421

       12.4.2 示例2:服务器模式 423

       12.5 安装器编程 424

       12.5.1 DIF码 424

       12.5.2 处理流程 427

       12.5.3 工程示例 429

       12.5.4 注册 430

       12.6 小结 431

       INF文件即驱动程序的“安装文件”,它包含了各种与驱动安装有关的指令信息。通过INF文件,系统知道如何处理驱动包中的各个文件,并在系统注册表中做出准确记录。本章主要从指令和域,这两个方面进行讲解。

       第13章 深入解析INF文件 432

       13.1 概述 433

       13.1.1 域 433

       13.1.2 指令 434

       13.1.3 多系统 435

       13.2 注册表指令 436

       13.2.1 缩写根键 436

       13.2.2 软件键 437

       13.2.3 硬件键 437

       13.2.4 AddReg 438

       13.2.5 DelReg 440

       13.2.6 BitReg 441

       13.3 文件操作指令 441

       13.3.1 CopyFiles 441

       13.3.2 DelFiles 443

       13.3.3 RenFiles 443

       13.4 服务指令 444

       13.4.1 AddService 444

       13.4.2 DelService 445

       13.5 基本域 446

       13.5.1 版本域 446

       13.5.2 文件域 447

       13.5.3 默认安装域 451

       13.5.4 控制域 454

       13.5.5 字符串域 457

       13.6 设备类安装域 458

       13.6.1 主域 459

       13.6.2 服务子域 461

       13.7 接口类安装域 461

       13.8 厂商/产品域 462

       13.8.1 厂商域 463

       13.8.2 产品域 464

       13.9 设备安装域 464

       13.9.1 硬件子域 466

       13.9.2 协安装器子域 467

       13.9.3 接口子域 468

       13.9.4 厂商默认配置子域 469

       13.9.5 逻辑优先配置子域 470

       13.10 ChkInf介绍 471

       13.11 小结 472

       驱动安装程序让你的驱动软件显得更加专业,所以,放弃手动安装驱动的做法吧,你的驱动将显得更靓。本章的示例软件MyDrvInst,可以作为读者设计更漂亮的安装软件的开始。

       第14章 设计驱动安装程序 473

       14.1 驱动包 474

       14.1.1 安装方式 474

       14.1.2 安装驱动包 475

       14.1.3 卸载驱动包 476

       14.2 驱动更新 477

       14.2.1 设备已连接 477

       14.2.2 设备未连接 478

       14.2.3 枚举系统设备 481

       14.3 分析INF文件 484

       14.3.1 函数介绍 484

       14.3.2 打印设备ID 486

       14.4 MyDrvInst介绍 487

       14.5 制作软件安装包 490

       14.5.1 视图介绍 490

       14.5.2 我们的工程 492

       14.5.3 编译执行 493

       14.6 小结 494

       附录A CY001 USB开发板 495

       附录B VisualKD + VMWare实现单机内核调试 501

驱动程序的开发同应用程序的开发相比要注意什么

       嵌入式驱动以及嵌入式Linux内核开发主要用的都是C语言,JAVA是基于上层开发的语言,而C是基于底层驱动开发的。所以如果想要做好嵌入式驱动开发主要是要把C语言基础打好,这样对以后的发展会有很大帮助的。再则需要了解一点硬件方面的知识,例如单击片或者开发板和开发软件工具使用。下面就由福州卓跃教育具体介绍如何学习嵌入式驱动。

        如何开始学习嵌入式驱动开发? 是每个想学习嵌入式驱动开发初学者的第一个问号.由于嵌入式开发较上层类软件开发的特殊性,如果没有相应的仪器设备及一个很好的环境,对初学者来说简直就是梦魇,如果没有相应的指导,可能就要多摔几个跟头和多消耗一些脑细胞,因为驱动开发不像上层类的开发那么直观,写个程序就可以在PC机上直接查看了,驱动开发只有烧到板子上才能验证。

        嵌入式驱动开发需要了解的知识大概有以下几类:

        1 嵌入式操作系统驱动框架。每一个操作系统都有自己的构架,应该了解驱动在整个系统中的具体位置与构建驱动程序的主要事项

        2 总线知识,比如PCI、USB总线。

        3 芯片知识。驱动其实就是对设备上一些寄存器的配置、CPU与设备本身的通讯以及对不同命令的处理

        4 要做好驱动,必须对所使用的CPU体系结构有一个比较深刻的认识

        5 C++基本用不上,主要是C和汇编。

        6 做驱动最好要懂内核调试(比如说linux)

        另外嵌入式开发涉及的知识面还是非常多的,包括选型的CPU类型和他的体系结构,CPU上提供的外围接口,以及为某个特殊功能而加入的外围设备.这些是一个合格嵌入式开发人员需要掌握的最基本的知识。

        对我们作为嵌入式开发提出了更高的要求,重要的一点是嵌入式开发多是看不到摸不着的东西,相对来说非常的抽象,所以这时候就要借助一些测量设备来协助我们,比如基础的万用表,示波器,电流计,频率计,Trace32等甚至一些为方便开发自己做的一些小工具,当然不限于硬件和软件的.

如何正确入门Windows系统驱动开发领域

       驱动程序的开发同应用程序的开发相比要注意驱动程序的开发需要非常小心。简单来说就是操作硬件的这么一种程序,由于操作硬件本身有着一定的复杂性和多样性,所以几乎每种OS都提供了比较标准的接口规范,所以我们只能通过这种接口规范来完成程序的入口出口,让我们的硬件设备开始工作等等。

驱动程序的开发含义

       驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息当计算机程序请求与某个硬件设备交互时,设备驱动程序充当硬件设备与使用它的程序之间指令的转换器,操作系统并不支持机器上的所有硬件,所以一般来讲硬件厂商都要为自己的硬件编写驱动程序,每个驱动程序都旨在为特定或一组设备工作。

       在计算机上驱动程序使用各种总线接口来联系设备,此外驱动程序一般不直接与用户交互所以很多用户完全不知道它们的存在,驱动程序的开发需要非常小心因为它直接与硬件打交道,同时也与操作系统打交道如果设备驱动程序出现问题,可能会导致系统崩溃这就是为什么需要专业人员或团队来为设备编写驱动程序的原因。

linux驱动开发要有哪些基础

       [序言]

       很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概也就3~4年时间.大多数人都认为会驱动开发的都是牛人,高手之类的.其实高手,牛人不是这样定义的.我们在学习驱动开发之前,一定要明白一个道理:术业有专攻,不要盲目跟风.

       [本内容适用环境及工具]

       1> Windows系统下

       2> VS2003版本以上

       3> Windows驱动开发包(DDK(老版本) WDK(新版本))

       4> 有能力着可以安装VMWare

       [本内容适用群体]

       1> 具有C/C++语言基础的人

       2> 具有80x86汇编基础的人

       3> 具备高中以上文化水平的逻辑思维

       [具备Windows系统理论书籍]

       1> Windows核心编程

       2> Win32多线程程序设计

       3> 深入解析Windows操作系统

       4> Windows操作系统原理

       FAQ1:为什么需要[具备Windows系统理论书籍]这4本书?

       答:驱动是Windows系统的一个重要的组成部分,深入Windows系统核心的一个体系,就因为驱动跟系统内核联系得十分紧密,所以涉及了不少系统的基础理论以及原理.因此在学习驱动开发之前必须先明白Windows系统的基础开发理论,Windows系统的运作原理,Windows系统的架构体系.那么我提供的上面4本书是目前市面上我认为最经典最全面的书籍了.

       [具备Windows驱动开发书籍]

       1> Windows驱动开发技术详解

       2> Windows设备驱动程序WDF开发

       FAQ2:为什么需要[具备Windows驱动开发书籍]这2本书?

       答:假设你对Windows系统的基础理论扎实了,也看完了所说的[Windows系统理论书籍]这4本书,而且你还从事开发过Windows程序或者大程序的经验者.那么你进入Windows驱动开发的时候,需要一本经典的驱动入门开发书籍即可正确入门.现在我提供了[Windows驱动开发书籍]这2本书完完全全针对Windows驱动开发入门而编写的书籍.当然我首要推荐<Windows驱动开发详解>这本书.本书的内容在目前来说,针对驱动开发的讲解时非常到位了.包含了驱动开发理论 配置 驱动体系 等等......是一本不可多得的好书.那么第2本,其实有点滥竽充数,但是他里面有少少涉及到WDF这个最新的驱动开发理论的讲解,大家也就凑合着吧.

       [具备Windows调试基础理论书籍]

       1> 软件调试

       2> Windows用户态程序高效排错

       FAQ3:为什么需要[具备Windows调试基础理论书籍]这2本书?

       答:在开发驱动的情况下,你少不了要调试驱动程序.那么如何调试驱动程序呢? Windows已为你考虑到这个问题了并开发了一套强有力的调试工具:Windbg .如何学习这个工具的调试呢?那么现在市面上只有这2本书针对Windbg讲解得还比较到位,至少针对调试命令的使用,已经用中文讲解了,大家可以通过2本书先大概了解Windbg的调试命令,然后再进一步进行GOOGLE搜索并深入学习.

       [具备汇编基础理论书籍]

       1> 汇编语言 作者:王爽

       2> 80x86汇编语言程序设计教程[绿皮版 或者 黑皮版]

       FAQ4:为什么需要[具备汇编基础理论书籍]这2本书?

       答:由于在Windows环境下开发驱动,从而有个弊端,就是Windows的WDK,DDK文档少得可怜,很多说明多是模糊的.因此导致我们开发的驱动极其不稳定,这时就需要逆向Windows驱动的机制来加深理解.在一个由于驱动的不稳定性,会导致系统蓝屏,有时错误并不会直接定位到你的代码,这时就需要汇编来分析错误的缘由.就如我前面介绍的[具备Windows调试基础理论书籍]基本是用汇编语言来阐述调试技术.

       [驱动开发扩展书籍]

       1> 寒江独钓-Windows内核安全编程

       2> Windows内核原理与实现

       3> Rootkit Windows内核安全防范

       4> Windows内核情景分析

       FAQ5:为什么需要[驱动开发扩展书籍]这4本书?

       答:熟话说:学无止境,驱动开发领域是一个很庞大的体系,这归根于驱动框架多样化而决定的.驱动包含了:文件驱动,磁盘驱动,显卡驱动,网络驱动,等等不同的种类,每一种类就是一个领域,你决定你的能力需要扩展到多方面,那么你可以考虑先我这里提供的这4本书来学习,通过阅读这3本书,你会发现驱动可以做很多你意想不到的事情.本人从事开发驱动将近4年,也仅仅涉及 文件驱动,磁盘驱动以及一些小型驱动而已.这些的学习我也仅仅是根据需求来进行选择性学习.每个人都有自己的能力极限,大家要量力而行.

       [推荐正确学习方式]

       1> 认真阅读我提供的参考书籍

       2> 多使用Google来解决你遇到的问题

       3> 多尝试用驱动写你自己喜欢的功能

       4> 提升你英文阅读能力,因为大部分有价值的资料来自于国外

       5> 不要急于求成,不要浮躁,不要把驱动开发技术当做一种炫耀

做linux下的驱动开发,需要掌握哪些技能和知识点?有没具体的要求列一下.谢谢各位

       需要一定的努力才可以学好:

       Linux设备驱动是linux内核的一部分,是用来屏蔽硬件细节,为上层提供标准接口的一种技术手段。为了能够编写出质量比较高的驱动程序,要求工程师必须具备以下几个方面的知识:

       1、 熟悉处理器的性能

       如:处理器的体系结构、汇编语言、工作模式、异常处理等。对于初学者来说,在还不熟悉驱动编写方法的情况下,可以先不把重心放在这一项上,因为可能因为它的枯燥、抽象而影响到你对设备驱动的兴趣。随着你不断地熟悉驱动的编写,你会很自然的意识到此项的重要性。

       2、掌握驱动目标的硬件工作原理及通讯协议

       如:串口控制器、显卡控制器、硬件编解码、存储卡控制器、I2C通讯、SPI通讯、USB通讯、SDIO通讯、I2S通讯、PCI通讯等。编写设备驱动的前提就是需要了解设备的操作方法,所以这些内容的重要程度不言而喻。但不是说要把所有设备的操作方法都熟悉了以后才可以写驱动,你只需要了解你要驱动的硬件就可以了。

       一、掌握硬件的控制方法

       如:中断、轮询、DMA 等,通常一个硬件控制器会有多种控制方法,你需要根据系统性能的需要合理的选择操作方法。初学阶段以实现功能为目的,掌握的顺序应该是,轮询->中断->DMA。随着学习的深入,需要综合考虑系统的性能需求,采取合适的方法。

       二、良好的GNU C语言编程基础

       如:C语言的指针、结构体、内存操作、链表、队列、栈、C和汇编混合编程等。这些编程语法是编写设备驱动的基础,无论对于初学者还是有经验者都非常重要。

       三、 良好的linux操作系统概念

       如:多进程、多线程、进程调度、进程抢占、进程上下文、虚拟内存、原子操作、阻塞、睡眠、同步等概念及它们之间的关系。这些概念及方法在设备驱动里的使用是linux设备驱动区别单片机编程的最大特点,只有理解了它们才会编写出高质量的驱动。

       四、掌握linux内核中设备驱动的编写接口

       如:字符设备的cdev、块设备的gendisk、网络设备的net_device,以及基于这些基本接口的framebuffer设备的fb_info、mtd设备的mtd_info、tty设备的tty_driver、usb设备的usb_driver、mmc设备的mmc_host等。

驱动开发的步骤有哪些

       .您要驱动什么东西?抛开Linux系统的约束,您对要驱动的东西是如何工作的、如何去编程驱动它了解吗?是一点不了解?半知半解?一般了解?还是熟知?精通?如果对要驱动的东西都不了解,或者纯粹就想泛泛地学习Linux驱动编程,估计收获不会很大。

       2.做过多线程编程吗?为什么要多线程?深刻理会了多线程中如何访问临界资源,如何使用mutex,semaphore?多个线程工作起来,怎么控制它们像我们几个人一起协作干活那样,该各干各的,又该相互通知与配合呢?

       3.如果把操作系统比作一个大的执行程序,那么驱动程序就相当于以动态链接库形式提供的“插件”。您有没有做过“插件”式的应用程序?没做过也没关系,您认真思考一下这样的问题:您要做一个控制小车的程序,您这个程序功能很牛X,您希望无论是张家的小车,还是李家的小车都能被您控制,无奈您手头上只有牛家的小车,但你明白,张家、李家的小车功能和你牛家的差不多,控制也就那些事,就是目前不知道具体该如何控制。您得想个法子,留好接口,尽可能保证以后张家、李家的小车都可以被你的程序控制——这时候,你的程序该怎么设计结构比较好呢?

       4.CPU在时钟脉冲“PIA-PIA”的节奏下都在干些什么?无论是X86或是ARM,要做驱动,对这个还是得有点基本的了解。

       5.保护模式,虚拟内存,大致的道理明白吗?这个得知道。咱们现在大多数的处理器都有cache,cache干啥用?对DMA会有些什么不良影响?这个如果要搞DMA(例如PCI设备驱动)需要明白。

       6.按楼上的兄弟说的,找本LDD学习

       7.总的来说,设备驱动程序干的是驱动硬件的活,但它的编写更需要注重软件的思路、结构和方法。前面说的写小车控制程序能一定程度上说明这个问题。当然,听起来好像有点难,但是干起来还是挺爽的,没有想的那么复杂

       步骤?没有什么现成的可作为规律来用的步骤。

       开发驱动主要有两方面的基础要求:

       a,明白你手头的硬件工作原理,包括处理器架构的知识,还有外设控制器的 datasheet 为必读之物;

       b,假如你们要开发的整个系统是裸机程序,那你要开发的驱动程序就是一套和硬件打交道的函数库;但是假如你们计划在产品中使用一个操作系统,那开发驱动之前就需要熟悉这个操作系统的相关内部操作原理,因为你写的是驱动程序需要很好的“镶嵌”到这个操作系统的环境中去。

       具体的,可以参考 JulianTec 的这篇文章:《应用程序,操作系统,驱动程序和硬件》

       今天的讨论已经涵盖了“驱动程序开发笔记”的各个方面。我希望您能够从中获得所需的信息,并利用这些知识在将来的学习和生活中取得更好的成果。如果您有任何问题或需要进一步的讨论,请随时告诉我。