您的位置 首页 > 驱动程序

嵌入式设备驱动程序开发流程

嵌入式设备驱动程序开发流程

       很高兴能够参与这个嵌入式设备驱动程序开发流程问题集合的解答工作。我将根据自己的知识和经验,为每个问题提供准确而有用的回答,并尽量满足大家的需求。

1.嵌入式linux开发

2.嵌入式开发学习步骤

3.嵌入式Linux设备驱动开发详解的目录

4.嵌入式驱动开发需要学什么

嵌入式设备驱动程序开发流程

嵌入式linux开发

       嵌入式系统是一个很广泛的概念,对它的定义也很多,我觉得理解嵌入式系统关键抓住下面几点:

       1。嵌入式系统是相对于PC平台而言的,嵌入式了使用的平台一般是针对ARM,PPC,DSP等非PC平台的,所以使用的编译和调试工具不是VC6.0,而是不同的平台需要专门的编译开发工具,交叉编译是嵌入式特有的概念;

       2。嵌入式系统往往指带有操作系统的系统,以前简单的系统可以直接在裸机(如51单片机)上开发,而现在OS成为嵌入式的一个基本特征,已经有各种实时内核或者全功能的OS,因此对程序员要求较高

       3。嵌入式系统往往包括软件和硬件两个部分,软件开发人员往往也需要知道硬件的知识,只有知道硬件的特性才能开发出高性能的程序。另外不想在PC上开发,驱动程序都已经有了,在嵌入式系统中由于所接的外设复杂,很多时候需要自己编写驱动程序,结果是在程序开发之前一般需要看硬件手册。

       从上面的特点看出嵌入式开发与PC上的程序开发是不同的,在PC上开发主要是应用程序的开发,侧重想法,而嵌入式开发则要考虑软硬件各个方面而且通常要购买昂贵的开发板和仿真器,因此起点相对较高。

        我接触嵌入式是在大四的时候,当时已经学习了微机原理、单片机和DSP等课程,我一直希望能做出一个完整的系统,所以我第一次明白嵌入式系统是什么的时候就对它产生了浓厚的兴趣,然而兴趣是高,缺乏人指导,我依然还是菜鸟一个,认识到实践和长时间积累相当重要。我都是在课余自学嵌入式,嵌入式学习之路走得很艰难,其中积累了点点经验,总结如下:

       1。嵌入式从何学起?

       这是一个初学者很想知道的问题,然而又是很难回答的问题,我初学时也是一样的。学习嵌入式不能着急,我觉得最重要的还是打好基础,从简单的做起。

       其中的基本功主要有:

       微机原理和接口要很熟悉,至少知道一门汇编语言,不是要你去记指令,而是要弄清楚处理器执行的过程和常用的指令执行的操作;

       熟悉常用的体系结构。ARM架构处理器应用越来越广泛,值得研究一下,当然还有很多的体系架构,开发时再看硬件手册这个过程就是训练自己阅读手册和查询手册的能力,手册很长,往往只要知道个大概,细节需要在使用时查询;

       C语言编程:C语言大家都会用,我知道在学校学习时都是基于PC,基本不会用C语言程序访问寄存器或者外设,而在嵌入式开发时你会发现有很多地方需要小心,举个例子一般中断服务程序需要访问的全局变量需要用volatile申明;

       有了上面的基本功就可以开始最简单的嵌入式开发之路了。

       2。不带OS的嵌入式开发

        先不要急着看什么操作系统原理,那些东西如果没有开发经验的话不可能看得很明白的,首先还是找到嵌入式开发的感性认识。我推荐从51单片机开发开始,因为51单片机便宜而且网上有很多现成的代码可以参考,先编写一些简单的汇编语言程序,然后学习C51进行c语言编程这个过程关键是熟悉交叉编译和开发流程,熟悉访问硬件的方法,学习编写中断服务程序。另外,这个时期可以学习嵌入式c编程的注意事项《c与c++嵌入式系统编程》《C陷阱与缺陷》是不错的书,值得看看。

       3。带OS的编程

        一旦运行了OS,编程难度加大了,思维和编程方法与不带OS的大不一样,这个转变是很艰难的。学习操作系统的原理是必须的,只有很好地认识了操作系统才可能进一步在OS上编程,比如进程、调度、同步和互斥、优先级翻转等。OS分成简单的实时内核和复杂的全功能OS,uCOSII是典型的实时内核,linux是典型的全功能的OS,不同的OS满足不同需求,要根据自己的设计来选择合适的OS。嵌入式很多处理要求是实时的,需要保证性,编写程序和选择OS要特别注意。推荐从uCOS入手,因为可以获得源码,而且网上有很多的资料,已经被移植到很多平台。到了这个时候估计自己可以自学了,要多做几个项目,在项目中摸索,要知道编写程序容易,但是要编写稳定可靠的程序绝非易事,有很多书值得一看。我目前也是在学习linux,开始编写驱动程序了,我想这还是一个开始,以后要学的东西还很多啊^_^

        以上说得很简单,实际操作起来则需要付出很多努力,需要学习很多东西,这里只是给出学习的大概步骤,给初学者一个整体概念,希望仍在困惑中的人少走一些弯路.

