首 页服务网点企业文化解决方案致远电子人才招聘联系我们技术论坛网站更新通知大学老师登记 ?
 NXP 32位ARM微控制器系列
LPC2000系列ARM
LH7(原夏普)系列ARM
ARM系列开发平台
ARM嵌入式系统教学
RealView MDK开发套件
MiniARM嵌入式工控模块
ARM嵌入式工控机
邮购价(1)
 Luminary Micro半导体系列
Stellaris系列ARM
经典配套外围器件
配套开发工具
应用设计
邮购价(2)
 NXP 8位单片机系列
LPC700系列单片机
LPC700配套开发工具
LPC900系列单片机
LPC900配套开发工具
80C51系列单片机
应用设计
邮购价(3)
 Actel FPGA系列
Fusion系列
ProASIC3系列
IGLOO系列
配套开发工具
邮购价(4)
 RAMTRON半导体
FRAM铁电简介
串行FRAM
并行FRAM
处理器外围电路
Versa 8051系列MCU
状态保持器
配套开发工具
邮购价(5)
 热门外围器件系列
CAN-bus器件
USB-bus器件
I2C-bus器件
NXP UART系列器件
LCD驱动器
数码管显示与键盘管理芯片
ESD保护器件
智能卡读写芯片
智能卡读写模块(Mifare)
语音模块
电源模块(DC-DC)
邮购价(6)
 NXP 汽车电子系列
汽车网络
 CATALYST 半导体系列
复位监控器件
内置E2PROM存储器的监控电路
串行E2PROM
可编程数字电位器
LED驱动器
LDO电源管理器件
应用设计
 Exar(原Sipex)半导体系列
选型指南
DC / DC升压型稳压器
DC / DC降压型稳压器
Exar UART系列器件
LDO电源管理器件
电源Blox组件
复位监控器件
USB电源控制开关
多协议接口器件
RS232接口器件
RS485接口器件
 Keil C51软件
Keil C51软件
 嵌入式系统产品系列
逻辑分析仪
USB-bus分析仪
CAN-bus分析仪
编程器
仿真器
80C51系列开发平台
FPGA系列开发平台
 其他产品
OEM/ODM产品
邮购价(7)
 工业通讯产品系列
CAN-bus总线产品
DeveiceNet网络产品
EtherNet网络产品
无线通讯系列
 智能楼宇/ODM/OEM
Mifare读卡模块
门禁控制系统
协议转换器
门禁考勤系统
读卡器/发卡器
门禁/考勤管理系统




ARM嵌入式Linux系统构建与驱动开发范例


(点击图片可放大)
ARM嵌入式Linux系统构建与驱动开发范例
作者:周立功 陈明计 陈渝 著
定价:38元
书号:7-81077-749-1
出版日期:200601
开本:787×960 1/16开
字数:566千字
购买联系: 各地书店 网上购书
内容简介
     本书介绍μClinux内核编程的一个方面——使用内核模块编写设备驱动程序。主要内容包括: 介绍如何建立基于ARM7的交叉开发环境以及如何向ARM7芯片上移植μClinux;分析μClinux上一个已在ARM7上成功运行的最简单的内核模块;介绍μClinux的字符设备驱动程序、块设备驱动程序和网络设备驱动程序的编写、编译及使用,这些范例均在ARM7平台编译和使用,但可以方便地移植到其他平台。
    本书通俗易懂,是一本面向初学者的μClinux内核编程图书,对资深μClinux内核编程人员也有参考价值。可作为高等院校相关专业师生以及从事嵌入式系统应用开发工程师的参考资料。
前    言


