ARM作为一种嵌入式系统处理器,以高性能、低功耗、低成本等优点占领了大部分市场。目前最为流行的当属ARM7和ARM9两个系列。随着人们对系统功能提出了更高的要求,ARM7在高端应用中已经显得力不从心,性能更加强劲的ARM9处理器逐渐占据了高端产品市场。 本书以ARM9处理器和Linux操作系统为平台,全面介绍了嵌入式系统开发的一般过程,并结合深圳优龙公司的开发板,详细讲述了嵌入式Linux系统下的设备驱动程序开发方法。 本书是基于ARM+Linux嵌入式系统开发的一本实用指导书籍,介绍了嵌入式系统开发的一些概念及开发的过程,本书可作为嵌入式系统开发与应用技术人员的参考书,也可作为Linux设备驱动开发人员的参考书。内容实用易懂,适合从事嵌入式系统开发的技术人员和高校相关专业的师生阅读。
第1章 嵌入式系统基础
1. 1 嵌入式系统简介
1. 1. 1 嵌入式系统定义
1. 1. 2 嵌入式系统与PC
1. 1. 3 嵌入式系统的特点
1. 2 嵌入式系统的发展
1. 2. 1 嵌入式系统现状
1. 2. 2 嵌入式系统发展趋势
1. 3 典型的嵌入式操作系统
1. 3. 1 Linux
1. 3. 2 uC/OS
1. 3. 3 WindowsCE
1. 3. 4 VxWorks
1. 3. 5 PalmOS
1. 3. 6 QNX
1. 4 嵌入式系统选型
小结
第2章 基于ARM9处理器的硬件开发平台
2. 1 ARM处理器简介
2. 1. 1 ARM公司简介
2. 1. 2 ARM微处理器核
2. 2 ARM9微处理器简介
2. 2. 1 与ARM7处理器的比较
2. 2. 2 三星S3C2410X处理器详解
小结
第3章 调试嵌入式系统程序
3. 1 嵌入式系统调试方法
3. 1. 1 实时在线仿真
3. 1. 2 模拟调试
3. 1. 3 软件调试
3. 1. 4 BDM/JTAG调试
3. 2 ARM仿真器
3. 2. 1 techorICETMARM仿真器
3. 2. 2 ARM仿真器工作原理
3. 2. 3 ARM仿真器的系统功能层次
3. 2. 4 使用仿真器和ADS Debugger调试ARM开发板
3. 3 JTAG接口
3. 3. 1 JTAG引脚定义
3. 3. 2 通过JTAG烧写Flash
3. 3. 3 烧写Flash技术内幕
小结
第4章 创建嵌入式系统开发环境
4. 1 嵌入式Linux的开发环境
4. 2 Cygwin
4. 3 交叉编译的预备知识
4. 3. 1 Make命令和Makefile文件
4. 3. 2 binutils工具包
4. 3. 3 gcc编译器
4. 3. 4 glibc库
4. 3. 5 gdb调试工具
4. 4 交叉编译
4. 4. 1 创建编译环境
4. 4. 2 创建binutils
4. 4. 3 创建gcc
4. 4. 4 创建glibc
4. 4. 5 创建gdb
4. 4. 6 第二次创建gcc
4. 4. 7 第二次创建glibc
4. 4. 8 成果
小结
第5章 Bootloader
5. 1 嵌入式系统的引导代码
5. 1. 1 初识Bootloader
5. 1. 2 Bootloader的启动流程
5. 2 Bootloader之vivi
5. 2. 1 vivi简介
5. 2. 2 vivi的配置与编译
5. 2. 3 vivi代码导读
5. 3 Bootloader之U-Boot
5. 3. 1 U-Boot代码结构分析
5. 3. 2 编译U-Boot代码
5. 3. 3 U-Boot代码导读
5. 3. 4 U-Boot命令
小结
第6章 Linux系统在ARM平台的移植
6. 1 移植的概念
6. 2 Linux内核结构
6. 3 Linux操作系统移植
6. 3. 1 根目录
6. 3. 2 arch目录
6. 3. 3 arch/arm/boot目录
6. 3. 4 arch/arm/def-configs目录
6. 3. 5 arch/arm/kernel目录
6. 3. 6 arch/arm/mm目录
6. 3. 7 arch/arm/mach-s3c2410目录
6. 4 编译Linux内核
小结
第7章 Linux设备驱动程序开发
7. 1 设备驱动概述
7. 1. 1 设备驱动和文件系统的关系
7. 1. 2 设备类型分类
7. 2 设备驱动基础
7. 2. 1 设备驱动中关键数据结构
7. 2. 2 设备驱动开发中的基本函数
7. 2. 3 驱动程序的设备号
7. 2. 4 设备入口点
7. 2. 5 /proc文件系统
7. 3 设备驱动模块化编程
7. 3. 1 内核空间和用户空间
7. 3. 2 GPIO字符设备驱动实例
7. 4 PCI总线
7. 4. 1 PCI系统体系结构
7. 4. 2 PCI地址空间
7. 4. 3 PCI设备驱动开发实例
小结
第8章 网络设备驱动程序开发
8. 1 网络设备驱动程序简介
8. 1. 1 device数据结构
8. 1. 2 sk_buff数据结构
8. 1. 3 内核的驱动程序接口
8. 2 以太网控制器CS8900A
8. 3 网络设备驱动程序实例
8. 3. 1 初始化函数
8. 3. 2 打开函数
8. 3. 3 关闭函数
8. 3. 4 发送函数
8. 3. 5 接收函数
8. 3. 6 中断处理函数
小结
第9章 USB驱动程序开发
9. 1 USB驱动程序简介
9. 1. 1 USB背景知识
9. 1. 2 Linux内核对USB规范的支持
9. 1. 3 OHCI简介
9. 2 Linux下USB系统文件结点
9. 3 USB主机驱动结构
9. 3. 1 USB数据传输时序
9. 3. 2 USB设备连接/断开时序
9. 4 主要数据结构及接口函数
9. 4. 1 数据传输管道
9. 4. 2 统一的USB数据传输块
9. 4. 3 USBD数据描述
9. 4. 4 USBD与HCD驱动程序接口
9. 4. 5 USBD层的设备管理
9. 4. 6 设备类驱动与USBD接口
9. 5 USBD文件系统接口
9. 5. 1 设备驱动程序访问
9. 5. 2 设备拓扑访问
9. 5. 3 设备信息访问
9. 6 设备类驱动与文件系统接口
9. 7 USBHUB驱动程序
9. 7. 1 HUB驱动初始化
9. 7. 2 HUBProbe相关函数
9. 8 OHCIHCD实现
9. 8. 1 OHCI驱动初始化
9. 8. 2 与USBD连接
9. 8. 3 OHCI根HUB
9. 9 扫描仪设备驱动程序
9. 9. 1 USBD接口
9. 9. 2 文件系统接口
9. 10 USB主机驱动在S3C2410X平台的实现
9. 10. 1 USB主机控制器简介
9. 10. 2 驱动程序的移植
小结
第10章 图形用户接口
10. 1 嵌入式系统中的GUI简介
10. 1. 1 MicroWindows
10. 1. 2 MiniGUl
10. 1. 3 Qt/Embedded
10. 2 MiniGUI编程
10. 2. 1 MiniGUI移植
10. 2. 2 MiniGUI编程
10. 3 初识Qt/Embedded
10. 3. 1 Qt介绍
10. 3. 2 系统要求
10. 3. 3 Qt的架构
10. 4 Qt/Embedded嵌入式图形开发基础
10. 4. 1 建立Qt/Embedded开发环境
10. 4. 2 认识Qt/Embedded开发环境
10. 4. 3 窗体
10. 4. 4 对话框
10. 4. 5 外形与感觉
10. 4. 6 国际化
10. 5 Qt/Embedded实战演练
10. 5. 1 安装Qt/Embedded工具开发包
10. 5. 2 交叉编译Qt/Embedded库
10. 5. 3 Hello,World
10. 5. 4 发布Qt/Embeded程序到目标板
10. 5. 5 添加一个Qt/Embedded应用到QPE
小结
第11章 系统设计开发
11. 1 概述
11. 2 硬件功能的实现
11. 2. 1 功能定义
11. 2. 2 原理图设计
11. 2. 3 PCB设计
11. 2. 4 硬件调试
11. 3 软件功能的实现
11. 3. 1 嵌入式文件系统
11. 3. 2 MTD简介
11. 3. 3 RAMDISK
11. 3. 4 Busybox
11. 3. 5 系统初始化
小结
参考文献
嵌入式系统开发已经进入32位时代, 在当前数字信息技术和网络技术高速发展的后PC时代, 嵌入式系统已经广泛地渗透到科学研究. 工程设计. 军事技术. 各类产业和商业文化艺术. 娱乐业以及人们的日常生活等方方面面中. 随着国内外嵌入式产品的进一步开发和推广, 嵌入式技术越来越和人们的生活紧密相关.
目前, 嵌入式系统的数量大. 种类多, 想躲避嵌入式系统的发展潮流是不可能的. 虽然嵌入式市场的增长主要是由于嵌入式系统的应用增多, 但不可小视微处理器的高速发展. 我们知道, ARM7系列微处理器的典型处理速度为0. 9MIPS/MHz, 常见的ARM7芯片系统主时钟为20~133MHz, ARM9系列微处理器的典型处理速度为1. 1MIPS/MHz, 常见的ARM9的系统主时钟频率为100~233MHz. 面对要求越来越高的消费群体, 或者为满足更高端应用的需要, 使用高性能的处理器已成为必然趋势. ARM7处理器已经无法满足智能手机等应用的需求.
本书以频率高达200MHz的ARM9处理器为平台, 介绍了嵌入式系统开发的各个主要环节. 本书没有过多地讲述原理, 而是从代码入手, 以分析的角度来学习嵌入式开发的各种技术. 每一章内容都独立成为一个主题, 较全面地向读者展现了嵌入式系统开发的全部过程.
本书的组织结构
第1章和第2章为基础部分, 介绍了嵌入式系统及ARM9处理器的一些知识. 第1章讲述嵌入式系统的基础知识, 包括嵌入式系统发展的现状和未来的发展趋势, 介绍了目前最流行的几种嵌入式操作系统, 以及如何进行嵌入式系统的选型. 第2章介绍了本书使用的硬件平台, 通过本章的学习, 读者应该对本书使用的ARM9处理器有一定的了解, 为后面章节的学习打下基础.
第3章介绍了嵌入式系统开发中常用的几种调试方法. 以sif2410程序为例, 介绍如何编写程序以支持Flash烧写.
第4章介绍了如何设置嵌入式系统开发的环境及如何进行交叉编译. 通过对本章的学习, 读者就可以开始嵌入式系统的开发.
第5章为嵌入式系统开发的第一步, 介绍了Bootloader的概念, 分析了vivi和U-boot两种Bootloader代码. 通过本章的学习, 读者应该掌握如何编写Bootloader. 建议读者阅读本章内容以前, 先熟悉ARM汇编语言.
第6章介绍了移植的概念, 并针对ARM+Linux系统进行了具体的分析. 尽管本章只谈到了Linux操作系统的移植方法, 但通过本章的学习, 读者能够掌握系统移植的关键步骤和思路, 以后在移植uC/OS及uCLinux等系统时, 也能找到下手点.
第7~10章重点介绍了Linux系统编程. 即使读者使用的不是ARM平台, 仍然可以通过这几章内容熟悉Linux系统的程序开发, 包括设备驱动开发. GUI开发的一些知识.
第7章介绍Linux系统设备驱动程序开发的方法, 并列举了两个实例加深理解. 通过本章的学习, 读者应该能掌握编写PCI设备驱动程序的能力.
第8章主要讲述网络设备驱动, 包括网络设备驱动体系结构. 主要的数据结构(sk_buff和net device)以及接口函数等. 通过本章的学习, 读者应该能掌握编写网卡驱动程序的能力.
第9章主要讲述USB设备驱动, 包括USB设备驱动体系结构. 主要的数据结构以及接口函数等. 结合开发板的USB芯片, 说明了USB驱动程序的实现方法.
第10章介绍图形用户接口的内容. 随着掌上设备的飞速发展, 友好的人机界面也成为开发中的重点. 本章介绍了几种流行的GUI, 重点介绍了QT的编程方法. 通过本章的学习, 读者应该能掌握编写MiniGUI和QT程序的能力.
第11章简单地介绍了嵌入式系统中的硬件设计, 之后从开发一个项目的角度描述了嵌入式系统的软件设计过程, 包括文件系统及固化等一些内容.
读者对象
本书是一本介绍嵌入式系统开发的书籍, 同时也介绍了嵌入式Linux驱动程序开发的内容. 本书适合下列人员阅读:
●想学习或者刚刚进入嵌入式系统领域的开发人员.
●在非X86平台上工作, 想学习ARM处理器的开发人员.
●熟悉Windows的WDM驱动开发, 但想转到Linux系统下的驱动程序开发人员.
●对嵌入式系统或者Linux系统非常有兴趣的人员.
尽管本书面向初级嵌入式系统开发人员, 但读者需要熟悉C和汇编语言(包括ARM汇编语言), 至少要能读懂书中提到的代码, 还要熟悉一些Linux的基本命令. 如果读者对Linux内核代码比较熟悉, 那么读本书的代码会更加容易. 如果之前没有接触过Linux, 那么最好先阅读一些Linux入门的书.
本书相关软件
本书提到的大部分软件可以从互联网免费获得, 比如binutils. gcc. glibc. gdb等都是GNU软件.
Linux内核可以在www. kernel. org及其镜像下载.
相关的硬件芯片手册可以从芯片提供商处获得.
致谢
有太多的人对本书的出版做出了巨大贡献, 在此对他们表示衷心的感谢!
首先要感谢的是我最敬爱的父母, 这本书首先要送给他们.
其次要感谢深圳市优龙科技有限公司和深圳市技创科技有限公司, 他们为本书的完成创造了非常完美的测试环境. 优龙科技有限公司提供了ARM9平台, 技创科技提供了ARM仿真器. 同时, 书中第3章和第10章的部分内容也是由他们提供的.
全书由孙天泽统稿并组织完成. 没有下面一些朋友的帮助, 本书也不会完成. 在此我要对他们表示衷心的感谢, 他们是:袁文菊. 张海峰. 易松华. 肖距雄. 唐坤勇.
由于篇幅所限. 时间仓促, 加之作者的编写水平有限, 书中的不妥之处在所难免, 恳请读者批评指正. 任何批评和建议请发到unix1998@sina. com, 以便共同提高.
编著者
2004年11月
无封面