嵌入式开发学习步骤

       驱动程序识别设备时,有以下两种方法:

       (1)驱动程序本身带有设备的信息,比如开始地址、中断号等:加载驱动程序时,就可以根据这些信息来识别设备。

       (2)驱动程序本身没有设备的信息,但是内核中已经(或以后)根据其他方式确定了很多设备的信息;加载驱动程序时,将驱动程序与这些设备逐个比较,确定两者是否匹配(match)。如果驱动程序与某个设备匹配,就可以通过该驱动程序操作这个设备了。内核常使用第二种方法来识别设备,这可以将各种设备集中在-一个文件中管理,当开发板的配置改变时,便于修改代码。在内核文件includePnux?atform _device.h 中,定义了两个数据结构来表示这些设备和驱动程序: platform_ device 结构用来描述设备的名称、ID、所占用的资源(比如内存地址/大小、中断号)等; platform_ driver 结构用来描述各种操作函数, 比如枚举函数、移除设备函数、驱动的名称等。内核启动后,首先构造链表将描述设备的platform_device结构组织起来,得到一一个设备的列表:当加载某个驱动程序的platform_ driver 结构时,使用一.些匹配函数来检查驱动程序能否支持这些设备,常用的检查方法很简单:比较驱动程序和设备的名称。

嵌入式Linux设备驱动开发详解的目录

       我也是计算机科学与技术专业的,你要是在单片机上做开发,给你看看怎么学习。当然我们的嵌入式学习基本上都是基于Linux的啊。

       开发板必须要有的啊!!呵呵。

       这里声明一下,我指的嵌入式主要是偏向软件的嵌入式。学习嵌入式的重点和难点关键在操作系统,如果没有掌握操作系统,我认为很难把握一个嵌入式系统。即使在做嵌入式开发中,作应有层的开发几乎可以不知道操作系统也可以开发,我认为那是浮在表面的。很难深入和提高自己的层次。声明:一孔之见!不可深究!?

在学习linux内核过程中犯了一个极其严重路线错误:对linux几乎不懂就开始学习内核。我个人推荐一个学习路线是:使用linux—〉linxu系统编程开发---〉驱动开发和分析linux内核。而我差不多相反,实际上你不会使用linux也可以学习内核,但是如果你懂了这些东西学习更有效率。?

       关于要不要学习内核的问题,我的回答如下:不一定。如果你是喜欢钻研的那你进入内核会满足你的欲望。同时对你以后的嵌入式系统的开发有很好的影响。如果你想从事嵌入式linux系统开发,最好对内核有所了解。如果仅仅是做应用开发没有必要。我打个比喻:c、c++、java等语言是武林中的某个武林派别的话,如什么拳法,什么刀法等,那么linux?内核应该是一个人的内功的反应。?