简洁就是美

     研究开源软件的热潮已经遍及神州大地,作为开源软件的重头戏Linux自然成为大家的研究重点,而其嵌入式分支μClinux也备受关注。对于大多数开源软件来说,由于开发者不能从中获利,因此造成大多数开源项目缺少文档。同样,多人协作开发的Linux也具有这个特点,即缺少“官方”文档。对于其他非官方写作的文档、资料等,由于其作者本身已经是高手,他们编写的资料对已入门者具有重要的参考价值,所以只可作为“手册”来使用。不过,这些资料大多是分析内核的,对于应用涉及不多。作为Linux的分支μClinux也继承了这些特点。
     对于μClinux的应用来说,主要有3方面: 编写应用软件、编写设备驱动程序和移植μClinux。
     因为Linux和μClinux的应用程序编程接口与Unix兼容,所以这方面的资料较多,也比较容易入门。而移植μClinux由专业人员完成,一般的应用工程师接触不到。对于设备驱动程序来说,尽管它在Linux和μClinux的源代码中比例最大,但仍不能包括所有设备驱动程序。在一个应用中,这些(还不存在的)设备驱动程序与应用密切相关,只能由应用工程师完成,至少是部分完成。即使有现成的设备驱动程序,也未必适合这个应用,也需要重写。
     编写驱动程序是如此重要,但针对初学者的资料却很少,大多数读者对于编写驱动程序始终没有清晰的脉络。可以想象,这样编写的程序会存在多少隐患。笔者针对这种情况,通过阅读大量的资料和源码,斧去大量的细枝繁叶,使其脉络清晰,并设计多个实际的设备驱动程序作为例子,便成此书。
     希望读者在阅读本书后,由衷地说:“编写μClinux设备驱动程序原来是如此简单!”

     本书的各章节安排如下:
    第1章是μClinux内核简介。本章主要讲述了μClinux和Linux的渊源及差别,并且对μClinux的开发环境、如何编译μClinux内核及其建立文件系统进行了详细的描述。
    第2章是使用GNU Tools建立μClinux开发环境。本章主要介绍了在嵌入式Linux开发过程中所用到的GNU工具。
    第3章是移植μClinux到LPC2200实例。本章以LPC2200为例,简单地介绍了如何把μClinux移植到一个新系统中。
     第4章是μClinux设备驱动程序概述。本章首先介绍了Linux(μClinux)设备驱动程序相关知识,包括简单的使用;然后主要介绍了一个最简单的设备驱动程序,包括源码分析和Makefile文件的编写和分析。
     第5章是字符设备驱动程序初步。本章首先介绍了Linux(μClinux)字符设备驱动程序的相关概念;然后主要介绍了一个最简单的字符设备驱动程序,主要包括源码分析和编译使用;最后介绍程序员如何使用字符设备。
     第6~10章是5个字符设备驱动实例。这5章分别以GPIO、PWM、A/D、SPI和I2C等硬件为例,通过分析这些设备驱动程序源码,详细介绍了编写字符设备需要了解的一些基本知识及设计思想。
     第11章是块设备驱动程序初步。本章首先介绍了Linux(μClinux)块设备驱动程序的相关概念;然后主要介绍了一个最简单的块设备驱动程序,主要包括源码分析和编译使用;最后介绍如何使用块设备。
     第12章是简单的块设备编写范例。本章以NAND FLASH K9f2808为例介绍了实际的Linux(μClinux)块设备驱动程序的相关知识。首先简单介绍这个驱动,然后对源码进行分析。
     第13章是基于ZLG/FS驱动程序的通用块设备驱动程序。本章以一个通用块设备驱动程序为例介绍了实际的Linux(μClinux)块设备驱动程序的相关知识。首先介绍这个驱动的使用方法,然后对源码进行分析。
     第14章是转换ZLG/FS V1.10驱动为μClinux驱动。本章是第13章的延续,主要介绍如何把ZLG/FS V1.10的驱动转换成μClinux的驱动程序。
     第15章是网络设备驱动程序初步。本章主要介绍了Linux(μClinux)网络驱动程序的一般编写方法和相关知识,包括源码分析和编译使用。
     第16和17章是2个网络设备驱动实例。这2章分别以RTL8019和DM9000等硬件为例,通过分析这些设备驱动程序源码,详细介绍了编写网络设备需要了解的一些基本知识及设计思想。

     本书是面向初学者的入门书籍,不可能也没有必要介绍编写设备驱动程序的各个方面。如果读者需要深入学习,可参考本书参考文献中列出的资料及其他相关书籍和源码。
    本书第1~3章由清华大学计算机系陈渝博士及其学生康烁、杨坚编写,其他各章主要由陈明计编写。另外,陈锡炳、黄邵斌、甘达、周立山、郑明远等参与了部分具体工作。全书由周立功负责规划、统稿与审核。
    本书介绍的设备驱动程序均由广州周立功单片机发展有限公司设计,是基于μClinux V2.4.x版本的,均在其出品的开发套件上测试通过。软件作者会尽力保证软件的正确性,但限于作者的理论水平和经验,本书及软件中难免有疏忽的地方。因为软件的发展时间不长,所以不可能十分完善。不过,软件作者会不断地升级软件,力求软件越来越完善。
     感谢北京航空航天大学出版社的大力支持,他们为规划本书付出了很大的心血。与此同时,也感谢清华大学邵贝贝教授的帮助。如果没有他们的努力,我想这项工作很难及时完成。

          周立功
          2005年10月26日

