《Linux系统移植(第2版少标孩六还为确烟停)》作者是刘刚、赵剑川,是清华大学出版社于2014年2月1日出版的图书 。
- 书名 Linux系统移植(第2版)
- 作者 刘刚、赵剑川
- 出版社 清华大学出版社
- 出版时间 2014年2月1日
- 页数 486 页
图书信息
Linux系统移植(第2版)
作者:刘刚、赵剑川 等
定价:69元
印次:2-2
ISBN:9787302344261
出版日期:2014.02.01
印刷日期:2014.1来自2.29
出版社:清华大学出版社
- 开 本:16?
- 纸 张:胶版纸
- 包 装:平装
介绍
国内唯一的Linux系统移植图书全面升级,ChinaUnix社区鼎力推荐 通过15个典型案例,全面、系统、深入地剖析Linux系统移植的方法 赠送17.5小时高清语音视担落盾加例越原府频讲解 内容新颖:书中的开360百科发环境、编译工具和软件都是当前流行的稳定版本 内容全面:涵盖Linux内核、文件系统、驱动及数据库等各种系统的移植 循序渐进:遵循原理分析,代码分析,编译,测试,移植的学习顺序 讲解详细:所有编译过程都附有编译命令,并对复杂的命令给出了详细说明 技巧性强:穿插了大量的经验和技巧,并对容易出错的地方给出了专门的提示 注重实虽助航孔战:通过典型案例,让读者深入体验Linux系统移植的方法和全过程
本书注重实践,包含了丰富的移植实例,这些实例各具特点,从基础的系统组成到设备驱动,再到强斤止高级应用,适合各个层面的读者学习和研究。本书共2点著给立做介条言0章,分为4篇。简夜心亲己致世天胶晶儿层单介绍如下。
令照杀怎权绝优因殖并著第1篇 系统移植基础篇(第1~2章)
本篇介绍了系统移植的基础。首先对Linux内核进行了音学止水镇货布名环直负简单介绍,然后介绍了系统移植环境的搭建。通过对本篇内容的学习,读者可以对Linux系统有初步认识,能掌握嵌入式Linux开发工具的使用,能扩句苗席情正确搭建开发平台,能够制作编译好的嵌入式系统。
第2篇 系统移植技术篇(第3~5章)
本篇介绍了一个最基本的嵌入式系统的组成部分、Bootloader、内核和文件系统的移植。学习完本篇内容后,读者能够动静益保手独立编译和移植一个基本的激致嵌入式系统。
第3篇 系统移植驱动篇(第洲官审抓秋6~12章)
本篇前急上掉被伤据困又甲介绍了各种驱动的移植,包括LCD、触摸屏、食儿准走只USB、网卡、音频、SD卡矛、NandFlash等流行的设整体零问液改句倒备驱动的移植过程。通过对本篇内容的学习,读者对嵌入式Linux驱黄李映杀犯动移植将会有一定的认识,可以基本掌握驱动的移植步骤,能完成简单的驱动移植。
第4图湖字篇 系统移植高级篇(顾专画大比突第13~20章)
本篇从嵌入式产品的角度出发,介绍了系统移植中各种类型的高层软件移植,包括GUI、数据库、Web服务器、虚拟机的移植,最后还介绍了目前流行的VoIP技术,并结合源码介绍了VoIP相关协议和编译方法。通过学习本篇内容,读者可以掌握很多移植技巧,能够将这些实例应用到自己的项目中。
目录
第1篇 系统移植基础篇
第1章 L纪倍亲征技蛋计inux内核介绍2
1.1 系统调用接口2
1.1.1 Linux系统调用2
1.1.2 用成一推户编程接口2
1.1.3 系统调用与服务例程的对应关系3
1.1.4 系统调用过程3
1.1.5 系统调用传递的参数4
1.2 进程管理4
1.2.1 进程4
1.2.2 进程描述符5
1.2.3 进程状态6
1.2.4 进程调度6
来自 1.2.5 进程地址空间8
1.3 内存管理10
1.3.1 内存管理技术10
1.3.2 内儿杀爱实存区管理12
1.3360百科.3 内核中获取内存的几种方式13
1.4 虚拟文件系统推求庆赶扩华14
1.4.1 虚拟文件系统作用14
1.4.2 文件系统的注册15
1.4.3 文件系统的安装和卸载16
1.5 设备驱动程序17
简王武季脱次联没剂 1.5.1 字符设备驱动程序17
1.5.2 块设备驱动程序18
1宪剂毛消质胞.5.3 网络设备驱动程序21
1.5.4 内存与I/O操作22
1.6 小结23
第2章 嵌入式Linux开发环境搭建24
2.1 虚拟机及Linux安装24
2.1.1 虚拟机的安装24
2.1.2 虚约敌八费拟机和主机通信设置31
高南2.1.3 虚拟机与主机共享文件35
2发露赶原使清脚怀听印.1.4 虚拟机与主机文件传输36
2.2 交叉编译工具38
批几成 2.2.1 交叉轴肥木排编译工具安装38
2.2.2 交叉编译器测试42
2.3 超级终端和Minicom44
2.3.1 超级终端软件的安装44
2.3.2 配置Minicom44
2.3.3 配置S全固推例八军ecureCRT47
2.4 内核、文件系统加载工具47
2.4.1 烧写Bootloader47
2.4.2 内核和文件系统下载50
2.4.3 应用程序和文件传输50
2.5 在开发中使用网络文件系统(NFS)54
2.5.1 虚拟机设置54
2.5.2 虚拟机的IP地址设置55
2.5.3 验证网络连接58
2.5.4 设置共享目录59
2.5.5 启动NFS服务59
2.内存行输收5.6 修改共享配置后60
2.5.7 挂载NFS60
2.5.8 双网卡挂载NFS60
2.6 小结61
第2篇 系统移植技术篇
第3章 源地响紧尔术着协针宪Bootloader移植64
3.1 Bootloader介绍64
3.1.1 Bootloader与嵌入式Linux系统的关系64
3.1.2 Bootloader基本概念64
3.1.3 Boo吧吸施祖纸帮烈鲜tloader启动过程66
3.2 Bootloader之U-Boot千费印到判67
3.2.1 U-Boot优点67
3.2.2 U-Boot的主要功能67
3.2.3 U-Boot目录结构68
3.2.4 U-Boot的编译69
3.3 小结69
第4章 Linux内核裁剪与移植70
胞冷令另者检汉哪夜 4.1 Linux内核结构70
4.1.1 内核的主要组成部分70
4.1.2 内核源码目录介绍71
4.2 内核配置选项73
4.2.1 一般选项73
4.2.2 内核模块加载方式支持选项74
4.2.3 系统调用、类型、特性、启动相关选项75
4.2吧三坚.4 网络协议支持相关选项76
4.2.5 设备驱动支持相关选项76
4.2.6 文件系统类型支持相关选项77
4.2.7 安全相关选项78
4.2.8 其他选项78
4.3 内核裁剪及编译79
4.3.1 安装内核源代码79
4.3.2 检查编译环境设置79
4.3.3 配置内核80
4.3.4 编译内核89
4.4 内核升级90
4.4.1 准备升级内核文件90
4.4.2 移植过程90
4.5 小结93
第5章 嵌入式文件系统制作94
5.1 文件系统选择94
5.1.1 Flash硬件方案比较94
5.1.2 嵌入式文件系统的分层结构95
5.2 基于Flash的文件系统95
5.2.1 JFFS文件系统(Journalling Flash File System)96
5.2.2 YAFFS文件系统(Yet Another Flash File System)98
5.2.3 Cramfs文件系统(Compressed ROM File System)101
5.2.4 Romfs文件系统(ROM File System)102
5.3 基于RAM的文件系统103
5.4 文件系统的制作103
5.4.1 制作Ramdisk文件系统104
5.4.2 制作YAFFS2文件系统112
5.4.3 制作JFFS2文件系统117
5.4.4 其他文件系统制作119
5.5 小结120
第3篇 系统移植与驱动篇
第6章 LCD驱动移植122
6.1 认识LCD相关硬件原理122
6.1.1 LCD概述122
6.1.2 LCD控制器123
6.1.3 LCD控制器方块图123
6.1.4 LCD控制器操作124
6.1.5 LCD控制寄存器129
6.2 LCD参数设置132
6.3 内核LCD驱动机制133
6.3.1 FrameBuffer概述133
6.3.2 FrameBuffer 设备驱动的结构133
6.4 Linux 2.6.32的LCD驱动源码分析137
6.4.1 LCD驱动开发的主要工作137
6.4.2 s3c2410fb_init()函数分析138
6.4.3 s3c2410fb_probe()函数分析139
6.4.4 s3c2410fb_remove()函数分析144
6.5 移植内核中的LCD驱动145
6.5.1 LCD硬件电路图145
6.5.2 修改LCD源码145
6.5.3 配置内核150
6.6 小结153
第7章 触摸屏驱动移植154
7.1 触摸屏概述154
7.1.1 触摸屏工作原理154
7.1.2 触摸屏的主要类型154
7.2 S3C2440 ADC接口使用157
7.2.1 S3C2440触摸屏接口概述157
7.2.2 S3C2440触摸屏接口操作158
7.3 2.6内核触摸屏驱动源码分析(s3c2410_ts.c源码分析)162
7.4 Linux内核输入子系统介绍167
7.4.1 Input子系统概述168
7.4.2 输入设备结构体168
7.4.3 输入链路的创建过程171
7.4.4 使用Input子系统172
7.4.5 编写输入设备驱动需要完成的工作174
7.5 触摸屏驱动移植和内核编译175
7.5.1 修改初始化源码175
7.5.2 修改硬件驱动源码s3c2440_ts.c177
7.5.3 修改Kconfig和Makefile179
7.5.4 配置编译内核180
7.5.5 触摸屏测试程序设计181
7.6 小结182
第8章 USB设备驱动移植183
8.1 USB协议183
8.1.1 USB协议的系统主要组成部分183
8.1.2 总线物理拓扑结构185
8.1.3 USB设备、配置、接口、端点185
8.1.4 USB设备状态188
8.1.5 USB枚举过程189
8.1.6 USB请求块(URB)192
8.2 USB主机驱动196
8.2.1 USB主机驱动结构和功能196
8.2.2 主机控制器驱动(usb_hcd)197
8.2.3 OHCI主机控制器驱动199
8.2.4 S3C24XX OHCI主机控制器驱动实例200
8.3 USB设备驱动203
8.3.1 USB骨架程序分析203
8.3.2 USB驱动移植的时钟设置207
8.4 USB鼠标键盘驱动208
8.4.1 USB鼠标驱动代码分析208
8.4.2 USB键盘驱动代码分析211
8.4.3 内核中添加USB鼠标键盘驱动214
8.5 U盘驱动215
8.5.1 内核配置215
8.5.2 移植和测试216
8.6 小结218
第9章 网卡驱动程序移植219
9.1 以太网概述219
9.1.1 以太网连接219
9.1.2 以太网技术概述220
9.1.3 以太网的帧结构222
9.2 网络设备驱动程序体系结构224
9.2.1 嵌入式Linux网络驱动程序介绍224
9.2.2 Linux网络设备驱动的体系结构225
9.2.3 网络设备驱动程序编写方法225
9.2.4 网络设备驱动程序应用实例227
9.3 net_device 数据结构228
9.3.1 全局信息228
9.3.2 硬件信息229
9.3.3 接口信息229
9.3.4 设备方法232
9.3.5 公用成员234
9.4 DM9000网卡概述234
9.4.1 DM9000网卡总体介绍235
9.4.2 DM9000网卡的特点235
9.4.3 内部寄存器236
9.4.4 功能描述240
9.5 DM9000网卡驱动程序移植241
9.5.1 DM9000网卡连接241
9.5.2 驱动分析--硬件的数据结构242
9.5.3 驱动分析--数据读写函数243
9.5.4 驱动分析--重置网卡243
9.5.5 驱动分析--初始化网卡243
9.5.6 驱动分析--打开和关闭网卡248
9.5.7 驱动分析--数据包的发送与接收249
9.5.8 DM9000网卡驱动程序移植251
9.6 小结254
第10章 音频设备驱动程序移植255
10.1 音频设备接口255
10.1.1 PCM(脉冲编码调制)接口255
10.1.2 IIS(Inter-IC Sound)接口255
10.1.3 AC97(Audio Codec 1997)接口255
10.1.4 Linux音频设备驱动框架256
10.2 Linux音频设备驱动--OSS驱动框架257
10.2.1 OSS驱动架构硬件257
10.2.2 OSS驱动架构代码257
10.2.3 OSS初始化函数oss_init()259
10.2.4 OSS释放函数oss_cleanup()260
10.2.5 打开设备文件函数sound_open()261
10.2.6 录音函数sound_read()262
10.2.7 播放函数sound_write()263
10.2.8 控制函数sound_ioctl()263
10.3 Linux音频设备驱动--ALSA驱动框架265
10.3.1 card和组件265
10.3.2 PCM设备269
10.3.3 控制接口272
10.3.4 AC97 API音频接口274
10.4 音频设备应用程序编写278
10.4.1 DSP接口编程278
10.4.2 MIXER接口编程281
10.4.3 ALSA应用程序编程282
10.5 音频设备驱动移植284
10.5.1 添加UDA1341结构体284
10.5.2 修改录音通道285
10.5.3 内核中添加UDA1341驱动支持286
10.5.4 移植新内核并进行测试287
10.6 音频播放程序madplay的移植288
10.6.1 准备移植需要的源文件288
10.6.2 交叉编译288
10.6.3 移植和测试290
10.6.4 编译中可能遇到的问题290
10.7 小结290
第11章 SD卡驱动移植291
11.1 SD卡简介291
11.1.1 SD卡系统概念291
11.1.2 SD卡寄存器291
11.1.3 SD功能描述292
11.2 SD卡驱动程序分析295
11.2.1 host驱动部分296
11.2.2 core驱动部分302
11.2.3 card驱动部分307
11.3 SD卡移植步骤310
11.3.1 添加延时和中断310
11.3.2 配置内核310
11.3.3 烧写新内核312
11.4 小结313
第12章 NandFlash驱动移植314
12.1 NandFlash介绍314
12.1.1 NandFlash命令介绍314
12.1.2 NandFlash控制器315
12.2 NandFlash驱动介绍316
12.2.1 Nand芯片结构316
12.2.2 NandFlash驱动分析317
12.3 NandFlash驱动移植323
12.3.1 内核的修改323
12.3.2 内核的配置和编译325
12.4 小结326
第4篇 系统移植高级篇
第13章 MiniGUI与移植328
13.1 MiniGUI在上位机中的安装328
13.1.1 安装需要的安装文件328
13.1.2 MiniGUI的运行模式328
13.1.3 编译并安装MiniGUI329
13.1.4 编译安装MiniGUI需要的图片支持库331
13.1.5 编译MiniGUI应用程序例子331
13.2 MiniGUI的交叉编译和移植332
13.2.1 交叉编译MiniGUI332
13.2.2 移植MiniGUI程序334
13.3 小结336
第14章 Qt开发与Qtopia移植337
14.1 Qt安装与编程337
14.1.1 下载安装Qt337
14.1.2 Qt编程338
14.1.3 使用qmake生成Makefile340
14.2 Qtopia Core在X86平台上的安装和应用341
14.2.1 Qtopia Core安装准备341
14.2.2 编译Qtopia Core343
14.2.3 Qtopia在X86平台上的应用开发343
14.3 Qtopia Core在嵌入式Linux上的移植347
14.3.1 Qtopia Core移植准备347
14.3.2 交叉编译Qtopia Core348
14.3.3 编译内核350
14.3.4 应用程序开发351
14.3.5 应用程序移植354
14.4 小结354
第15章 嵌入式数据库Berkeley DB移植355
15.1 数据库的基本概念355
15.1.1 利用文档和源代码355
15.1.2 创建环境句柄355
15.1.3 创建数据库句柄356
15.1.4 打开数据库357
15.1.5 DBT结构357
15.1.6 存取数据358
15.1.7 关闭数据库359
15.2 Berkeley DB数据库安装359
15.2.1 安装成C库359
15.2.2 安装成C++库360
15.2.3 交叉编译安装Berkeley DB360
15.3 使用Berkeley DB数据库362
15.3.1 代码分析362
15.3.2 编译运行程序365
15.4 移植Berkeley DB数据库366
15.4.1 数据库设计366
15.4.2 编写应用程序366
15.4.3 调试和交叉编译应用程序368
15.4.4 数据库的移植和测试369
15.5 小结369
第16章 嵌入式数据库SQLite移植370
16.1 SQLite支持的SQL语句370
16.1.1 数据定义语句370
16.1.2 数据操作语句371
16.2 SQLite数据库编译、安装和使用371
16.2.1 安装SQLite372
16.2.2 利用SQL语句操作SQLite数据库372
16.2.3 利用C接口访问SQLite数据库373
16.3 移植SQLite376
16.3.1 交叉编译SQLite376
16.3.2 交叉编译应用程序377
16.4 移植SQLite数据库377
16.4.1 文件移植378
16.4.2 运行应用程序378
16.4.3 测试sqlite3379
16.5 小结380
第17章 嵌入式Web服务器BOA移植381
17.1 BOA介绍381
17.1.1 BOA的功能381
17.1.2 BOA流程分析382
17.1.3 BOA配置信息385
17.2 BOA编译和HTML页面测试387
17.2.1 编译BOA源代码387
17.2.2 设置BOA配置信息388
17.2.3 测试BOA388
17.3 CGI脚本测试390
17.3.1 编写测试代码390
17.3.2 编译测试程序390
17.3.3 测试CGI脚本390
17.4 BOA交叉编译与移植391
17.4.1 交叉编译BOA391
17.4.2 准备测试程序391
17.4.3 配置BOA392
17.4.4 测试392
17.5 BOA与SQLite结合393
17.5.1 通过CGI程序访问SQLite393
17.5.2 编译和测试395
17.6 小结396
第18章 嵌入式Web服务器Thttpd移植397
18.1 Thttpd介绍397
18.1.1 Web服务器比较397
18.1.2 Thttpd的特点397
18.1.3 Thttpd核心代码分析398
18.2 Thttpd编译和HTML页面测试401
18.2.1 配置文件介绍401
18.2.2 Thttpd编译402
18.2.3 运行和测试Thttpd402
18.3 CGI脚本测试405
18.3.1 编写测试代码405
18.3.2 编译测试程序406
18.3.3 测试CGI脚本406
18.4 Thttpd交叉编译与移植406
18.4.1 交叉编译Thttpd406
18.4.2 交叉编译CGI程序407
18.4.3 移植Thttpd407
18.4.4 测试408
18.5 Thttpd与嵌入式数据库结合408
18.5.1 通过CGI程序访问SQLite409
18.5.2 编译和测试411
18.6 小结411
第19章 JVM及其移植412
19.1 JVM介绍412
19.1.1 JVM原理412
19.1.2 JVM支持的数据类型413
19.1.3 JVM指令系统414
19.1.4 JVM寄存器414
19.1.5 JVM栈结构414
19.1.6 JVM碎片回收堆417
19.1.7 JVM异常抛出和异常捕获417
19.2 类装载418
19.2.1 装载类的结构体418
19.2.2 装载类的操作419
19.3 垃圾回收421
19.3.1 mark-and-sweep回收算法422
19.3.2 分代回收算法423
19.3.3 增量收集424
19.4 解析器424
19.4.1 函数Interpret()424
19.4.2 函数FastInterpret()425
19.4.3 函数SlowInterpret ()427
19.5 Java编程浅析428
19.5.1 Java程序命令428
19.5.2 Java构造函数428
19.5.3 Java主函数428
19.5.4 Java程序编译与运行429
19.6 KVM执行过程429
19.6.1 KVM启动过程429
19.6.2 KVM用到的计数器清零432
19.6.3 KVM初始化内存管理433
19.6.4 KVM中的哈希表初始化434
19.6.5 KVM中的事件初始化435
19.6.6 KVM中的资源释放435
19.7 PC机安装JVM435
19.7.1 JVM在Windows上的安装436
19.7.2 JVM在Linux上的安装437
19.8 KVM移植和测试438
19.8.1 SDK安装和环境变量设置438
19.8.2 修改Makefile和代码438
19.8.3 KVM编译439
19.8.4 测试439
19.8.5 移植441
19.9 小结443
第20章 VoIP技术与Linphone编译444
20.1 VoIP介绍444
20.1.1 VoIP基本原理444
20.1.2 VoIP的基本传输过程445
20.1.3 VoIP的优势445
20.1.4 VoIP的实现方式445
20.1.5 VoIP的关键技术446
20.2 oSIP协议概述446
20.3 oSIP状态机447
20.3.1 ICT(Invite Client (outgoing) Transaction)状态机447
20.3.2 NICT(Non-Invite Client (outgoing) Transaction)状态机457
20.3.3 IST(Invite Server (incoming) Transaction)状态机457
20.3.4 NIST(Non-Invite Server (incoming) Transaction)状态机458
20.4 oSIP解析器459
20.4.1 初始化解析类型函数osip_body_init()459
20.4.2 释放函数osip_body_free()459
20.4.3 字符串到body类型转换函数osip_body_parse()460
20.4.4 body类型到字符串类型转换函数osip_body_to_str()460
20.4.5 克隆函数osip_body_clone()462
20.4.6 oSIP解析器分类464
20.5 oSIP事务层464
20.6 SIP建立会话的过程467
20.7 RTP协议468
20.7.1 RTP基本概念468
20.7.2 发送RTP470
20.7.3 接收RTP472
20.8 Linphone编译与测试474
20.8.1 编译Linphone需要的软件包474
20.8.2 X86平台上编译和安装475
20.8.3 Linphone测试478
20.8.4 进一步的测试和开发481
20.9 Linphone交叉编译482
20.9.1 Linphone的交叉编译482
20.9.2 Linphone的测试484
20.10 小结486
前言
随着各种芯片技术的发展,各种嵌入式产品也如雨后春笋一般地出现了。目前,嵌入式产品应用领域涉及移动通信、汽车、医疗、家电等很多领域。而且,如今的嵌入式硬件的速度和容量越来越接近于PC,因此在这些嵌入式产品上运行操作系统就成为了可能。一直以来,很多企业花费了巨大成本研发了大量运行在PC上的软件产品。如果将这些优秀的软件应用在嵌入式系统中,将会成为快速开发嵌入式系统,降低嵌入式产品开发成本,提高软件稳定性和安全性的重要途径。
目前,国内图书市场上专门介绍Linux系统移植的图书只有笔者2011年初出版的《Linux系统移植》一书。该书也是获得了大量读者好评的"Linux典藏大系"中的一个分册,出版后填补了该领域的空白。随着时间的推移和技术的发展,这本书已经逐渐不能适应读者的需求,因此笔者对这本书进行了升级和改版,便有了这本书的第2版。
本书第1版出版后深受读者好评,并被ChinaUNIX技术社区所推荐。但是随着技术的发展,本书第1版内容已经无法满足读者的学习需求。应广大读者的要求,我们结合Linux系统移植的最新技术推出了本书的第2版。相比第1版,第2版图书在内容上的变化主要体现在以下几个方面:
(1)操作系统版本由Fedora 6升级为Fedora 19。
(2)系统移植内核版本统一升级为2.6.32。
(3)编译工具GCC版本升级到4.4.3。
(4)MiniGUI、Qt、Berkeley DB、SQLite、Linphone等均升级为最新版本。
(5)将一些表达不准确的地方表述得更加准确。
本书特色
1.内容全面、选材具有特点
本书介绍了最小系统的引导程序移植、内核移植、文件系统移植、各种驱动移植等内容。另外,本书还专门介绍了嵌入式数据库、嵌入式GUI、嵌入式Web服务器、嵌入式JVM、VoIP技术等内容。对于数据库、GUI、Web服务器分别选择了两种进行介绍,读者可以从性能上进行对比,然后应用在自己的项目中。
2.内容由浅入深、循序渐进,可操作性强
本书按照由浅入深、循序渐进的梯度安排内容,适合各个层次的读者阅读。书中每章内容都遵循原理分析?代码、分析?编译?测试?移植的学习顺序,具有较强的可操作性。
3.编译过程详细
本书的编译过程都附有详细的编译命令,对于复杂的命令均给出了说明,方便读者实际操作。读者可以边阅读本书,边动手进行实验。
4.贯穿了大量的编译技巧,可迅速提升移植水平
本书在讲解编译过程时贯穿了大量的编译技巧,并针对移植过程中的编译错误介绍了如何发现错误的源头,同时给出了解决方法。这有利于读者解决类似的编译问题,提升系统移植的水平。
5.提供多媒体教学视频和源文件
本书赠送17.5小时多媒体教学视频和实例源文件,便于读者高效、直观地学习。这些学习资料需要读者按照封底的提示自行下载。