怎么开始学linux内核:最好有三件宝物:《深入理解linux内核》《情景分析》和源代码。?先看《深入理解linux内核》,那主要讲原理,好像市场上有本讲原理性并且更浅,《linux内核设计与实现》听说不错。如果没有学习操作系统的,像我这样的,最好先看看操作系统原理的书。看了几遍后,就看情景分析,最好对着《深入理解linux内核》看。两本交叉看,《深入理解linux内核》是纲,《情景分析》是目。最后深入代码。?

       学习嵌入式技术,我认为两个重点,cpu和操作系统,目前市场是比较流行arm,所以推荐大家学习arm。操作系统很多,我个人对开始学习的人,特别不是计算机专业的,推荐学习ucos。那是开源的,同时很小。学习很好。为什么选linux,我不想讲太多,网上这方面的太多,但是我在工作中发现,做linux的技术路线很难,在windows几乎不会有的问题,在linux开发中几乎遍地陷阱。一掉进去划很长时间出来,一旦解决自己又长进了!相对来说开发周期长,难度大。现在资料也逐渐丰富起来,难度也降低了些!

       至于怎么学习,这是他的特色地方,必须有块开发板,我是同学里最早买学习板的,虽然化钱,我认为值。对我实习和工作产生了很大的影响。

       如果没有开发板,那是纸上谈兵。有人说,那要1000-2000啊,的确是,兄弟,看长远的,对您的职业和发展那点钱不算什么!有的人说我站着说话不腰痛,好吧,钱这东西对我影响很大,我在大学里扫厕所,扫的不错,奖5元/月。兄弟你有过吗?我认为教育投资是效益最有保障的!我实习拿3k,很多同学拿?1-2k,当然比我高的也有。虽然我现在没有毕业,但一家公司就签了。从事目前流行的高档的消费电子的研发。对于我两年前一无所知的我,应该有质的变化,我感谢学校收了我这个废品。当然我也非常的努力。说这么多并不是要炫耀我什么,实际上根本不值得炫耀,虽然现在工作环境和待遇比较满意,但是,我发现我很差,特别是代码能力,我希望平常大家少玩游戏,多编程。编程才是硬道理!?

       没有想到,一下写了这么多,其实还想写的,比如在中科院的一位老兄是怎样学习linux内核和看书的,真的很感动。他的为人我很钦佩。也想介绍毛德操的《嵌入式系统》那本书,对学习arm?linux的很好,也想介绍实习和工作的东西,太长了,耽误大家时间。我也不想检查里面的错别字了,很多!

       呵呵呵,我想对你应该有帮助的啊,特别是那几本书,必看的啊!!

       希望你前程似锦,学习进步!!

       呵呵呵呵。汇编也很重要啊,这一点对明白操作系统和CPU有重要的推进作用。