目    录

第1章 μClinux内核简介
1.1 μClinux简介1
1.2 μClinux内核与传统Linux内核的比较2
1.3 μClinux运行条件5
1.4 μClinux的目录结构5
1.5 μClinux的开发流程6
1.5.1 编译μClinux内核6
1.5.2 创建文件系统8
本章小结10

第2章 使用GNU Tools建立μClinux开发环境
2.1 GNU Tools简介11
2.2 GCC编译器13
2.2.1 GCC使用示例14
2.2.2 编译内核时使用的编译选项20
2.3 binutils二进制工具集21
2.3.1 ar软件22
2.3.2 nm软件24
2.3.3 objcopy软件27
2.3.4 objdump软件29
2.3.5 readelf软件32
2.4 ld链接器33
2.4.1 ld选项34
2.4.2 链接描述文件介绍35
2.4.3 链接描述文件的语法36
2.4.4 链接描述文件例子39
2.5 make介绍42
2.5.1 GNU make简介42
2.5.2 Makefile及其语法43
2.5.3 μClinuxdist2.4中的Makefile分析52
2.6 GDB调试器58
2.6.1 GDB简介58
2.6.2 GDB调试程序示例59
2.6.3 gdbserver介绍62
2.7 GNU Tools的制作和安装63
2.7.1 从源码制作交叉编译环境63
2.7.2 安装二进制的交叉工具链armelf工具63
2.8 使用GNU Tools编译μClinux内核和应用程序64
2.8.1 使用GNU Tools编译μClinux内核64
2.8.2 使用GNU Tools在μClinux中编译应用程序68
本章小结70

第3章 移植μClinux到LPC2200实例
3.1 选择开发环境71
3.2 移植内核71
3.2.1 增加体系架构和机型相关的代码72
3.2.2 添加中断系统74
3.2.3 增加其他代码83
3.2.4 修改Makefile和配置菜单95
3.3 移植驱动程序98
3.3.1 时钟驱动程序的移植98
3.3.2 串口驱动程序的移植100
本章小结101

第4章 μClinux设备驱动程序概述

4.1 设备驱动程序基础知识102
4.1.1 驱动程序分类102
4.1.2 加载和删除驱动程序103
4.2 最简单的内核模块104
4.2.1 内核模块的概念104
4.2.2 编写内核模块104
4.2.3 关于内核模块初始化(加载)函数106
4.2.4 关于内核模块清除(卸载)函数106
4.2.5 关于printk()函数106
4.3 编写Makefile文件107
4.3.1 Makefile文件整体介绍107
4.3.2 Makefile文件中的变量108
4.3.3 Makefile文件中的规则109
本章小结111

第5章 字符设备驱动程序初步
5.1 几个概念112
5.1.1 关于主设备号和从设备号112
5.1.2 关于设备节点、节点文件和设备文件112
5.2 最简单的字符设备驱动程序113
5.2.1 驱动程序代码113
5.2.2 驱动程序的初始化函数116
5.2.3 驱动程序的清除函数116
5.2.4 保存设备信息的结构体117
5.2.5 关于file结构122
5.2.6 内核空间与用户空间交换数据125
5.2.7 内核空间与I/O空间交换数据126
5.2.8 ioctl()方法的编写127
5.2.9 一些宏定义130
5.2.10 关于头文件130
5.2.11 其他说明131
5.3 使用字符设备驱动程序131
5.3.1 建立设备文件131
5.3.2 加载驱动程序131
5.3.3 接口函数131
5.3.4 示例代码137
5.3.5 编写Makefile文件138
本章小结139

第6章 GPIO(字符设备)驱动程序编写范例
6.1 在应用程序中使用GPIO驱动程序140
6.1.1 建立设备文件140
6.1.2 可使用的函数140
6.1.3 提供给应用程序的头文件141
6.1.4 设置GPIO口数据传输方向142
6.1.5 让GPIO口输出指定电平144
6.1.6 读GPIO口输出电平146
6.1.7 读GPIO口引脚上的电平147
6.2 编译148
6.3 源码分析149
6.3.1 初始化函数149
6.3.2 清除函数150
6.3.3 open()方法150
6.3.4 release()方法151
6.3.5 ioctl()方法151
6.3.6 其他说明158
本章小结159

