本书是嵌入式Linux领域的里程碑之作,它为Linux系统的移植提供了系统的、一站式的学习方案,已经在数万学员中被检验并获得高度认可。作者是该领域具有近10年的技术专家,而且一直在开发一线和教学一线,深谙企业需求和读者需求。它在内容上有3大特点:
第一,内容全面:涉及Linux系统移植的各个层面,包括启动加载程序、Linux内核、Linux应用程序等;
第二,内容深入:提供了完整的源码分析和深入的理论讲解,包含启动加载程序、Linux内核的编译系统等各方面;
第三,结合生产实践:分别提供对使用ARM9/S3C2440和ARM11/S3C6410两款处理器的开发板移植过程的详细实录。
全书一共23章,分为n个部分:
第一部分:准备工作(第1章)
详细介绍了嵌入式系统的硬件架构、软件架构以及嵌入式Linux移植环境的搭建,为后面的学习做好准备工作;
第二部分:u-boot移植(第2~5章)
系统讲解了u-boot工程与编译系统,详细分析了u-boot的启动流程,全方位演示了如何在ARM9/S3C2440和ARM11/S3C6410上移植u-boot,实战性极强,能让读者举一反三;
第三部分:Linux内核移植(第6~18章)
首先从源码的角度讲解与分析了Linux内核的架构、编译、配置、调试以及完整的启动流程;其次介绍了Linux内核移植的准备工作和最小系统的构建;紧接着深度地讲解了Linux网卡驱动、混杂设备驱动、I2C驱动、SPI驱动、Nand Flash驱动、SD/MMC卡驱动、LCD驱动、触摸屏驱动、声卡驱动、USB驱动等几乎所有驱动的完整移植方法和过程,这是迄今为止最翔实的关于Linux设备驱动移植的资料之一;
第四部分 应用程序移植(第19~23章)
从工程实践的角度深入讲解了嵌入式Qt、嵌入式多媒体程序、嵌入式数据库、嵌入式JVM等核心Linux应用程序的移植。
封面图
目录
- 前言
- 绪论篇
- 第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.1Ubuntu开发平台7
- 1.3.2搭建交叉编译环境8
- 1.3.3获取内核9
- 1.3.4获取启动加载器9
- 1.3.5配置必要服务9
- 1.3.6PuTTY的安装和配置12
- 1.4本章小结12
- u-boot移植篇
- 第2章u-boot工程与编译系统14
- 2.1u-boot介绍14
- 2.1.1u-boot工程简介15
- 2.1.2u-boot源码结构15
- 2.1.3u-boot的配置编译16
- 2.2u-boot常用命令与测试18
- 2.2.1获取帮助18
- 2.2.2环境变量相关命令19
- 2.2.3网络命令20
- 2.2.4Nand Flash操作命令21
- 2.2.5内存/寄存器相关命令22
- 2.2.6系统引导命令24
- 2.3u-boot编译过程分析25
- 2.3.1主机构建环境配置过程25
- 2.3.2目标机相关配置过程27
- 2.3.3make命令执行过程31
- 2.4本章小结40
- 第3章u-boot启动流程分析41
- 3.1u-boot启动第一阶段流程41
- 3.1.1设置异常向量42
- 3.1.2CPU进入SVC模式43
- 3.1.3设置控制寄存器地址43
- 3.1.4关闭看门狗43
- 3.1.5屏蔽中断43
- 3.1.6设置MPLLCON、UPLLCON和CLKDIVN44
- 3.1.7关闭MMU和cache45
- 3.1.8初始化存储控制器46
- 3.1.9复制u-boot第二阶段代码到RAM47
- 3.1.10设置栈48
- 3.1.11清除BSS段48
- 3.1.12跳转到第二阶段代码入口48
- 3.2u-boot启动第二阶段代码分析49
- 3.2.1gd_t结构体49
- 3.2.2bd_t结构体50
- 3.2.3init_sequence数组50
- 3.2.4start_armboot()顺序分析51
- 3.2.5main_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-boot60
- 4.2u-boot芯片级移植61
- 4.2.1启动代码结构优化61
- 4.2.2系统时钟移植65
- 4.2.3存储器控制器设置68
- 4.2.4在u-boot工程中全面支持CONFIG_S3C2440宏配置69
- 4.3u-boot调试方法探索70
- 4.3.1通过LED指示运行状态70
- 4.3.2在第一阶段的代码中添加打印调试方法72
- 4.3.3在内存中加载和运行u-boot78
- 4.4Nor Flash驱动移植78
- 4.4.1Nor Flash的工作模式78
- 4.4.2Nor Flash的存储结构79
- 4.4.3Nor Flash的硬件连接79
- 4.4.4Nor Flash的操作方法80
- 4.4.5Nor Flash驱动分析83
- 4.4.6Nor Flash驱动移植86
- 4.4.7Nor Flash命令测试87
- 4.4.8完善u-boot的命令行功能88
- 4.5DM9000驱动移植89
- 4.5.1DM9000网卡端口访问90
- 4.5.2DM9000网卡时序分析90
- 4.5.3DM9000网卡驱动分析93
- 4.5.4DM9000网卡驱动移植100
- 4.5.5网卡驱动测试103
- 4.5.6通过TFTP下载程序到内存运行103
- 4.6u-boot启动内核105
- 4.6.1ARM架构的Linux内核启动105
- 4.6.2内核标记列表106
- 4.6.3u-boot启动命令分析1—go命令109
- 4.6.4u-boot启动命令分析2—bootm命令110
- 4.6.5u-boot启动命令的配置与移植115
- 4.7Nand Flash与驱动移植118
- 4.7.1Nand Flash启动原理118
- 4.7.2Nand Flash硬件特性119
- 4.7.3Linux MTD子系统121
- 4.7.4Nand Flash初始化流程分析123
- 4.7.5Nand Flash命令实现分析125
- 4.7.6页读取操作详解127
- 4.7.7Nor Flash和Nand Flash启动自动判断132
- 4.7.8Nand Flash拷贝代码实现132
- 4.7.9Nand Flash板级驱动移植136
- 4.7.10Nand Flash命令测试140
- 4.8YAFFS文件系统移植142
- 4.8.1YAFFS文件系统142
- 4.8.2YAFFS在Nand Flash上的存储结构142
- 4.8.3YAFFS在内存中的组织结构143
- 4.8.4在u-boot中添加对烧写YAFFS镜像的支持144
- 4.8.5YAFFS文件系统镜像制作150
- 4.8.6YAFFS的烧写与测试152
- 4.9UBIFS文件系统移植153
- 4.9.1UBI层153
- 4.9.2UBIFS介绍155
- 4.9.3在u-boot中添加对UBIFS的支持156
- 4.9.4制作UBIFS文件系统镜像157
- 4.9.5UBIFS的烧写与测试158
- 4.10SD卡驱动移植162
- 4.10.1MMC/SD/SDIO介绍162
- 4.10.2SD/MMC协议162
- 4.10.3S3C2440 SDI控制器操作166
- 4.10.4SD卡驱动分析168
- 4.10.5SD卡驱动移植173
- 4.11USB驱动移植176
- 4.11.1USB概述176
- 4.11.2USB系统架构177
- 4.11.3USB的通信方法180
- 4.11.4USB的描述符184
- 4.11.5USB设备请求188
- 4.11.6USB设备枚举191
- 4.11.7S3C2440 USB设备控制器195
- 4.11.8u-boot USB设备控制器驱动分析196
- 4.11.9USB设备驱动移植206
- 4.11.10USB驱动移植210
- 4.11.11USB功能测试214
- 4.12u-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-boot228
- 5.2u-boot芯片级移植229
- 5.2.1修改第一阶段启动代码start.S229
- 5.2.2板级底层初始化文件lowlevel_init.S移植233
- 5.2.3时钟初始化函数移植239
- 5.2.4内存初始化函数实现243
- 5.2.5Nand Flash复制代码实现246
- 5.2.6SD卡复制代码实现250
- 5.2.7底层调试方法探索254
- 5.2.8完善My6410的板级配置258
- 5.2.9烧写与测试265
- 5.3DM9000驱动移植267
- 5.3.1DM9000网卡端口访问267
- 5.3.2DM9000网卡时序分析268
- 5.3.3DM9000网卡驱动移植270
- 5.3.4网卡驱动测试274
- 5.4u-boot启动内核274
- 5.4.1u-boot启动命令的配置与移植275
- 5.4.2修改go命令以支持zImage格式镜像的启动277
- 5.5Nand Flash驱动移植278
- 5.5.1将u-boot下载到内存中运行278
- 5.5.2Nand Flash驱动移植279
- 5.5.3Nand Flash命令测试289
- 5.6YAFFS文件系统移植291
- 5.6.1在u-boot中添加对烧写YAFFS镜像的支持291
- 5.6.2YAFFS文件系统镜像制作298
- 5.6.3YAFFS的烧写与测试299
- 5.7UBIFS文件系统移植300
- 5.7.1在u-boot中添加对UBIFS的支持300
- 5.7.2UBIFS文件系统镜像制作302
- 5.7.3UBIFS的烧写与测试303
- 5.8SD卡驱动移植307
- 5.8.1S3C6410 主机控制器操作307
- 5.8.2S3C6410 主机控制器操作序列308
- 5.8.3SD卡驱动分析310
- 5.8.4SD卡驱动移植317
- 5.8.5通过SD卡更新系统319
- 5.9USB驱动移植321
- 5.9.1S3C6410 USB2.0高速OTG321
- 5.9.2u-boot USB设备控制器驱动分析323
- 5.9.3USB设备驱动移植332
- 5.9.4USB功能测试335
- 5.10本章小结336
- Linux内核移植篇
- 第6章Linux内核工程与编译系统338
- 6.1Linux内核架构338
- 6.1.1内核体系结构338
- 6.1.2内核组件339
- 6.1.3内核目录结构340
- 6.2Linux内核的配置与编译341
- 6.2.1配置内核341
- 6.2.2编译内核344
- 6.3Linux内核构建系统345
- 6.3.1内核配置过程345
- 6.3.2扩展内核代码347
- 6.3.3内核中的Makefile348
- 6.3.4内核中的Kconfig349
- 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.1start_kernel()函数379
- 7.3.2rest_init()函数388
- 7.3.3kernel_init()函数390
- 7.3.4init_post()函数391
- 7.4内核启动流程3—Busybox的init进程393
- 7.4.1init进程启动流程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.1Linux网络子系统415
- 9.2核心数据结构416
- 9.2.1net_device结构416
- 9.2.2sk_buff结构419
- 9.3DM9000网卡驱动分析421
- 9.3.1board_info结构422
- 9.3.2dm9000_probe()函数423
- 9.3.3dm9000_open()函数427
- 9.3.4dm9000_start_xmit()函数427
- 9.3.5数据包接收函数428
- 9.3.6数据包发送函数429
- 9.3.7中断处理函数431
- 9.4My2440网卡驱动移植432
- 9.4.1添加DM9000的平台设备432
- 9.4.2在内核配置添加对DM9000的支持434
- 9.5My6410网卡驱动移植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.1My2440 RTC驱动移植440
- 10.2My6410 RTC驱动移植441
- 10.2.1修改RTC驱动rtc-s3c.c441
- 10.2.2完善对6410 RTC驱动的平台支持445
- 10.2.3在机器配置文件中添加RTC设备448
- 10.2.4在内核中配置RTC448
- 10.3RTC驱动测试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.1I2C协议概述459
- 11.1.1I2C总线物理拓扑结构459
- 11.1.2I2C通信协议460
- 11.2Linux I2C子系统框架461
- 11.3I2C驱动中的数据结构及操作462
- 11.3.1i2c_adapter结构462
- 11.3.2i2c_algorithm结构464
- 11.3.3i2c_msg结构464
- 11.3.4i2c_driver结构465
- 11.3.5i2c_client结构467
- 11.4I2C适配器的设备接口468
- 11.4.1i2cdev_open()函数471
- 11.4.2i2cdev_ read()函数471
- 11.4.3i2cdev_ioctl()函数472
- 11.5S3C2440(6410) I2C适配器驱动的实现473
- 11.5.1S3C2440 I2C platform总线匹配474
- 11.5.2S3C2440 I2C总线驱动描述结构474
- 11.5.3probe方法的实现476
- 11.5.4S3C2440 I2C总线通信方法477
- 11.6S3C2440(6410) I2C适配器驱动移植480
- 11.6.1添加 I2C平台设备480
- 11.6.2在内核配置中支持I2C驱动481
- 11.6.3编写I2C总线驱动测试程序482
- 11.7S3C2440(6410) I2C设备驱动的实现484
- 11.7.1At24系列I2C EEPROM设备驱动的实现484
- 11.7.2传统只读EEPROM设备驱动的实现486
- 11.8I2C EEPROM设备驱动移植489
- 11.9本章小结490
- 第12章Linux SPI驱动移植491
- 12.1SPI协议概述491
- 12.1.1SPI总线物理拓扑结构491
- 12.1.2时钟极性和时钟相位492
- 12.1.3SPI的优缺点493
- 12.2Linux SPI子系统493
- 12.3SPI驱动中的数据结构及操作494
- 12.3.1spi_master结构494
- 12.3.2spi_driver结构495
- 12.3.3spi_device结构496
- 12.3.4spi_message结构497
- 12.3.5spi_bitbang结构498
- 12.4SPI控制器的设备接口500
- 12.5S3C2440 SPI控制器驱动的实现503
- 12.5.1S3C2440 SPI platform总线匹配503
- 12.5.2S3C2440 SPI控制器驱动描述结构504
- 12.5.3probe方法的实现504
- 12.5.4S3C2440 SPI总线通信方法505
- 12.6S3C6410 SPI控制器驱动的实现507
- 12.6.1S3C6410 SPI控制器驱动描述结构507
- 12.6.2probe方法的实现507
- 12.6.3S3C6410 SPI总线通信方法509
- 12.7S3C2440 SPI 控制器驱动移植510
- 12.7.1在机器配置文件中添加对SPI的支持510
- 12.7.2扩展Kconfig512
- 12.7.3在内核配置中支持SPI驱动513
- 12.7.4SPI驱动测试513
- 12.8S3C6410 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.6SPI驱动测试521
- 12.9S3C2440(S3C6410) SPI协议驱动移植521
- 12.9.1AT25系列SPI EEPROM协议驱动的实现521
- 12.9.2SPI EEPROM设备驱动移植523
- 12.10本章小结524
- 第13章Nand Flash驱动移植525
- 13.1Linux MTD子系统525
- 13.2MTD子系统中的数据结构及操作526
- 13.2.1mtd_info结构526
- 13.2.2mtd_notifier结构528
- 13.2.3mtd_part/mtd_partitions结构528
- 13.3MTD块设备实现分析530
- 13.4Nand Flash驱动的实现534
- 13.4.1Nand Flash platform总线匹配534
- 13.4.2S3C2440 Nand Flash控制器驱动描述结构534
- 13.4.3probe方法的实现536
- 13.4.4S3C2440 Nand Flash读写方法分析537
- 13.5S3C2440 Nand Flash控制器驱动移植538
- 13.5.1在机器配置文件中添加对Nand Flash的支持538
- 13.5.2完善S3C2440的Nand Flash驱动540
- 13.5.3在内核配置中支持 Nand Flash驱动541
- 13.6S3C6410 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.7YAFFS2文件系统移植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.1Linux MMC子系统551
- 14.2MMC子系统中的数据结构及操作552
- 14.2.1mmc_host结构552
- 14.2.2mmc_card结构554
- 14.2.3mmc_driver结构555
- 14.2.4mmc_request结构556
- 14.3卡探测过程分析558
- 14.4S3C2440 SD/MMC主控制器驱动的实现561
- 14.4.1SD/MMC主控制器驱动platform总线匹配561
- 14.4.2S3C2440 SD/MMC主控制器驱动描述结构561
- 14.4.3probe方法的实现563
- 14.4.4S3C2440 SD/MMC主控制器请求处理分析565
- 14.5S3C6410 高速MMC控制器驱动的实现568
- 14.5.1SDHCI驱动框架569
- 14.5.2SDHCI主机卡探测过程569
- 14.5.3S3C6410 HSMMC控制器驱动570
- 14.5.4S3C6410 HSMMC控制器请求处理572
- 14.6S3C2440 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.5SD/MMC主控制器驱动测试575
- 14.7S3C6410 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.1LCD硬件原理580
- 15.1.1LCD的硬件构成580
- 15.1.2TFT屏显示时序581
- 15.2Linux帧缓冲子系统582
- 15.3帧缓冲子系统中的数据结构及操作583
- 15.3.1fb_info结构583
- 15.3.2fb_var_screeninfo结构和fb_fix_screeninfo结构587
- 15.3.3fb_cmap结构589
- 15.4帧缓冲字符设备接口590
- 15.5Linux显示启动Logo594
- 15.6S3C2440帧缓冲驱动的实现596
- 15.6.1S3C2440 LCD控制器硬件描述596
- 15.6.2驱动platform总线匹配597
- 15.6.3S3C2440 帧缓冲驱动描述结构598
- 15.6.4probe方法实现599
- 15.7S3C6410 帧缓冲驱动的实现601
- 15.8S3C2440 帧缓冲驱动移植601
- 15.8.1在板级初始化文件中添加对帧缓冲的支持601
- 15.8.2修改Makefile和Kconfig605
- 15.8.3在内核配置中添加对帧缓冲驱动的支持607
- 15.8.4帧缓冲驱动测试608
- 15.9S3C6410 帧缓冲驱动移植608
- 15.9.1添加6410 帧缓冲驱动608
- 15.9.2在机器配置文件中添加对帧 缓冲的支持609
- 15.9.3帧缓冲驱动测试611
- 15.10本章小结611
- 第16章触摸屏驱动移植612
- 16.1Linux输入子系统612
- 16.2输入子系统中的数据结构及操作613
- 16.2.1input_dev结构613
- 16.2.2input_handler结构616
- 16.2.3input_handle结构617
- 16.3输入子系统核心层的实现618
- 16.4通用事件处理驱动622
- 16.5输入事件报告流程626
- 16.6S3C2440(6410)触摸屏驱动的分析629
- 16.6.1模块初始化函数的实现629
- 16.6.2中断处理与事件上报630
- 16.7S3C2440触摸屏驱动移植与测试632
- 16.7.1S3C2440触屏驱动移植632
- 16.7.2S3C2440触屏驱动测试633
- 16.8S3C6410触摸屏驱动移植与测试634
- 16.8.1添加6410的触摸屏驱动634
- 16.8.2添加触屏平台设备635
- 16.8.3在机器配置文件中添加对触屏的支持636
- 16.9本章小结637
- 第17章声卡驱动移植638
- 17.1ALSA体系架构638
- 17.1.1ALSA设备文件639
- 17.1.2驱动代码的文件结构640
- 17.2声卡描述结构snd_card640
- 17.3PCM功能子层644
- 17.3.1PCM的概念644
- 17.3.2PCM设备描述结构snd_pcm645
- 17.3.3PCM流与PCM子流646
- 17.3.4PCM功能子层逻辑关系小结651
- 17.3.5PCM设备文件的建立652
- 17.3.6PCM设备文件的访问654
- 17.4声卡控制项655
- 17.4.1控制项创建655
- 17.4.2控制项回调函数657
- 17.4.3Control设备建立658
- 17.5ASoC声卡驱动架构659
- 17.6ASoC架构中的Machine驱动662
- 17.6.1创建ASoC声卡平台设备662
- 17.6.2ASoC声卡的平台驱动665
- 17.7ASoC架构中的Codec驱动666
- 17.7.1Codec的DAI和PCM的配置666
- 17.7.2Codec的控制IO669
- 17.7.3混音器和其他音频控制项671
- 17.7.4Codec设备与ASoC声卡注册673
- 17.8ASoC架构中的Platform驱动676
- 17.8.1CPU DAI驱动676
- 17.8.2音频DMA驱动677
- 17.8.3创建音频DMA缓冲区678
- 17.8.4音频DMA的PCM操作681
- 17.9S3C2440+UDA1341声卡驱动配置与测试683
- 17.9.1在机器配置文件中添加对声卡的支持683
- 17.9.2在内核配置中支持声卡驱动684
- 17.9.3应用层alsa-lib移植685
- 17.9.4编写ALSA应用程序686
- 17.9.5播放和录音测试690
- 17.10S3C6410+WM9714声卡驱动移植691
- 17.10.1添加6410声卡驱动691
- 17.10.2在内核配置中支持声卡驱动692
- 17.10.3alsa-utils工具集移植692
- 17.11本章小结693
- 第18章USB驱动移植694
- 18.1USB子系统架构694
- 18.2USB驱动中的描述符结构695
- 18.3USB主机驱动695
- 18.3.1主机控制器驱动695
- 18.3.2OHCI主机控制器驱动698
- 18.4S3C2440/S3C6410 USB主机驱动的实现700
- 18.5USB设备驱动701
- 18.5.1USB设备驱动描述结构702
- 18.5.2USB请求块URB703
- 18.5.3URB的处理流程705
- 18.5.4usb_bulk_msg()和usb_control_msg()708
- 18.5.5探测和断开函数709
- 18.6USB骨架程序710
- 18.7USB设备驱动实例718
- 18.7.1DNW驱动的实现718
- 18.7.2USB键盘驱动的实现720
- 18.8本章小结728
- 应用程序移植篇
- 第19章嵌入式Qt移植730
- 19.1Qt开发环境搭建与使用 730
- 19.1.1Qt SDK的下载与安装730
- 19.1.2第一个Qt程序732
- 19.1.3利用Qt Creator建立一个工程733
- 19.2Qt的功能模块与裁剪735
- 19.2.1Qt模块的构成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.2Qt库移植739
- 19.3.3嵌入式Qt程序测试741
- 19.3.4嵌入式Qt工程配置与测试743
- 19.4本章小结751
- 第20章嵌入式多媒体程序移植752
- 20.1音频播放程序madplay的移植752
- 20.1.1在Ubuntu中安装madplay752
- 20.1.2在Ubuntu中测试madplay753
- 20.1.3将madplay移植到开发板753
- 20.1.4在开发板中测试madplay755
- 20.2视频播放程序MPlayer的移植755
- 20.2.1在Ubuntu中安装MPlayer755
- 20.2.2在Ubuntu中测试MPlayer756
- 20.2.3将MPlayer移植到开发板756
- 20.2.4在开发板中测试MPlayer758
- 20.3利用Qt开发视频播放器758
- 20.3.1MPlayer的SLAVE模式759
- 20.3.2示例播放器MyPlayer的实现759
- 20.4本章小结760
- 第21章嵌入式数据库移植761
- 21.1SQLite数据库的使用761
- 21.1.1使用命令行操作SQLite761
- 21.1.2使用C语言操作SQLite763
- 21.1.3在Qt中操作SQLite765
- 21.1.4在QTableView中显示数据库内容767
- 21.2SQLite数据库的移植770
- 21.2.1将SQLite移植到开发板770
- 21.2.2在开发板中测试SQLite771
- 21.3本章小结773
- 第22章嵌入式Web服务器移植774
- 22.1Boa的使用与HTML页面测试774
- 22.2CGI程序测试779
- 22.2.1CGI的概念和原理779
- 22.2.2编写CGI脚本测试779
- 22.2.3CGIC库的基本使用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.1phoneME虚拟机移植794
- 23.1.1获取源代码795
- 23.1.2编译和安装795
- 23.1.3测试步骤796
- 23.2JamVM虚拟机移植798
- 23.2.1GNU Classpath移植798
- 23.2.2JamVM移植799
- 23.2.3JamVM测试799
- 23.3在JamVM上运行Jetty服务器800
- 23.3.1Jetty服务器启动800
- 23.3.2在Jetty服务器中部署Web应用801
- 23.3.3Servlet和JSP页面测试803
- 23.4本章小结805