嵌入式驱动开发需要学什么

       第1章 嵌入式系统与驱动程序 1

       本章目标 1

       1.1 嵌入式系统概述 1

       1.1.1 嵌入式系统的概念 1

       1.1.2 嵌入式系统的特点 2

       1.1.3 嵌入式系统的体系结构 2

       1.2 嵌入式处理器介绍 4

       1.2.1 嵌入式处理器分类 4

       1.2.2 ARM概述 5

       1.2.3 ARM系列芯片简介 5

       1.3 嵌入式操作系统介绍 7

       1.3.1 主流嵌入式操作系统 7

       1.3.2 嵌入式系统的发展状况 8

       1.3.3 嵌入式Linux介绍 8

       1.3.4 嵌入式系统开发环境的建立 9

       1.3.5 嵌入式软件开发 10

       1.4 嵌入式Linux驱动程序 12

       1.4.1 嵌入式Linux的内核空间和用户空间 12

       1.4.2 嵌入式Linux的文件系统 12

       1.4.3 嵌入式Linux的设备管理 14

       1.4.4 嵌入式Linux的驱动程序 16

       1.5 知识索引 20

       1.6 思考与练习 21

       第2章 简单的字符设备驱动程序 23

       本章目标 23

       2.1 嵌入式Linux字符设备的驱动程序结构 23

       2.1.1 嵌入式Linux驱动程序常用的头文件 24

       2.1.2 File_operations结构体 24

       2.1.3 字符设备驱动程序的入口 25

       2.1.4 驱动程序的设备注册 26

       2.2 设备驱动程序中的具体问题 27

       2.2.1 I/O端口 28

       2.2.2 内存操作 29

       2.2.3 中断处理 29

       2.3 LED的驱动程序实例及测试 30

       2.3.1 LED I/O端口设置 30

       2.3.2 LED硬件电路设计 32

       2.3.3 LED驱动程序设计 33

       2.3.4 LED测试程序设计 36

       2.4 嵌入式Linux中断处理驱动程序及测试 37

       2.4.1 中断处理过程 37

       2.4.2 中断向量表 39

       2.4.3 中断的处理模式 39

       2.4.4 中断的优先级 40

       2.4.5 中断的嵌套 40

       2.4.6 中断源的扩展 40

       2.4.7 中断控制寄存器的设置 41

       2.5 按键中断的驱动程序实例 45

       2.5.1 按键中断的电路设计 45

       2.5.2 按键中断的驱动程序设计 45

       2.6 知识索引 48

       2.7 思考与练习 49

       第3章 数字显示驱动程序 50

       本章目标 50

       3.1 数字显示器 50

       3.1.1 数码管简介 50

       3.1.2 数码管的分类 51

       3.1.3 数码管显示原理 51

       3.2 数码管显示电路的硬件设计 52

       3.2.1 译码器的使用 52

       3.2.2 数码管的驱动方式 53

       3.2.3 串/并变换的译码设计 55

       3.3 数码管驱动程序实例 56

       3.3.1 驱动程序的初始化和卸载模块 56

       3.3.2 文件操作结构模块 57

       3.3.3 数码管的打开模块 57

       3.3.4 数码管的读写模块 58

       3.3.5 数码管的I/O控制模块 58

       3.3.6 数码管的退出模块 58

       3.3.7 驱动程序的模块加载和卸载 59

       3.4 数码管显示电路测试程序设计 60

       3.4.1 数码管测试设计 60

       3.4.2 数码管测试程序 60

       3.4.3 数码管测试效果 61

       3.5 知识索引 61

       3.6 思考与练习 62

       第4章 键盘驱动程序 63

       本章目标 63

       4.1 键盘接口概述 63

       4.1.1 键盘的分类 63

       4.1.2 键盘的防抖 65

       4.1.3 键盘的扫描 65

       4.1.4 键盘的缓冲算法 67

       4.2 键盘的驱动设计实例 67

       4.2.1 锁存器和缓冲器扩展键盘 67

       4.2.2 锁存器和缓冲器的接口 68

       4.2.3 锁存器和缓冲器扩展键盘驱动程序设计 69

       4.2.4 锁存器和缓冲器扩展键盘测试程序设计 71

       4.3 智能控制芯片HD7279扩展键盘 72

       4.3.1 HD7279的电路设计 72

       4.3.2 HD7279的指令介绍 73

       4.3.3 HD7279的串行接口 74

       4.3.4 HD7279的驱动程序设计 75

       4.3.5 HD7279的测试程序设计 84

       4.4 知识索引 85

       4.5 思考与练习 85

       第5章 A/D驱动程序 86

       本章目标 86

       5.1 A/D转换的过程 86

       5.1.1 采样和保持 86

       5.1.2 量化和编码 88

       5.1.3 ADC的分类 89

       5.2 A/D转换器的基本原理 89

       5.2.1 逐次逼近型A/D转换器 89

       5.2.2 双积分型A/D转换器 90

       5.2.3 V/F和F/V型转换器 93

       5.2.4 其他A/D转换器 95

       5.3 A/D转换器接口技术 97

       5.3.1 ADC的主要参数及意义 97

       5.3.2 ADC的电路选择方法 98

       5.3.3 ADC实际应用中的问题 99

       5.4 S3C2410 A/D转换驱动设计实例 99

       5.4.1 S3C2410的A/D转换电路 99

       5.4.2 S3C2410X的A/D转换控制寄存器 100

       5.4.3 S3C2410X的A/D转换数据寄存器 101

       5.4.4 S3C2410X中A/D转换驱动程序的设计 102

       5.4.5 S3C2410X中A/D转换测试程序的设计 105

       5.5 知识索引 106

       5.6 思考与练习 107

       第6章 D/A驱动程序 108

       本章目标 108

       6.1 D/A的原理介绍 108

       6.1.1 D/A转换的概念及基本原理 108

       6.1.2 电子模拟开关 109

       6.1.3 D/A转换器的基本结构 110

       6.1.4 D/A转换的静态参数 114

       6.1.5 D/A转换的动态参数 115

       6.2 D/A转换的硬件电路设计 116

       6.2.1 D/A转换的接口技术 116

       6.2.2 D/A转换芯片介绍 117

       6.2.3 D/A转换的电路设计 118

       6.3 D/A转换器的驱动程序实例 118

       6.3.1 D/A驱动程序中的宏定义 118

       6.3.2 D/A的模块加载 118

       6.3.3 D/A转换器的文件操作模块 119

       6.3.4 D/A转换器的读写控制模块 120

       6.3.5 D/A转换器的打开、退出模块 120

       6.4 测试程序的设计 120

       6.4.1 D/A测试程序中的宏定义 121

       6.4.2 D/A测试程序的主函数 121

       6.4.3 D/A测试程序中的功能函数 122

       6.4.4 D/A测试程序中的功能打印函数 123

       6.4.5 D/A测试程序中的波形生成函数 123

       6.4.6 D/A测试程序的效果 124

       6.5 知识索引 125

       6.6 思考与练习 125

       第7章 LCD驱动程序 126

       本章目标 126

       7.1 LCD显示器概述 126

       7.1.1 液晶 126

       7.1.2 LCD显示屏的背光 127

       7.1.3 LCD显示器的分类 127

       7.1.4 LCD的显示原理 127

       7.1.5 LCD的驱动方式 130

       7.1.6 LCD的常用指标 131

       7.2 LCD的显示接口 131

       7.2.1 灰度STN的时序 132

       7.2.2 彩色STN的时序 133

       7.2.3 TFT的时序 134

       7.3 嵌入式处理器的LCD控制器 136

       7.3.1 LCD控制器 136

       7.3.2 LCD控制器的设置 137

       7.3.3 LCD的字符显示缓存 139

       7.4 LCD的驱动程序设计 140

       7.4.1 LCD驱动程序相关的宏定义 140

       7.4.2 LCD驱动程序的底层操作函数 142

       7.4.3 LCD驱动程序提供的API 145

       7.4.4 LCD驱动程序的模块化加载 151

       7.4.5 LCD的测试程序 152

       7.5 基于Framebuffer的LCD驱动程序实例 155

       7.5.1 Framebuffer概述 155

       7.5.2 LCD的电路连接 155

       7.5.3 Framebuffer设备驱动程序的结构 156

       7.5.4 Framebuffer设备驱动程序的设计 159

       7.5.5 Framebuffer设备测试程序的设计 164

       7.5.6 嵌入式Linux常用的GUI 166

       7.6 知识索引 166

       7.7 思考与练习 167

       第8章 触摸屏驱动程序 168

       本章目标 168

       8.1 触摸屏概述 168

       8.2 触摸屏的分类 168

       8.2.1 电阻技术触摸屏 168

       8.2.2 表面声波技术触摸屏 169

       8.2.3 电容电感技术触摸屏 170

       8.2.4 红外线技术触摸屏 170

       8.3 触摸屏的特性 171

       8.3.1 透明度和色彩失真 171

       8.3.2 反光性 171

       8.3.3 清晰度 171

       8.3.4 漂移 172

       8.3.5 检测和定位 172

       8.4 触摸屏的硬件电路设计 172

       8.4.1 电阻式触摸屏的电路原理 172

       8.4.2 电阻式触摸屏原点的定位 173

       8.4.3 电阻式触摸屏的电路连接 174

       8.5 触摸屏的驱动程序实例 176

       8.5.1 触摸屏接口的模式 176

       8.5.2 A/D转换和触摸屏寄存器的设置 177

       8.5.3 触摸屏的坐标 179

       8.5.4 触摸屏的电路连接 180

       8.5.5 触摸屏的驱动程序接口 181

       8.6 测试程序的设计 182

       8.6.1 触摸屏的数据定义 183

       8.6.2 触摸屏的数据处理 183

       8.6.3 触摸屏的运行测试 185

       8.7 知识索引 186

       8.8 思考与练习 187

       第9章 CAN总线驱动程序 188

       本章目标 188

       9.1 CAN总线接口设计 188

       9.1.1 CAN总线概述 188

       9.1.2 CAN的工作特点及主要优点 189

       9.1.3 CAN总线的电气特征和MAC帧结构 189

       9.2 嵌入式处理器上CAN总线接口的扩展 190

       9.2.1 SJA1000简介 190

       9.2.2 SJA1000扩展 191

       9.3 SJA1000扩展CAN总线接口的设计 192

       9.3.1 CAN 控制器SJA1000的操作模式 192

       9.3.2 CAN控制器SJA1000的特征功能 193

       9.3.3 CAN 控制器SJA1000的Basic CAN模式设置 194

       9.4 SJA1000扩展CAN总线接口的通信 196

       9.4.1 通过CAN总线建立通信的步骤 196

       9.4.2 SJA1000的初始化 196

       9.4.3 驱动程序的结构设计 198

       9.4.4 驱动程序init、exit、open、close函数的实现 200

       9.4.5 驱动程序read、write函数的实现 201

       9.4.6 驱动程序interrupt、ioctl函数实现 202

       9.4.7 测试程序的编写 202

       9.5 驱动程序的加载 204

       9.6 知识索引 204

       9.7 思考与练习 205

       第10章 IIC总线驱动程序 206

       本章目标 206

       10.1 IIC总线概述 206

       10.1.1 IIC总线介绍 206

       10.1.2 IIC总线引入的原因 206

       10.1.3 IIC总线的特点 206

       10.1.4 IIC总线的基本结构 207

       10.1.5 IIC总线的术语 207

       10.1.6 IIC总线的工作 208

       10.1.7 IIC总线的竞争仲裁 209

       10.1.8 IIC总线的工作流程 210

       10.2 嵌入式处理器的IIC接口 211

       10.2.1 IIC总线控制寄存器 212

       10.2.2 IIC总线控制/状态寄存器 213

       10.2.3 IIC总线地址寄存器 214

       10.2.4 IIC总线移位数据寄存器 214

       10.2.5 S3C2410中与IIC对应的I/O端口 215

       10.3 基于IIC的键盘芯片应用 216

       10.3.1 ZLG7290的功能 217

       10.3.2 ZLG7290的控制方式 218

       10.3.3 ZLG7290的寄存器 218

       10.3.4 ZLG7290的通信接口 219

       10.3.5 ZLG7290的指令介绍 219

       10.4 IIC总线驱动程序实例 221

       10.4.1 ZLG7290的电路连接 221

       10.4.2 ZLG7290的通信流程 223

       10.4.3 ZLG7290驱动中变量的定义 225

       10.4.4 ZLG7290驱动中实时时钟的改变 226

       10.4.5 ZLG7290和IIC寄存器的初始化 227

       10.4.6 ZLG7290驱动程序的模块化 228

       10.4.7 ZLG7290的文件操作结构 228

       10.5 IIC总线的测试程序 230

       10.6 知识索引 231

       10.7 思考与练习 231

       第11章 音频总线驱动程序 232

       本章目标 232

       11.1 音频总线接口概述 232

       11.1.1 音频的采样精度 233

       11.1.2 音频编码 233

       11.2 IIS音频总线接口 233

       11.2.1 IIS总线的物理连接 233

       11.2.2 IIS的总线协议 234

       11.2.3 IIS总线的硬件设计 235

       11.2.4 IIS总线的寄存器 236

       11.3 AC97音频总线接口 239

       11.4 IIS总线的驱动程序设计 240

       11.4.1 音频设备基础知识 240

       11.4.2 音频设备文件 241

       11.4.3 WAV声音文件 243

       11.4.4 音频设备和驱动程序的通信 243

       11.4.5 设备的初始化和加载 244

       11.4.6 DMA的操作和宏定义 246

       11.4.7 audio设备文件的操作 248

       11.4.8 mixer设备文件的操作 260

       11.5 音频驱动程序的测试 262

       11.6 知识索引 262

       11.7 思考与练习 263

       第12章 IDE接口驱动程序 264

       本章目标 264

       12.1 IDE接口概述 264

       12.1.1 硬盘知识介绍 264

       12.1.2 IDE接口标准 267

       12.1.3 IDE接口的传输模式 269

       12.1.4 IDE接口寄存器 269

       12.2 IDE接口驱动程序的移植 271

       12.2.1 嵌入式Linux下IDE驱动程序接口 271

       12.2.2 嵌入式Linux下IDE驱动程序 272

       12.2.3 IDE硬盘的读/写操作 274

       12.3 IDE驱动程序测试 282

       12.3.1 磁盘文件系统简介 283

       12.3.2 IDE分区测试 283

       12.4 知识索引 285

       12.5 思考与练习 285

       第13章 闪存芯片的驱动程序 286

       本章目标 286

       13.1 闪存芯片概述 286

       13.1.1 闪存芯片的物理特性 286

       13.1.2 嵌入式文件系统概述 289

       13.1.3 MTD体系介绍 289

       13.1.4 Flash专有名词 291

       13.2 NAND Flash 291

       13.2.1 NAND Flash的结构 291

       13.2.2 NAND Flash的操作 292

       13.2.3 NAND Flash控制器 294

       13.2.4 NAND Flash的时序 296

       13.2.5 NAND Flash的驱动程序实例 297

       13.3 NOR Flash 301

       13.3.1 NOR Flash的结构 301

       13.3.2 NOR Flash的操作 302

       13.3.3 NOR Flash的驱动程序实例 303

       13.4 基于闪存的文件系统 307

       13.5 知识索引 309

       13.6 思考与练习 310

       第14章 USB 设备驱动程序 311

       本章目标 311

       14.1 USB接口概述 311

       14.1.1 USB系统 311

       14.1.2 USB的电气特性 312

       14.1.3 USB总线的拓扑结构 313

       14.1.4 USB的通信协议 313

       14.2 嵌入式系统中USB的使用 315

       14.2.1 OHCI概述 315

       14.2.2 Host接口硬件设计 316

       14.3 嵌入式系统中USB设备的驱动程序设计 316

       14.3.1

       嵌入式驱动开发需要学以下:

       一:C语言

       嵌入式Linux工程师的学习需要具备一定的C语言基础,C语言是嵌入式领域最重要也是最主要的编程语言,通过大量编程实例重点理解C语言的基础编程以及高级编程知识。包括:基本数据类型、数组、指针、结构体、链表、文件操作、队列、栈等。

       二:Linux基础

       Linux操作系统的概念、安装方法,详细了解Linux下的目录结构、基本命令、编辑器VI ,编译器GCC,调试器GDB和 Make 项目管理工具, Shell Makefile脚本编写等知识,嵌入式开发环境的搭建。

       三:Linux系统编程

       重点学习标准I/O库,Linux多任务编程中的多进程和多线程,以及进程间通信(pipe、FIFO、消息队列、共享内存、signal、信号量等),同步与互斥对共享资源访问控制等重要知识,主要提升对Linux应用开发的理解和代码调试的能力。

       四:Linux网络编程

       计算机网络在嵌入式Linux系统应用开发过程中使用非常广泛,通过Linux网络发展、TCP/IP协议、socket编程、TCP网络编程、UDP网络编程、Web编程开发等方面入手,全面了解Linux网络应用程序开发。

       重点学习网络编程相关API,熟练掌握TCP协议服务器的编程方法和并发服务器的实现,了解HTTP协议及其实现方法,熟悉UDP广播、多播的原理及编程方法,掌握混合C/S架构网络通信系统的设计,熟悉HTML,Javascript等Web编程技术及实现方法。

       五:数据结构与算法

       数据结构及算法在嵌入式底层驱动、通信协议、及各种引擎开发中会得到大量应用,对其掌握的好坏直接影响程序的效率、简洁及健壮性。

       此阶段的学习要重点理解数据结构与算法的基础内容,包括顺序表、链表、队列、栈、树、图、哈希表、各种查找排序算法等应用及其C语言实现过程。

       六:C++ 、QT

       C++是Linux应用开发主要语言之一,本阶段重点掌握面向对象编程的基本思想以及C++的重要内容。图形界面编程是嵌入式开发中非常重要的一个环节。

       由于QT具有跨平台、面向对象、丰富API、支持2D/3D渲染、支持XML、多国语等强大功能,在嵌入式领域的GUI开发中得到了广范的应用,在本阶段通过基于QT图形库的学习使学员可以熟练编写GUI程序,并移植QT应用程序到Cortex-A8平台。

       包括IDE使用、QT部件及布局管理器、信息与槽机制的应用、鼠标、键盘及绘图事件处理及文件处理的应用。

       好了,今天关于“嵌入式设备驱动程序开发流程”的话题就到这里了。希望大家能够通过我的讲解对“嵌入式设备驱动程序开发流程”有更全面、深入的了解,并且能够在今后的生活中更好地运用所学知识。

热门文章