第7章 PWM(字符设备)驱动程序编写范例
7.1 在应用程序中使用PWM驱动程序160
7.1.1 建立设备文件160
7.1.2 可使用的函数161
7.1.3 提供给应用程序的头文件161
7.1.4 PWM总体控制163
7.1.5 允许某路PWM输出164
7.1.6 禁止某路PWM输出164
7.1.7 设置某路PWM高电平宽度165
7.2 编译166
7.3 源码分析167
7.3.1 为驱动程序增加中断服务程序167
7.3.2 关于临界区169
7.3.3 初始化函数170
7.3.4清除函数170
7.3.5 open()方法及中断处理171
7.3.6 release()方法172
7.3.7 ioctl()方法173
7.3.8 其他说明179
本章小结179

第8章 A/D(字符设备)驱动程序编写范例
8.1 在应用程序中使用A/D驱动程序180
8.1.1 建立设备文件180
8.1.2可使用的函数181
8.1.3 提供给应用程序的头文件181
8.1.4 设置A/D工作频率182
8.1.5 设置A/D转换精度182
8.1.6 读取A/D转换结果183
8.2 编译183
8.3 源码分析184
8.3.1 初始化函数184
8.3.2 清除函数185
8.3.3 open()方法186
8.3.4 release()方法187
8.3.5 ioctl()方法188
8.3.6 read()方法189
8.3.7 其他说明191
本章小结191

第9章 SPI(字符设备)驱动程序编写范例
9.1 在应用程序中使用SPI驱动程序192
9.1.1 建立设备文件192
9.1.2 使用SPI的特殊注意点193
9.1.3 可使用的函数193
9.1.4 提供给应用程序的头文件194
9.1.5 设置SPI分频值195
9.1.6 SPI时钟相位控制195
9.1.7 SPI时钟极性控制196
9.1.8 SPI数据传输顺序控制197
9.1.9 开始和结束SPI操作198
9.1.10 发送同时接收一字节数据198
9.1.11 写数据到SPI从器件199
9.1.12 从SPI从器件读数据199
9.2 编译200
9.3 源码分析201
9.3.1 初始化函数201
9.3.2 清除函数201
9.3.3 open()方法202
9.3.4 release()方法204
9.3.5 ioctl()方法205
9.3.6 write()方法209
9.3.7 read()方法211
9.3.8 其他说明212
本章小结212

第10章 I2C(字符设备)驱动程序编写范例
10.1 在应用程序中使用I2C总线驱动程序213
10.1.1 建立设备文件213
10.1.2 可使用的函数214
10.1.3 提供给应用程序的头文件214
10.1.4 设置I2C总线频率215
10.1.5 写数据到I2C从器件215
10.1.6 从I2C从器件读数据216
10.2 编译216
10.3 源码分析217
10.3.1 初始化函数217
10.3.2 清除函数218
10.3.3 open()方法218
10.3.4 release()方法220
10.3.5 I2C中断处理220
10.3.6 ioctl()方法223
10.3.7 write()方法225
10.3.8 read()方法226
10.3.9 其他说明227
本章小结227

第11章 块设备驱动程序初步
11.1 几个概念228
11.1.1 关于主设备号和从设备号228
11.1.2 关于设备节点、节点文件和设备文件228
11.2 最简单的块设备驱动程序229
11.2.1 驱动程序代码229
11.2.2 注册初始化函数和清除函数231
11.2.3 驱动程序的初始化函数232
11.2.4 驱动程序的清除函数232
11.2.5 保存设备信息的结构体233
11.2.6 一些宏定义238
11.2.7 关于头文件238
11.2.8 其他说明239
11.3 使用块设备239
11.3.1 建立设备文件239
11.3.2 加载驱动程序239
11.3.3 把块设备(的某个分区)映射到指定的目录240
11.3.4 取消目录映射240
11.3.5 卸载驱动程序240
本章小结240

