火龙果·整理 子大⊙uml.org.cn 4.2内核移植的准备 .99 4.3内核移植 100 4.3.1内核配置 .100 4.3.l.1修改Makefile .100 4.3.1.2设置NAND Flash分区 101 4.3.1.3配置内核选项 .104 4.3.2内核编译 .108 4.3.2.1清除冗余文件 108 4.3.2.2编译内核映像和模块 108 4.3.2.3安装模块 109 4.3.3内核下载. 109 4.4建立LINUX根文件系统 110 4.4.1根文件系统的基本介绍. 110 4.4.1.1根文件系统的基本日录结构 .110 4.4.1.2常见的根文件系统 .111 4.4.13选择根文件系统 112 4.4.2建立根文件系统…。 …13 4.4.2.1 Cramfs工具包的使用. 113 4.2.2.2构建Cramfs根文件系统 .114 4.5本章小节 117 4.6常见问题 117 第二部分ARM LINUX设备驱动程序开发 119 第5章ARM LINUX驱动程序开发入门 .120 5.1嵌入式LINUX驱动程序介绍」 120 5.1.1驱动程序的作用 .120 5.1.2Limr设备驱动程序分类 121 5.2最简单的内核模块举例. .122 5.2.1编写Hello World模块. .122 5.2.2编写Hello World模块的Makefile 124 5.2.3加载和卸载Hello World模块 .125 5.3LNUX驱动程序开发要点. .125 5.3.1内存与1/0端口. 125 5.3.1.1内存… .126 5.3.1.2/0端口. 129 5.3.2并发控捌… 130 5.3.2.1自旋锁(Spinlocks) 5.3.2.2信号量(Semaphores) .133 5.3.3阻塞(B1 ocking.)与非阻塞(Nonblocking) …135 5.3.3.1阻塞(Blocking)与非阻塞(Nonblocking)操作 ..135 5.3.3.2异步通知(Asynchronous Notification) ..135 5.3.4中断处理… 136 5.3.4.1 Linux中断及其相关函数 .136 5.3.4.2ARM中断处理 137
4.2 内核移植的准备.................................................................................................................... 99 4.3 内核移植 ............................................................................................................................. 100 4.3.1 内核配置...................................................................................................................... 100 4.3.1.1 修改 Makefile ........................................................................................................................100 4.3.1.2 设置 NAND Flash 分区 .........................................................................................................101 4.3.1.3 配置内核选项........................................................................................................................104 4.3.2 内核编译...................................................................................................................... 108 4.3.2.1 清除冗余文件........................................................................................................................108 4.3.2.2 编译内核映像和模块 ............................................................................................................108 4.3.2.3 安装模块...............................................................................................................................109 4.3.3 内核下载....................................................................................................................... 109 4.4 建立 LINUX 根文件系统...................................................................................................... 110 4.4.1 根文件系统的基本介绍................................................................................................ 110 4.4.1.1 根文件系统的基本目录结构.................................................................................................110 4.4.1.2 常见的根文件系统................................................................................................................111 4.4.1.3 选择根文件系统....................................................................................................................112 4.4.2 建立根文件系统........................................................................................................... 113 4.4.2.1Cramfs 工具包的使用.............................................................................................................113 4.2.2.2 构建 Cramfs 根文件系统.......................................................................................................114 4.5 本章小节 ............................................................................................................................. 117 4.6 常见问题 ............................................................................................................................. 117 第二部分 ARM LINUX 设备驱动程序开发............................................................................... 119 第 5 章 ARM LINUX 驱动程序开发入门 ................................................................................... 120 5.1 嵌入式 LINUX 驱动程序介绍............................................................................................... 120 5.1.1 驱动程序的作用........................................................................................................... 120 5.1.2 Linux 设备驱动程序分类.............................................................................................. 121 5.2 最简单的内核模块举例....................................................................................................... 122 5.2.1 编写 Hello World 模块 ................................................................................................. 122 5.2.2 编写 Hello World 模块的 Makefile ................................................................................ 124 5.2.3 加载和卸载 Hello World 模块....................................................................................... 125 5.3 LINUX 驱动程序开发要点.................................................................................................... 125 5.3.1 内存与 I/O 端口........................................................................................................... 125 5.3.1.1 内存.......................................................................................................................................126 5.3.1.2 I/O 端口.................................................................................................................................129 5.3.2 并发控制....................................................................................................................... 130 5.3.2.1 自旋锁(Spinlocks).............................................................................................................131 5.3.2.2 信号量(Semaphores).........................................................................................................133 5.3.3 阻塞(Blocking)与非阻塞(Nonblocking)............................................................... 135 5.3.3.1 阻塞(Blocking)与非阻塞(Nonblocking)操作................................................................135 5.3.3.2 异步通知(Asynchronous Notification)...............................................................................135 5.3.4 中断处理....................................................................................................................... 136 5.3.4.1 Linux 中断及其相关函数 ......................................................................................................136 5.3.4.2 ARM 中断处理......................................................................................................................137
火龙果·整理 uml.org.cn 5.3.4.3一个Linux中断相关的实例. .139 5.3.5内核调试… 143 5.3.5.1准备内核调试环境 143 5.3.5.2KDB的基本用法. 144 5.4本章小结 146 5.5常见问题 .147 第6章字符设备驱动程序… .148 6.1字符设备驱动介绍. .148 6.1.1字符设备驱动相关的重要结构 .148 6.l.L.1file_operations(文件操作)结构 148 6.1.1.2le(文件)结构. .151 6.1.L.3 inode(节点)结构 l52 61.2主、次设备号. .154 6.12.1主、次设备号的内部表示 .155 6.1.2.2静态分配和释放主设备号 155 6.12.3动态分配主设备号. .156 6.2字符设备驱动开发实例 .157 6.2.1四线电阻式触摸屏原理 157 6.2.2S3C2410触摸屏工作原理 158 6.2.3S3C2410的ADC和触摸屏接口特殊寄存器 159 6.23.1ADC控制(ADCCON)寄存器 159 6.2.3.2ADC触摸屏控制(ADCTSC)寄存器 .160 6.2.3.3ADC开始延迟(ADCDLY)寄存器 .161 6.2.3.4ADC转化数据(ADCDAT0)寄存器 16l 6.2.3.5ADC转化数据(ADCDATI)寄存器.. .162 6.2.4触摸屏驱动概要设计… 162 6.2.4.1触摸屏硬件接口. .162 6.2.4.2触摸屏驱动程序流程设计 163 6.2.5触模屏驱动程序分析 164 6.2.5.1触摸屏设备初始化… 165 6.2.5.2触摸屏设备文件操作 168 6.2.5.30pen和release方法 .168 6.2.5.4read和poll方法. ..169 6.2.5.5触摸屏中断和ADC中断的实现 170 6.2.6配置和编译驱动程序 .172 6.2.7测试触摸屏驱动程序 173 6.2.8触摸屏的校准 .174 6.3本章小节 175 6.4常见问题 176 第7章块设备驱动程序。 .177 7.1块设备驱动介绍. 177 7.11块设备驱动相关的重要结构 .177 7.L.L.1block_device_operations(块设备操作)结构. 177
5.3.4.3 一个 Linux 中断相关的实例..................................................................................................139 5.3.5 内核调试...................................................................................................................... 143 5.3.5.1 准备内核调试环境................................................................................................................143 5.3.5.2 KDB 的基本用法...................................................................................................................144 5.4 本章小结 ............................................................................................................................. 146 5.5 常见问题 ............................................................................................................................. 147 第 6 章 字符设备驱动程序........................................................................................................... 148 6.1 字符设备驱动介绍.............................................................................................................. 148 6.1.1 字符设备驱动相关的重要结构..................................................................................... 148 6.1.1.1 file_operations(文件操作)结构..........................................................................................148 6.1.1.2 file(文件)结构...................................................................................................................151 6.1.1.3 inode(节点)结构 ...............................................................................................................152 6.1.2 主、次设备号............................................................................................................... 154 6.1.2.1 主、次设备号的内部表示.....................................................................................................155 6.1.2.2 静态分配和释放主设备号.....................................................................................................155 6.1.2.3 动态分配主设备号...............................................................................................................156 6.2 字符设备驱动开发实例...................................................................................................... 157 6.2.1 四线电阻式触摸屏原理................................................................................................ 157 6.2.2 S3C2410 触摸屏工作原理 ............................................................................................ 158 6.2.3 S3C2410 的 ADC 和触摸屏接口特殊寄存器................................................................ 159 6.2.3.1 ADC 控制(ADCCON)寄存器 ...........................................................................................159 6.2.3.2 ADC 触摸屏控制(ADCTSC)寄存器 ................................................................................160 6.2.3.3 ADC 开始延迟(ADCDLY)寄存器....................................................................................161 6.2.3.4 ADC 转化数据 (ADCDAT0) 寄存器...................................................................................161 6.2.3.5 ADC 转化数据(ADCDAT1)寄存器........................................................................................162 6.2.4 触摸屏驱动概要设计................................................................................................... 162 6.2.4.1 触摸屏硬件接口....................................................................................................................162 6.2.4.2 触摸屏驱动程序流程设计.....................................................................................................163 6.2.5 触摸屏驱动程序分析.................................................................................................... 164 6.2.5.1 触摸屏设备初始化................................................................................................................165 6.2.5.2 触摸屏设备文件操作 ............................................................................................................168 6.2.5.3 open 和 release 方法 ..............................................................................................................168 6.2.5.4 read 和 poll 方法....................................................................................................................169 6.2.5.5 触摸屏中断和 ADC 中断的实现..........................................................................................170 6.2.6 配置和编译驱动程序.................................................................................................... 172 6.2.7 测试触摸屏驱动程序.................................................................................................... 173 6.2.8 触摸屏的校准............................................................................................................... 174 6.3 本章小节 ............................................................................................................................. 175 6.4 常见问题 ............................................................................................................................. 176 第 7 章 块设备驱动程序 .............................................................................................................. 177 7.1 块设备驱动介绍.................................................................................................................. 177 7.1.1 块设备驱动相关的重要结构 ........................................................................................ 177 7.1.1.1block_device_operations(块设备操作)结构........................................................................177
火龙果·整理 大子天大euml.org.cn 7.1.L.2 gendisk结构 .178 7.1.l.3 request结构 180 7.1.2请求处理.… .182 7.1.2.1 request函数. .182 7.1.2.2 request函数实例 182 7.2块设备驱动开发实例. .183 7.2.1 MMC/SD介绍. .184 7.2.2S3C2410提供的SD1接口 …186 7.2.3SD1相关的寄存器 444 187 7.2.3.1SDI控制(SDICON)寄存器 188 7.2.3.2SDI波特率预定标(SDIPRE)寄存器。 188 7.2.3.3SDI命令参数(SDICARG)寄存器 188 7.2.3.4SDI命令控制(SDICCON)寄存器. .189 7.2.3.5SDI命令状态(SDICSTA)寄存器... 189 7.2.3.6SDI响应(SDIRSP)寄存器 189 7.2.3.7SDI数据/占用定时器(SDIDTIMER)寄存器 190 7.2.3.8SDI块大小(SDIBSIZE)寄存器. ..190 7.2.4 MMC/SD驱动概要设计 7.2.4.1MMC/SD与主机的接口连接 191 7.2.4.2MMC/SD驱动框架 191 7.2.4.3MMC驱动的核心设计 193 7.2.5MMC驱动程序分析 193 7.2.5.1MMC初始化. 193 7.2.5.2open和release方法… .195 7.2.5.3i0ctl方法. .196 7.2.5.4MMC驱动的request方法. 196 7.2.6S3C2410SD1接口驱动分析. 198 7.2.6.1SDI初始化.... 199 7.2.6.2SDI接口驱动方法 199 7.2.7配置和编译驱动程序 200 7.3本章小结 200 7.4常见问题 200 第8章网络设备驱动程序 …202 8.1网络设备驱动介绍 .202 8.1.1网络设备驱动相关的重要结构 202 8.l.l.lnet_device结构. .202 8.1.L.2 sk buff结构 .204 8.12常见的网络术语 205 8.1.2.1常见的网络协议 205 8.1.2.2以太网介绍. .206 8.2网络设备驱动开发实例.…。 .207 8.2.1CS8900A介绍. .207 8.2.1.1CS8900A的组成部分介绍 .207 8.2.1.2CS8900A的系统应用. .208
7.1.1.2 gendisk 结构..........................................................................................................................178 7.1.1.3 request 结构...........................................................................................................................180 7.1.2 请求处理....................................................................................................................... 182 7.1.2.1 request 函数...........................................................................................................................182 7.1.2.2 request 函数实例 ...................................................................................................................182 7.2 块设备驱动开发实例........................................................................................................... 183 7.2.1 MMC/SD 介绍............................................................................................................... 184 7.2.2 S3C2410 提供的 SDI 接口............................................................................................ 186 7.2.3 SDI 相关的寄存器........................................................................................................ 187 7.2.3.1 SDI 控制(SDICON)寄存器...............................................................................................188 7.2.3.2 SDI 波特率预定标(SDIPRE)寄存器.................................................................................188 7.2.3.3 SDI 命令参数(SDICARG)寄存器..........................................................................................188 7.2.3.4 SDI 命令控制(SDICCON)寄存器..........................................................................................189 7.2.3.5 SDI 命令状态(SDICSTA)寄存器...........................................................................................189 7.2.3.6 SDI 响应(SDIRSP)寄存器.....................................................................................................189 7.2.3.7 SDI 数据/占用定时器(SDIDTIMER)寄存器..........................................................................190 7.2.3.8 SDI 块大小(SDIBSIZE)寄存器..............................................................................................190 7.2.4 MMC/SD 驱动概要设计................................................................................................ 191 7.2.4.1 MMC/SD 与主机的接口连接................................................................................................191 7.2.4.2 MMC/SD 驱动框架...............................................................................................................191 7.2.4.3 MMC 驱动的核心设计..........................................................................................................193 7.2.5 MMC 驱动程序分析..................................................................................................... 193 7.2.5.1 MMC 初始化.........................................................................................................................193 7.2.5.2 open 和 release 方法 ..............................................................................................................195 7.2.5.3 ioctl 方法...............................................................................................................................196 7.2.5.4 MMC 驱动的 request 方法.....................................................................................................196 7.2.6 S3C2410 SDI 接口驱动分析 ......................................................................................... 198 7.2.6.1 SDI 初始化............................................................................................................................199 7.2.6.2 SDI 接口驱动方法.................................................................................................................199 7.2.7 配置和编译驱动程序.................................................................................................... 200 7.3 本章小结 ............................................................................................................................. 200 7.4 常见问题 ............................................................................................................................. 200 第 8 章 网络设备驱动程序........................................................................................................... 202 8.1 网络设备驱动介绍.............................................................................................................. 202 8.1.1 网络设备驱动相关的重要结构.................................................................................... 202 8.1.1.1 net_device 结构......................................................................................................................202 8.1.1.2 sk_buff 结构 ..........................................................................................................................204 8.1.2 常见的网络术语........................................................................................................... 205 8.1.2.1 常见的网络协议....................................................................................................................205 8.1.2.2 以太网介绍 ...........................................................................................................................206 8.2 网络设备驱动开发实例....................................................................................................... 207 8.2.1CS8900A 介绍................................................................................................................ 207 8.2.1.1CS8900A 的组成部分介绍.....................................................................................................207 8.2.1.2 CS8900A 的系统应用............................................................................................................208
火龙果·整理 大子大euml.org.cn 8.2.2CS8900A网卡驱动概要设计 209 8.2.2.1CS8900A网卡接口 209 8.22.2网络驱动程序的体系结构.… .209 8.2.2.3网络驱动程序的主要功能 210 8.2.3CS89004适配器驱动程序分析 .21 8.2.3.1初始化. 211 8.2.3.2open和stop方法 214 8.2.3.3数据发送 .216 8.2.3.4数据接收。 .217 8.3本章小结 220 8.4常见问题 220 第三部分QT GUI开发… .221 第9章QT概述. 222 9.1LINUX下GUI介绍 222 9.l1.1Limx桌面GUI系统 222 9.1.L.1 X Window系统. 223 9.1.1.2 GNOME/Gtk+KDE/Qt... .224 9.1.2嵌入式Lir下的GUI系统 ,226 9.2QT/X11介绍 227 9.2.1Qt的历史和Qt/X11的由来.… 227 9.2.2QX11的版权问题 228 9.2.3QtX11及Qt/Windows的系统架构图对比. 228 9.2.4Q1的特性简介 228 9.3 OTOPIA CORE介绍 229 9.3.1 Otopia CoreO/Embedded 229 9.3.2 Otopia Core的体系结构 230 9.3.2.1 Frame Buffer(帧缓)简介 .230 9.3.2.2 Qtopia Core的窗口系统. 231 9.4本章小结… 231 9.5常见问题 231 第10章QT/X11初步 .233 10.1QT/X11的安装 233 10.1.1QX11的下载及双重授权问题的说明 ,233 10.12QX1的安装详解 .234 10.2QT下的HELL0 WORLD.… .235 10.3温度转换的小例子。 237 10.3.1背景知识. 237 10.3.2Qit按钮 237 10.3.3摄氏温度的显示 ,241 10.3.4华氏温度的显示, 243 10.3.5华氏温度和摄氏温度之间的转换 ,247 10.3.6保存当前的数值 251
8.2.2CS8900A 网卡驱动概要设计......................................................................................... 209 8.2.2.1 CS8900A 网卡接口 ...............................................................................................................209 8.2.2.2 网络驱动程序的体系结构.....................................................................................................209 8.2.2.3 网络驱动程序的主要功能.....................................................................................................210 8.2.3 CS8900A 适配器驱动程序分析 .................................................................................... 211 8.2.3.1 初始化...................................................................................................................................211 8.2.3.2 open 和 stop 方法...................................................................................................................214 8.2.3.3 数据发送...............................................................................................................................216 8.2.3.4 数据接收...............................................................................................................................217 8.3 本章小结 ............................................................................................................................. 220 8.4 常见问题 ............................................................................................................................. 220 第三部分 QT GUI 开发............................................................................................................... 221 第 9 章 QT 概述........................................................................................................................... 222 9.1 LINUX 下 GUI 介绍.............................................................................................................. 222 9.1.1 Linux 桌面 GUI 系统 .................................................................................................... 222 9.1.1.1 X Window 系统 .....................................................................................................................223 9.1.1.2 GNOME/Gtk+和 KDE/Qt ......................................................................................................224 9.1.2 嵌入式 Linux 下的 GUI 系统....................................................................................... 226 9.2 QT/X11 介绍........................................................................................................................ 227 9.2.1 Qt 的历史和 Qt/X11 的由来.......................................................................................... 227 9.2.2 Qt/X11 的版权问题....................................................................................................... 228 9.2.3 Qt/X11 及 Qt/Windows 的系统架构图对比.................................................................... 228 9.2.4 Qt 的特性简介.............................................................................................................. 228 9.3 QTOPIA CORE 介绍............................................................................................................... 229 9.3.1 Qtopia Core 与 Qt/Embedded ........................................................................................ 229 9.3.2 Qtopia Core 的体系结构............................................................................................... 230 9.3.2.1 Frame Buffer(帧缓存)简介.....................................................................................................230 9.3.2.2 Qtopia Core 的窗口系统........................................................................................................231 9.4 本章小结............................................................................................................................. 231 9.5 常见问题 ............................................................................................................................. 231 第 10 章 QT/X11 初步.................................................................................................................. 233 10.1 QT/X11 的安装................................................................................................................... 233 10.1.1 Qt/X11 的下载及双重授权问题的说明....................................................................... 233 10.1.2 Qt/X11 的安装详解 ..................................................................................................... 234 10.2 QT 下的 HELLO WORLD ...................................................................................................... 235 10.3 温度转换的小例子............................................................................................................ 237 10.3.1 背景知识.................................................................................................................... 237 10.3.2 Quit 按钮..................................................................................................................... 237 10.3.3 摄氏温度的显示 ......................................................................................................... 241 10.3.4 华氏温度的显示 ........................................................................................................ 243 10.3.5 华氏温度和摄氏温度之间的转换.............................................................................. 247 10.3.6 保存当前的数值 ........................................................................................................ 251
.orgi.cn 火龙果·整理 10.4本章小结 256 10.5常见问题 257 第11章QT核心技术… .258 11.1信号(SIGNALS)和槽(SLOTS) .258 1L.1.1常见的GUⅢ组件通信方式 258 11.1.1.1回调函数 258 11.1.1.2面向对象的回调 .260 11.1.2Q1中的信号和槽Signals and Slots) .261 11.12.1信号和槽历史和所带来的优点 .261 11.1.2.2信号. 261 11.12.3槽 262 11.1.2.4信号和槽的效率… 262 11.1.3自定义信号和槽的小例子 .263 11.2QT对象模型 .266 1l.2.1元对象系统(Meta-Object System) …266 11.2.2信号和槽机制的实现. …272 1l.2.2.1用connection(0建立连接 272 11.2.2.2信号的发射和槽的执行 278 11.2.3元对象编译器m0c. 282 1l.2.3.1在Makefile中使用moc. 282 11.2.3.2m0c用法详解 282 11.2.3.3moc及信号和槽机制的局限性 283 11.3QT的窗口系统. 285 113.1窗口部件之间的树型结构… .285 1l.3.2窗口部件的布局管理(Lot) .288 11.4国际化。 291 11.4.1Q1国际化的基本步骤 291 11.4.1.1程序员的工作 291 11.4.1.2语言资源管理者和翻译工作者的工作 292 11.4.2动态改变语言的小例子… 292 11.4.3一些注意事项 ,298 11.5本章小结 .299 11.6常见问题. .299 第12章QTOPIA CORE .301 12.1 QTOPIA CORE的安装 301 12.2 FRAME BUFFER QVFB. 302 12.2.1 Frame Buffer 302 12.2.2编译qyb .304 12.2.3在gyfb上运行Otopia Core程序.. .305 #.DIGITALCLOCK-QWS-DISPLAY QVFB:0.. .306 12.3移植QT/X11程序到QTOPIA CORE中 307 12.4轻量级的窗口系统. .309
10.4 本章小结........................................................................................................................... 256 10.5 常见问题........................................................................................................................... 257 第 11 章 QT 核心技术.................................................................................................................. 258 11.1 信号(SIGNALS)和槽(SLOTS)................................................................................................ 258 11.1.1 常见的 GUI 组件通信方式 ........................................................................................ 258 11.1.1.1 回调函数.............................................................................................................................258 11.1.1.2 面向对象的回调.................................................................................................................260 11.1.2 Qt 中的信号和槽(Signals and Slots)............................................................................ 261 11.1.2.1 信号和槽历史和所带来的优点...........................................................................................261 11.1.2.2 信号....................................................................................................................................261 11.1.2.3 槽........................................................................................................................................262 11.1.2.4 信号和槽的效率.................................................................................................................262 11.1.3 自定义信号和槽的小例子.......................................................................................... 263 11.2 QT 对象模型....................................................................................................................... 266 11.2.1 元对象系统(Meta-Object System).......................................................................... 266 11.2.2 信号和槽机制的实现................................................................................................. 272 11.2.2.1 用 connection()建立连接.....................................................................................................272 11.2.2.2 信号的发射和槽的执行......................................................................................................278 11.2.3 元对象编译器 moc ..................................................................................................... 282 11.2.3.1 在 Makefile 中使用 moc......................................................................................................282 11.2.3.2 moc 用法详解......................................................................................................................282 11.2.3.3 moc 及信号和槽机制的局限性............................................................................................283 11.3 QT 的窗口系统................................................................................................................... 285 11.3.1 窗口部件之间的树型结构.......................................................................................... 285 11.3.2 窗口部件的布局管理(Layout)............................................................................... 288 11.4 国际化............................................................................................................................... 291 11.4.1 Qt 国际化的基本步骤................................................................................................. 291 11.4.1.1 程序员的工作.....................................................................................................................291 11.4.1.2 语言资源管理者和翻译工作者的工作................................................................................292 11.4.2 动态改变语言的小例子 ............................................................................................. 292 11.4.3 一些注意事项 ............................................................................................................ 298 11.5 本章小结........................................................................................................................... 299 11.6 常见问题........................................................................................................................... 299 第 12 章 QTOPIA CORE ............................................................................................................. 301 12.1 QTOPIA CORE 的安装.......................................................................................................... 301 12.2 FRAME BUFFER 和 QVFB...................................................................................................... 302 12.2.1 Frame Buffer ............................................................................................................... 302 12.2.2 编译 qvfb.................................................................................................................... 304 12.2.3 在 qvfb 上运行 Qtopia Core 程序............................................................................... 305 # ./ DIGITALCLOCK –QWS –DISPLAY QVFB:0 ..................................................................... 306 12.3 移植 QT/X11 程序到 QTOPIA CORE 中............................................................................... 307 12.4 轻量级的窗口系统 ............................................................................................................ 309