绪论篇 2
第1章 嵌入式系统架构与移植环境搭建 2
1.1 嵌入式系统硬件架构 2
1.1.1 微处理器 3
1.1.2 总线 4
1.1.3 存储器 5
1.2 嵌入式系统软件架构 6
1.3 嵌入式Linux移植环境搭建 7
1.3.1 Ubuntu开发平台 7
1.3.2 搭建交叉编译环境 8
1.3.3 获取内核 9
1.3.4 获取启动加载器 9
1.3.5 配置必要服务 9
1.3.6 PuTTY的安装和配置 12
1.4 本章小结 12
u-boot移植篇 14
第2章 u-boot工程与编译系统 14
2.1 u-boot介绍 14
2.1.1 u-boot工程简介 15
2.1.2 u-boot源码结构 15
2.1.3 u-boot的配置编译 16
2.2 u-boot常用命令与测试 18
2.2.1 获取帮助 18
2.2.2 环境变量相关命令 19
2.2.3 网络命令 20
2.2.4 Nand Flash操作命令 21
2.2.5 内存/寄存器相关命令 22
2.2.6 系统引导命令 24
2.3 u-boot编译过程分析 25
2.3.1 主机构建环境配置过程 25
2.3.2 目标机相关配置过程 27
2.3.3 make命令执行过程 31
2.4 本章小结 40
第3章 u-boot启动流程分析 41
3.1 u-boot启动第一阶段流程 41
3.1.1 设置异常向量 42
3.1.2 CPU进入SVC模式 43
3.1.3 设置控制寄存器地址 43
3.1.4 关闭看门狗 43
3.1.5 屏蔽中断 43
3.1.6 设置MPLLCON、UPLLCON和CLKDIVN 44
3.1.7 关闭MMU和cache 45
3.1.8 初始化存储控制器 46
3.1.9 复制u-boot第二阶段代码到RAM 47
3.1.10 设置栈 48
3.1.11 清除BSS段 48
3.1.12 跳转到第二阶段代码入口 48
3.2 u-boot启动第二阶段代码分析 49
3.2.1 gd_t结构体 49
3.2.2 bd_t结构体 50
3.2.3 init_sequence数组 50
3.2.4 start_armboot()顺序分析 51
3.2.5 main_loop函数分析 52
3.3 本章小结 56
第4章 ARM9/S3C2440 u-boot移植实战 57
4.1 移植准备工作 57
4.1.1 开发环境介绍 57
4.1.2 删减u-boot文件 58
4.1.3 建立My2440配置 59
4.1.4 配置和编译u-boot 60
4.2 u-boot芯片级移植 61
4.2.1 启动代码结构优化 61
4.2.2 系统时钟移植 65
4.2.3 存储器控制器设置 68
4.2.4 在u-boot工程中全面支持CONFIG_S3C2440宏配置 69
4.3 u-boot调试方法探索 70
4.3.1 通过LED指示运行状态 70
4.3.2 在第一阶段的代码中添加打印调试方法 72
4.3.3 在内存中加载和运行u-boot 78
4.4 Nor Flash驱动移植 78
4.4.1 Nor Flash的工作模式 78
4.4.2 Nor Flash的存储结构 79
4.4.3 Nor Flash的硬件连接 79
4.4.4 Nor Flash的操作方法 80
4.4.5 Nor Flash驱动分析 83
4.4.6 Nor Flash驱动移植 86
4.4.7 Nor Flash命令测试 87
4.4.8 完善u-boot的命令行功能 88
4.5 DM9000驱动移植 89
4.5.1 DM9000网卡端口访问 90
4.5.2 DM9000网卡时序分析 90
4.5.3 DM9000网卡驱动分析 93
4.5.4 DM9000网卡驱动移植 100
4.5.5 网卡驱动测试 103
4.5.6 通过TFTP下载程序到内存运行 103
4.6 u-boot启动内核 105
4.6.1 ARM架构的Linux内核启动 105
4.6.2 内核标记列表 106
4.6.3 u-boot启动命令分析1——go命令 109
4.6.4 u-boot启动命令分析2——bootm命令 110
4.6.5 u-boot启动命令的配置与移植 115
4.7 Nand Flash与驱动移植 118
4.7.1 Nand Flash启动原理 118
4.7.2 Nand Flash硬件特性 119
4.7.3 Linux MTD子系统 121
4.7.4 Nand Flash初始化流程分析 123
4.7.5 Nand Flash命令实现分析 125
4.7.6 页读取操作详解 127
4.7.7 Nor Flash和Nand Flash启动自动判断 132
4.7.8 Nand Flash拷贝代码实现 132
4.7.9 Nand Flash板级驱动移植 136
4.7.10 Nand Flash命令测试 140
4.8 YAFFS文件系统移植 142
4.8.1 YAFFS文件系统 142
4.8.2 YAFFS在Nand Flash上的存储结构 142
4.8.3 YAFFS在内存中的组织结构 143
4.8.4 在u-boot中添加对烧写YAFFS镜像的支持 144
4.8.5 YAFFS文件系统镜像制作 150
4.8.6 YAFFS的烧写与测试 152
4.9 UBIFS文件系统移植 153
4.9.1 UBI层 153
4.9.2 UBIFS介绍 155
4.9.3 在u-boot中添加对UBIFS的支持 156
4.9.4 制作UBIFS文件系统镜像 157
4.9.5 UBIFS的烧写与测试 158
4.10 SD卡驱动移植 162
4.10.1 MMC/SD/SDIO介绍 162
4.10.2 SD/MMC协议 162
4.10.3 S3C2440 SDI控制器操作 166
4.10.4 SD卡驱动分析 168
4.10.5 SD卡驱动移植 173
4.11 USB驱动移植 176
4.11.1 USB概述 176
4.11.2 USB系统架构 177
4.11.3 USB的通信方法 180
4.11.4 USB的描述符 184
4.11.5 USB设备请求 188
4.11.6 USB设备枚举 191
4.11.7 S3C2440 USB设备控制器 195
4.11.8 u-boot USB设备控制器驱动分析 196
4.11.9 USB设备驱动移植 206
4.11.10 USB驱动移植 210
4.11.11 USB功能测试 214
4.12 u-boot一键式菜单实现 215
4.12.1 一键式菜单需求分析 215
4.12.2 一键式菜单测试步骤 216
4.12.3 一键式菜单源码分析 220
4.13 本章小结 224
第5章 ARM11/S3C6410 u-boot移植实战 225
5.1 移植准备工作 225
5.1.1 开发环境 225
5.1.2 删减u-boot文件 226
5.1.3 建立My6410配置 227
5.1.4 配置和编译u-boot 228
5.2 u-boot芯片级移植 229
5.2.1 修改第一阶段启动代码start.S 229
5.2.2 板级底层初始化文件lowlevel_init.S移植 233
5.2.3 时钟初始化函数移植 239
5.2.4 内存初始化函数实现 243
5.2.5 Nand Flash复制代码实现 246
5.2.6 SD卡复制代码实现 250
5.2.7 底层调试方法探索 254
5.2.8 完善My6410的板级配置 258
5.2.9 烧写与测试 265
5.3 DM9000驱动移植 267
5.3.1 DM9000网卡端口访问 267
5.3.2 DM9000网卡时序分析 268
5.3.3 DM9000网卡驱动移植 270
5.3.4 网卡驱动测试 274
5.4 u-boot启动内核 274
5.4.1 u-boot启动命令的配置与移植 275
5.4.2 修改go命令以支持zImage格式镜像的启动 277
5.5 Nand Flash驱动移植 278
5.5.1 将u-boot下载到内存中运行 278
5.5.2 Nand Flash驱动移植 279
5.5.3 Nand Flash命令测试 289
5.6 YAFFS文件系统移植 291
5.6.1 在u-boot中添加对烧写YAFFS镜像的支持 291
5.6.2 YAFFS文件系统镜像制作 298
5.6.3 YAFFS的烧写与测试 299
5.7 UBIFS文件系统移植 300
5.7.1 在u-boot中添加对UBIFS的支持 300
5.7.2 UBIFS文件系统镜像制作 302
5.7.3 UBIFS的烧写与测试 303
5.8 SD卡驱动移植 307
5.8.1 S3C6410主机控制器操作 307
5.8.2 S3C6410主机控制器操作序列 308
5.8.3 SD卡驱动分析 310
5.8.4 SD卡驱动移植 317
5.8.5 通过SD卡更新系统 319
5.9 USB驱动移植 321
5.9.1 S3C6410 USB2.0高速OTG 321
5.9.2 u-boot USB设备控制器驱动分析 323
5.9.3 USB设备驱动移植 332
5.9.4 USB功能测试 335
5.10 本章小结 336
Linux内核移植篇 338
第6章 Linux内核工程与编译系统 338
6.1 Linux内核架构 338
6.1.1 内核体系结构 338
6.1.2 内核组件 339
6.1.3 内核目录结构 340
6.2 Linux内核的配置与编译 341
6.2.1 配置内核 341
6.2.2 编译内核 344
6.3 Linux内核构建系统 345
6.3.1 内核配置过程 345
6.3.2 扩展内核代码 347
6.3.3 内核中的Makefile 348
6.3.4 内核中的Kconfig 349
6.4 内核调试技术 352
6.4.1 调试准备 352
6.4.2 内核调试配置选项 352
6.4.3 源码级别的调试接口 353
6.4.4 使用printk()打印调试信息 355
6.4.5 使用strace跟踪系统调用 357
6.4.6 使用OOPS调试系统故障 358
6.5 本章小结 360
第7章 Linux内核启动流程分析 361
7.1 内核镜像生成 361
7.2 内核启动流程1——汇编部分 362
7.2.1 内核启动代码入口 362
7.2.2 深入源码分析 363
7.2.3 汇编启动代码分析总结 378
7.3 内核启动流程2——C语言部分 378
7.3.1 start_kernel()函数 379
7.3.2 rest_init()函数 388
7.3.3 kernel_init()函数 390
7.3.4 init_post()函数 391
7.4 内核启动流程3——Busybox的init进程 393
7.4.1 init进程启动流程 393
7.4.2 添加初始化活动 394
7.4.3 执行初始化活动 395
7.5 本章小结 396
第8章 Linux移植准备及最小系统构建 397
8.1 移植准备工作 397
8.1.1 开发环境 397
8.1.2 删减Linux文件 398
8.1.3 建立My2440配置 400
8.1.4 建立My6410配置 403
8.1.5 编译测试 406
8.2 最小系统搭建 409
8.2.1 嵌入式根文件系统制作 409
8.2.2 安装initramfs根文件系统 412
8.3 本章小结 414
第9章 Linux网卡驱动移植 415
9.1 Linux网络子系统 415
9.2 核心数据结构 416
9.2.1 net_device结构 416
9.2.2 sk_buff结构 419
9.3 DM9000网卡驱动分析 421
9.3.1 board_info结构 422
9.3.2 dm9000_probe()函数 423
9.3.3 dm9000_open()函数 427
9.3.4 dm9000_start_xmit()函数 427
9.3.5 数据包接收函数 428
9.3.6 数据包发送函数 429
9.3.7 中断处理函数 431
9.4 My2440网卡驱动移植 432
9.4.1 添加DM9000的平台设备 432
9.4.2 在内核配置添加对DM9000的支持 434
9.5 My6410网卡驱动移植 434
9.5.1 添加DM9000的平台设备 434
9.5.2 在内核配置中添加对网络子系统的支持 435
9.5.3 在内核配置添加对DM9000的支持 436
9.6 安装NFS根文件系统 436
9.6.1 在内核配置添加对NFS的支持 436
9.6.2 挂载NFS根文件系统 437
9.7 制作基于共享库的根文件系统 437
9.8 本章小结 439
第10章 Linux混杂设备驱动 440
10.1 My2440 RTC驱动移植 440
10.2 My6410 RTC驱动移植 441
10.2.1 修改RTC驱动rtc-s3c.c 441
10.2.2 完善对6410 RTC驱动的平台支持 445
10.2.3 在机器配置文件中添加RTC设备 448
10.2.4 在内核中配置RTC 448
10.3 RTC驱动测试 449
10.4 为My2440添加ADC和按键驱动 451
10.4.1 按键驱动分析 451
10.4.2 在内核中添加ADC和按键驱动 454
10.5 为My6410添加ADC驱动 457
10.6 本章小结 458
第11章 Linux I2C驱动移植 459
11.1 I2C协议概述 459
11.1.1 I2C总线物理拓扑结构 459
11.1.2 I2C通信协议 460
11.2 Linux I2C子系统框架 461
11.3 I2C驱动中的数据结构及操作 462
11.3.1 i2c_adapter结构 462
11.3.2 i2c_algorithm结构 464
11.3.3 i2c_msg结构 464
11.3.4 i2c_driver结构 465
11.3.5 i2c_client结构 467
11.4 I2C适配器的设备接口 468
11.4.1 i2cdev_open()函数 471
11.4.2 i2cdev_read()函数 471
11.4.3 i2cdev_ioctl()函数 472
11.5 S3C2440(6410)I2C适配器驱动的实现 473
11.5.1 S3C2440 I2C platform总线匹配 474
11.5.2 S3C2440 I2C总线驱动描述结构 474
11.5.3 probe方法的实现 476
11.5.4 S3C2440 I2C总线通信方法 477
11.6 S3C2440(6410)I2C适配器驱动移植 480
11.6.1 添加I2C平台设备 480
11.6.2 在内核配置中支持I2C驱动 481
11.6.3 编写I2C总线驱动测试程序 482
11.7 S3C2440(6410)I2C设备驱动的实现 484
11.7.1 At24系列I2C EEPROM设备驱动的实现 484
11.7.2 传统只读EEPROM设备驱动的实现 486
11.8 I2C EEPROM设备驱动移植 489
11.9 本章小结 490
第12章 Linux SPI驱动移植 491
12.1 SPI协议概述 491
12.1.1 SPI总线物理拓扑结构 491
12.1.2 时钟极性和时钟相位 492
12.1.3 SPI的优缺点 493
12.2 Linux SPI子系统 493
12.3 SPI驱动中的数据结构及操作 494
12.3.1 spi_master结构 494
12.3.2 spi_driver结构 495
12.3.3 spi_device结构 496
12.3.4 spi_message结构 497
12.3.5 spi_bitbang结构 498
12.4 SPI控制器的设备接口 500
12.5 S3C2440 SPI控制器驱动的实现 503
12.5.1 S3C2440 SPI platform总线匹配 503
12.5.2 S3C2440 SPI控制器驱动描述结构 504
12.5.3 probe方法的实现 504
12.5.4 S3C2440 SPI总线通信方法 505
12.6 S3C6410 SPI控制器驱动的实现 507
12.6.1 S3C6410 SPI控制器驱动描述结构 507
12.6.2 probe方法的实现 507
12.6.3 S3C6410 SPI总线通信方法 509
12.7 S3C2440 SPI控制器驱动移植 510
12.7.1 在机器配置文件中添加对SPI的支持 510
12.7.2 扩展Kconfig 512
12.7.3 在内核配置中支持SPI驱动 513
12.7.4 SPI驱动测试 513
12.8 S3C6410 SPI控制器驱动移植 513
12.8.1 添加6410的SPI驱动 514
12.8.2 添加SPI平台设备 514
12.8.3 添加6410 DMA平台代码 516
12.8.4 添加SPI、DMA相关的时钟资源 518
12.8.5 在机器配置文件中添加对SPI的支持 519
12.8.6 SPI驱动测试 521
12.9 S3C2440(S3C6410)SPI协议驱动移植 521
12.9.1 AT25系列SPI EEPROM协议驱动的实现 521
12.9.2 SPI EEPROM设备驱动移植 523
12.10 本章小结 524
第13章 Nand Flash驱动移植 525
13.1 Linux MTD子系统 525
13.2 MTD子系统中的数据结构及操作 526
13.2.1 mtd_info结构 526
13.2.2 mtd_notifier结构 528
13.2.3 mtd_part/mtd_partitions结构 528
13.3 MTD块设备实现分析 530
13.4 Nand Flash驱动的实现 534
13.4.1 Nand Flash platform总线匹配 534
13.4.2 S3C2440 Nand Flash控制器驱动描述结构 534
13.4.3 probe方法的实现 536
13.4.4 S3C2440 Nand Flash读写方法分析 537
13.5 S3C2440 Nand Flash控制器驱动移植 538
13.5.1 在机器配置文件中添加对Nand Flash的支持 538
13.5.2 完善S3C2440的Nand Flash驱动 540
13.5.3 在内核配置中支持Nand Flash驱动 541
13.6 S3C6410 Nand Flash控制器驱动移植 541
13.6.1 添加6410 Nand Flash驱动 541
13.6.2 添加Nand Flash平台设备 542
13.6.3 在机器配置文件中添加对Nand Flash的支持 544
13.6.4 其他修改 545
13.7 YAFFS2文件系统移植 547
13.7.1 将YAFFS2文件系统移植到Linux内核 548
13.7.2 利用mtd-utils烧写YAFFS2文件系统镜像 548
13.8 在内核中配置对UBIFS的支持 550
13.9 本章小结 550
第14章 SD/MMC卡驱动移植 551
14.1 Linux MMC子系统 551
14.2 MMC子系统中的数据结构及操作 552
14.2.1 mmc_host结构 552
14.2.2 mmc_card结构 554
14.2.3 mmc_driver结构 555
14.2.4 mmc_request结构 556
14.3 卡探测过程分析 558
14.4 S3C2440 SD/MMC主控制器驱动的实现 561
14.4.1 SD/MMC主控制器驱动platform总线匹配 561
14.4.2 S3C2440 SD/MMC主控制器驱动描述结构 561
14.4.3 probe方法的实现 563
14.4.4 S3C2440 SD/MMC主控制器请求处理分析 565
14.5 S3C6410高速MMC控制器驱动的实现 568
14.5.1 SDHCI驱动框架 569
14.5.2 SDHCI主机卡探测过程 569
14.5.3 S3C6410 HSMMC控制器驱动 570
14.5.4 S3C6410 HSMMC控制器请求处理 572
14.6 S3C2440 SD/MMC主机控制器驱动移植 572
14.6.1 在机器配置文件中添加对SD/MMC主控制器的支持 572
14.6.2 在内核配置中添加对SD/MMC主控制器驱动的支持 573
14.6.3 在内核配置中添加对中文字符集和FAT文件系统的支持 574
14.6.4 在文件系统中添加对热插拔事件处理的支持 574
14.6.5 SD/MMC主控制器驱动测试 575
14.7 S3C6410 HSMMC控制器驱动移植 576
14.7.1 添加6410 Nand Flash驱动 576
14.7.2 在机器配置文件中添加对HSMMC的支持 577
14.7.3 修改内核SDHCI驱动 578
14.8 本章小结 579
第15章 LCD驱动移植 580
15.1 LCD硬件原理 580
15.1.1 LCD的硬件构成 580
15.1.2 TFT屏显示时序 581
15.2 Linux帧缓冲子系统 582
15.3 帧缓冲子系统中的数据结构及操作 583
15.3.1 fb_info结构 583
15.3.2 fb_var_screeninfo结构和fb_fix_screeninfo结构 587
15.3.3 fb_cmap结构 589
15.4 帧缓冲字符设备接口 590
15.5 Linux显示启动Logo 594
15.6 S3C2440帧缓冲驱动的实现 596
15.6.1 S3C2440 LCD控制器硬件描述 596
15.6.2 驱动platform总线匹配 597
15.6.3 S3C2440帧缓冲驱动描述结构 598
15.6.4 probe方法实现 599
15.7 S3C6410帧缓冲驱动的实现 601
15.8 S3C2440帧缓冲驱动移植 601
15.8.1 在板级初始化文件中添加对帧缓冲的支持 601
15.8.2 修改Makefile和Kconfig 605
15.8.3 在内核配置中添加对帧缓冲驱动的支持 607
15.8.4 帧缓冲驱动测试 608
15.9 S3C6410帧缓冲驱动移植 608
15.9.1 添加6410帧缓冲驱动 608
15.9.2 在机器配置文件中添加对帧缓冲的支持 609
15.9.3 帧缓冲驱动测试 611
15.10 本章小结 611
第16章 触摸屏驱动移植 612
16.1 Linux输入子系统 612
16.2 输入子系统中的数据结构及操作 613
16.2.1 input_dev结构 613
16.2.2 input_handler结构 616
16.2.3 input_handle结构 617
16.3 输入子系统核心层的实现 618
16.4 通用事件处理驱动 622
16.5 输入事件报告流程 626
16.6 S3C2440(6410)触摸屏驱动的分析 629
16.6.1 模块初始化函数的实现 629
16.6.2 中断处理与事件上报 630
16.7 S3C2440触摸屏驱动移植与测试 632
16.7.1 S3C2440触屏驱动移植 632
16.7.2 S3C2440触屏驱动测试 633
16.8 S3C6410触摸屏驱动移植与测试 634
16.8.1 添加6410的触摸屏驱动 634
16.8.2 添加触屏平台设备 635
16.8.3 在机器配置文件中添加对触屏的支持 636
16.9 本章小结 637
第17章 声卡驱动移植 638
17.1 ALSA体系架构 638
17.1.1 ALSA设备文件 639
17.1.2 驱动代码的文件结构 640
17.2 声卡描述结构snd_card 640
17.3 PCM功能子层 644
17.3.1 PCM的概念 644
17.3.2 PCM设备描述结构snd_pcm 645
17.3.3 PCM流与PCM子流 646
17.3.4 PCM功能子层逻辑关系小结 651
17.3.5 PCM设备文件的建立 652
17.3.6 PCM设备文件的访问 654
17.4 声卡控制项 655
17.4.1 控制项创建 655
17.4.2 控制项回调函数 657
17.4.3 Control设备建立 658
17.5 ASoC声卡驱动架构 659
17.6 ASoC架构中的Machine驱动 662
17.6.1 创建ASoC声卡平台设备 662
17.6.2 ASoC声卡的平台驱动 665
17.7 ASoC架构中的Codec驱动 666
17.7.1 Codec的DAI和PCM的配置 666
17.7.2 Codec的控制IO 669
17.7.3 混音器和其他音频控制项 671
17.7.4 Codec设备与ASoC声卡注册 673
17.8 ASoC架构中的Platform驱动 676
17.8.1 CPU DAI驱动 676
17.8.2 音频DMA驱动 677
17.8.3 创建音频DMA缓冲区 678
17.8.4 音频DMA的PCM操作 681
17.9 S3C2440+UDA1341声卡驱动配置与测试 683
17.9.1 在机器配置文件中添加对声卡的支持 683
17.9.2 在内核配置中支持声卡驱动 684
17.9.3 应用层alsa-1ib移植 685
17.9.4 编写ALSA应用程序 686
17.9.5 播放和录音测试 690
17.10 S3C6410+WM9714声卡驱动移植 691
17.10.1 添加6410声卡驱动 691
17.10.2 在内核配置中支持声卡驱动 692
17.10.3 alsa-utils工具集移植 692
17.11 本章小结 693
第18章 USB驱动移植 694
18.1 USB子系统架构 694
18.2 USB驱动中的描述符结构 695
18.3 USB主机驱动 695
18.3.1 主机控制器驱动 695
18.3.2 OHCI主机控制器驱动 698
18.4 S3C2440/S3C6410 USB主机驱动的实现 700
18.5 USB设备驱动 701
18.5.1 USB设备驱动描述结构 702
18.5.2 USB请求块URB 703
18.5.3 URB的处理流程 705
18.5.4 usb_bulk_msg()和usb_control_msg() 708
18.5.5 探测和断开函数 709
18.6 USB骨架程序 710
18.7 USB设备驱动实例 718
18.7.1 DNW驱动的实现 718
18.7.2 USB键盘驱动的实现 720
18.8 本章小结 728
应用程序移植篇 730
第19章 嵌入式Qt移植 730
19.1 Qt开发环境搭建与使用 730
19.1.1 Qt SDK的下载与安装 730
19.1.2 第一个Qt程序 732
19.1.3 利用QtCreator建立一个工程 733
19.2 Qt的功能模块与裁剪 735
19.2.1 Qt模块的构成 735
19.2.2 图形用户界面 736
19.2.3 信号与槽 736
19.2.4 布局管理 737
19.2.5 主视窗 737
19.3 嵌入式Qt移植与测试 737
19.3.1 触屏库tslib移植 737
19.3.2 Qt库移植 739
19.3.3 嵌入式Qt程序测试 741
19.3.4 嵌入式Qt工程配置与测试 743
19.4 本章小结 751
第20章 嵌入式多媒体程序移植 752
20.1 音频播放程序madplay的移植 752
20.1.1 在Ubuntu中安装madplay 752
20.1.2 在Ubuntu中测试madplay 753
20.1.3 将madplay移植到开发板 753
20.1.4 在开发板中测试madplay 755
20.2 视频播放程序MPlayer的移植 755
20.2.1 在Ubuntu中安装MPlayer 755
20.2.2 在Ubuntu中测试MPlayer 756
20.2.3 将MPlayer移植到开发板 756
20.2.4 在开发板中测试MPlayer 758
20.3 利用Qt开发视频播放器 758
20.3.1 MPlayer的SLAVE模式 759
20.3.2 示例播放器MyPlayer的实现 759
20.4 本章小结 760
第21章 嵌入式数据库移植 761
21.1 SQLite数据库的使用 761
21.1.1 使用命令行操作SQLite 761
21.1.2 使用C语言操作SQLite 763
21.1.3 在Qt中操作SQLite 765
21.1.4 在QTableView中显示数据库内容 767
21.2 SQLite数据库的移植 770
21.2.1 将SQLite移植到开发板 770
21.2.2 在开发板中测试SQLite 771
21.3 本章小结 773
第22章 嵌入式Web服务器移植 774
22.1 Boa的使用与HTML页面测试 774
22.2 CGI程序测试 779
22.2.1 CGI的概念和原理 779
22.2.2 编写CGI脚本测试 779
22.2.3 CGIC库的基本使用 780
22.3 通过网页控制设备 782
22.4 通过网页监控设备 785
22.5 网页视频监控 788
22.6 将Web服务器移植到开发板 791
22.6.1 将Boa移植到开发板 791
22.6.2 将CGIC移植到开发板 792
22.6.3 将mjpg-streamer移植到开发板 792
22.6.4 在开发板上搭建Web服务站点 793
22.7 本章小结 793
第23章 嵌入式JVM移植 794
23.1 phoneME虚拟机移植 794
23.1.1 获取源代码 795
23.1.2 编译和安装 795
23.1.3 测试步骤 796
23.2 JamVM虚拟机移植 798
23.2.1 GNU Classpath移植 798
23.2.2 JamVM移植 799
23.2.3 JamVM测试 799
23.3 在JamVM上运行Jetty服务器 800
23.3.1 Jetry服务器启动 800
23.3.2 在Jetty服务器中部署Web应用 801
23.3.3 Servlet和JSP页面测试 803
23.4 本章小结 805