第12章 简单的块设备编写范例
12.1 使用范例241
12.1.1 范例简介241
12.1.2 编译驱动程序241
12.1.3 使用驱动程序242
12.2 范例程序源码分析244
12.2.1 关于主设备号244
12.2.2 几个数据结构246
12.2.3 驱动程序的初始化函数246
12.2.4 驱动程序的清除函数247
12.2.5 open()方法248
12.2.6 release()方法250
12.2.7 ioctl()方法251
12.2.8 check_media_change()方法253
12.2.9 revalidate()方法253
12.2.10 关于数据传输254
12.2.11 其他说明260
本章小结260

第13章 基于ZLG/FS驱动程序的通用块设备驱动程序
13.1 背景知识261
13.1.1 驱动程序简介261
13.1.2 ZLG/FS简介261
13.2 ZLG/FS V1.10驱动程序使用指南263
13.2.1 接口函数263
13.2.2 参数263
13.3 使用范例266
13.3.1 编译驱动程序266
13.3.2 使用驱动程序267
13.4 范例程序源码分析269
13.4.1 块设备信息结构体270
13.4.2 注册ZLG/FS V1.10驱动程序271
13.4.3 注销ZLG/FS V1.10驱动程序271
13.4.4 关于分区设备272
13.4.5 检测分区273
13.4.6 驱动程序的初始化函数276
13.4.7 驱动程序的清除函数277
13.4.8 open()方法278
13.4.9 release()方法280
13.4.10 ioctl()方法282
13.4.11 check_media_change()方法284
13.4.12 revalidate()方法285
13.4.13 数据传输286
13.4.14 其他说明290
本章小结290

第14章 转换ZLG/FS V1.10驱动为μClinux驱动14.1 转换步骤291
14.2 转换实例之CF卡驱动295
14.3 转换实例之SD卡驱动297
14.4 转换实例之ZLG/FFS驱动299
14.5 模板源码分析302
14.5.1 驱动程序的初始化函数302
14.5.2 驱动程序的清除函数303
14.5.3 open()方法303
14.5.4 release()方法304
14.5.5 get_info()方法304
14.5.6 其他说明306
本章小结306

第15章 网络设备驱动程序初步
15.1 最简单的网络设备驱动程序307
15.1.1 驱动程序代码307
15.1.2 驱动程序的初始化函数310
15.1.3 驱动程序的清除函数311
15.1.4 保存设备信息的结构体311
15.1.5 数据接收与中断服务程序319
15.1.6 关于头文件321
15.1.7 其他说明321
15.2 使用网络设备驱动程序321
本章小结322

第16章 RTL8019驱动程序编写范例
16.1 硬件原理323
16.2 使用源代码325
16.3 源码分析326
16.3.1 初始化函数326
16.3.2清除函数327
16.3.3 init()方法327
16.3.4 open()方法329
16.3.5 stop()方法332
16.3.6 set_config()方法333
16.3.7 hard_start_xmit()方法333
16.3.8 set_mac_address()方法335
16.3.9 中断服务程序336
本章小结340

第17章 DM9000驱动程序编写范例
17.1 硬件原理341
17.2 使用源代码341
17.3 源码分析344
17.3.1 头文件DM9000.h344
17.3.2 底层硬件操作函数346
17.3.3 初始化函数348
17.3.4 清除函数349
17.3.5 init()方法349
17.3.6 open()方法351
17.3.7 stop()方法354
17.3.8 set_config()方法355
17.3.9 hard_start_xmit()方法356
17.3.10 set_mac_address()方法357
17.3.11 中断服务程序358
本章小结360

附录A 版权声明及许可协议

附录B SmartARM2200教学实验开发平台
B.1 产品概述363
B.2 产品目标364
B.3 产品特点364
B.4 产品组成368
B.5 硬件结构说明369
B.6 应用环境369
B.7 产品部件规格描述369

附录C MagicARM2200教学实验开发平台
C.1 产品概述370
C.2 产品目标371
C.3 产品特点371
C.4 产品组成376
C.5 硬件结构说明377
C.6 应用环境377
C.7 产品部件规格描述377

附录D MagicARM2200S教学实验开发平台
D.1 产品概述378
D.2 产品目标379
D.3 产品特点379
D.4 产品组成382
D.5 硬件结构说明384
D.6 应用环境384
D.7产品部件规格描述384

参考文献

 
 
    首 页 | 公司介绍 | 服务网点 | 解决方案 | 人才招聘 | 致远电子 | 客户服务 | 联系我们
版权所有 © 广州周立功单片机发展有限公司