嵌入式LINUX基础教程 第2版
嵌入式LINUX基础教程 第2版
目录
第1章 入门 1
1.1 为什么选择Linux 1
1.2 嵌入式Linux现状 2
1.3 开源和GPL 2
1.4 标准及相关组织 3
1.4.1 Linux标准基础 3
1.4.2 Linux基金会 4
1.4.3 电信级Linux 4
1.4.4 移动Linux计划:Moblin 4
1.4.5 服务可用性论坛 5
1.5 小结 5
第2章 综述 6
2.1 嵌入与非嵌入 6
2.2 剖析嵌入式系统 7
2.2.1 典型的嵌入式Linux开发环境 8
2.2.2 启动目标板 9
2.2.3 引导内核 10
2.2.4 内核初始化:概述 12
2.2.5 第一个用户空间进程:init 13
2.3 存储 14
2.3.1 闪存 14
2.3.2 NAND型闪存 15
2.3.3 闪存的用途 16
2.3.4 闪存文件系统 17
2.3.5 内存空间 17
2.3.6 执行上下文 19
2.3.7 进程虚拟内存 20
2.3.8 交叉开发环境 21
2.4 嵌入式Linux发行版 22
2.4.1 商业Linux发行版 24
2.4.2 打造自己的Linux发行版 24
2.5 小结 24
第3章 处理器基础 26
3.1 独立处理器 26
3.1.1 IBM 970FX 27
3.1.2 英特尔奔腾M 27
3.1.3 英特尔凌动TM 28
3.1.4 飞思卡尔MPC7448 28
3.1.5 配套芯片组 28
3.2 集成处理器:片上系统 30
3.2.1 Power架构 30
3.2.2 飞思卡尔Power架构 30
3.2.3 飞思卡尔PowerQUICC I 31
3.2.4 飞思卡尔PowerQUICC II 32
3.2.5 PowerQUICC II Pro 32
3.2.6 飞思卡尔PowerQUICC III 33
3.2.7 飞思卡尔QorIQTM 34
3.2.8 AMCC Power架构 36
3.2.9 MIPS 38
3.2.10 Broadcom MIPS 38
3.2.11 其他MIPS 39
3.2.12 ARM 40
3.2.13 德州仪器ARM 40
3.2.14 飞思卡尔ARM 42
3.2.15 其他ARM处理器 43
3.3 其他架构 43
3.4 硬件平台 43
3.4.1 CompactPCI 43
3.4.2 ATCA 44
3.5 小结 44
第4章 Linux内核:不同的视角 46
4.1 背景知识 46
4.1.1 内核版本 47
4.1.2 内核源码库 48
4.1.3 使用git下载内核代码 49
4.2 Linux内核的构造 49
4.2.1 顶层源码目录 49
4.2.2 编译内核 50
4.2.3 内核主体:vmlinux 52
4.2.4 内核镜像的组成部分 53
4.2.5 子目录的布局 56
4.3 内核构建系统 57
4.3.1 .config文件 57
4.3.2 配置编辑器 58
4.3.3 Makefile目标 61
4.4 内核配置 66
4.4.1 定制配置选项 68
4.4.2 内核Makefile 71
4.5 内核文档 72
4.6 获得定制的Linux内核 72
4.7 小结 73
第5章 内核初始化 75
5.1 合成内核镜像:Piggy及其他 75
5.1.1 Image对象 78
5.1.2 与具体架构相关的对象 78
5.1.3 启动加载程序 79
5.1.4 引导消息 80
5.2 初始化时的控制流 83
5.2.1 内核入口:head.o 84
5.2.2 内核启动:main.c 85
5.2.3 架构设置 86
5.3 内核命令行的处理 87
5.4 子系统初始化 92
5.5 init线程 94
5.5.1 通过initcalls进行初始化 95
5.5.2 initcall_debug 96
5.5.3 最后的引导步骤 97
5.6 小结 98
第6章 用户空间初始化 100
6.1 根文件系统 100
6.1.1 FHS:文件系统层次结构
标准 101
6.1.2 文件系统布局 101
6.1.3 最小化的文件系统 102
6.1.4 嵌入式根文件系统带
来的挑战 103
6.1.5 试错法 104
6.1.6 自动化文件系统构建工具 104
6.2 内核的最后一些引导步骤 104
6.2.1 第一个用户空间程序 106
6.2.2 解决依赖关系 106
6.2.3 定制的初始进程 107
6.3 init进程 107
6.3.1 inittab 109
6.3.2 Web服务器启动脚本示例 111
6.4 初始RAM磁盘 112
6.4.1 使用initrd进行引导 113
6.4.2 引导加载程序对initrd的
支持 113
6.4.3 initrd的奥秘所在:
linuxrc 115
6.4.4 initrd探究 116
6.4.5 构造initrd镜像 116
6.5 使用initramfs 117
6.6 关机 119
6.7 小结 120
第7章 引导加载程序 122
7.1 引导加载程序的作用 122
7.2 引导加载程序带来的挑战 123
7.2.1 DRAM控制器 123
7.2.2 闪存与RAM 123
7.2.3 镜像的复杂性 124
7.2.4 执行环境 126
7.3 通用引导加载程序:Das U-Boot 126
7.3.1 获取U-Boot 127
7.3.2 配置U-Boot 127
7.3.3 U-Boot的监控命令 129
7.3.4 网络操作 130
7.3.5 存储子系统 132
7.3.6 从磁盘引导 133
7.4 移植U-Boot 133
7.4.1 EP405的U-Boot移植 133
7.4.2 U-Boot Makefile中的配置
目标 134
7.4.3 EP405的第一次构建 135
7.4.4 EP405 处理器初始化 136
7.4.5 与具体板卡相关的初始化 138
7.4.6 移植总结 141
7.4.7 U-Boot镜像格式 141
7.5 设备树对象(扁平设备树) 143
7.5.1 设备树源码 145
7.5.2 设备树编译器 148
7.5.3 使用DTB的其他内核镜像 148
7.6 其他引导加载程序 149
7.6.1 Lilo 149
7.6.2 GRUB 150
7.6.3 其他更多的引导加载程序 151
7.7 小结 152
第8章 设备驱动程序基础 154
8.1 设备驱动程序的概念 154
8.1.1 可加载模块 155
8.1.2 设备驱动程序架构 155
8.1.3 最小设备驱动程序示例 156
8.1.4 模块构建的基础设施 157
8.1.5 安装设备驱动程序 160
8.1.6 加载模块 160
8.1.7 模块参数 161
8.2 模块工具 162
8.2.1 insmod 162
8.2.2 lsmod 163
8.2.3 modprobe 163
8.2.4 depmod 164
8.2.5 rmmod 165
8.2.6 modinfo 165
8.3 驱动程序方法 166
8.3.1 驱动程序中的文件系统
操作 166
8.3.2 设备号的分配 169
8.3.3 设备节点和mknod 169
8.4 综合应用 170
8.5 在内核源码树外构建驱动 171
8.6 设备驱动程序和GPL 172
8.7 小结 173
第9章 文件系统 174
9.1 Linux文件系统概念 175
9.2 ext2 176
9.2.1 挂载文件系统 177
9.2.2 检查文件系统的完整性 178
9.3 ext3 180
9.4 ext4 182
9.5 ReiserFS 182
9.6 JFFS2 183
9.7 cramfs 185
9.8 网络文件系统 187
9.9 伪文件系统 190
9.9.1 /proc文件系统 191
9.9.2 sysfs 194
9.10 其他文件系统 196
9.11 创建简单的文件系统 197
9.12 小结 199
第10章 MTD子系统 201
10.1 MTD概述 201
10.1.1 开启MTD服务 202
10.1.2 MTD基础 203
10.1.3 在目标板上配置MTD 205
10.2 MTD分区 205
10.2.1 使用Redboot分区表进行
分区 206
10.2.2 使用内核命令行传递分区
信息 210
10.2.3 映射驱动 211
10.2.4 闪存芯片驱动 213
10.2.5 与具体板卡相关的初始化 214
10.3 MTD工具 215
10.4 UBI文件系统 219
10.4.1 配置UBIFS 219
10.4.2 构建UBIFS镜像 220
10.4.3 使用UBIFS作为根文件
系统 222
10.5 小结 222
第11章 BusyBox 224
11.1 BusyBox简介 224
11.2 BusyBox的配置 225
11.3 BusyBox的操作 227
11.3.1 BusyBox的init 230
11.3.2 rcS初始化脚本示例 232
11.3.3 BusyBox在目标板上的
安装 233
11.3.4 BusyBox小应用 235
11.4 小结 235
第12章 嵌入式开发环境 237
12.1 交叉开发环境 237
12.2 对主机系统的要求 241
12.3 为目标板提供服务 242
12.3.1 TFTP服务器 242
12.3.2 BOOTP/DHCP 服务器 243
12.3.3 NFS服务器 245
12.3.4 目标板使用NFS挂载根
文件系统 247
12.3.5 U-Boot中使用NFS挂载根
文件系统的例子 248
12.4 小结 250
第13章 开发工具 252
13.1 GNU调试器(GDB) 252
13.1.1 调试核心转储 253
13.1.2 执行GDB 255
13.1.3 GDB中的调试会话 257
13.2 数据显示调试器 258
13.3 cbrowser/cscope 260
13.4 追踪和性能评测工具 261
13.4.1 strace 261
13.4.2 strace命令行选项 264
13.4.3 ltrace 266
13.4.4 ps 267
13.4.5 top 269
13.4.6 mtrace 270
13.4.7 dmalloc 272
13.4.8 内核oops 274
13.5 二进制工具 276
13.5.1 readelf 277
13.5.2 使用readelf查看调试信息 278
13.5.3 objdump 280
13.5.4 objcopy 281
13.6 其他二进制实用程序 281
13.6.1 strip 281
13.6.2 addr2line 282
13.6.3 strings 282
13.6.4 ldd 282
13.6.5 nm 283
13.6.6 prelink 283
13.7 小结 284
第14章 内核调试技术 286
14.1 内核调试带来的挑战 286
14.2 使用KGDB进行内核调试 287
14.2.1 KGDB的内核配置 288
14.2.2 在开启KGDB时引导
目标板 289
14.2.3 一些有用的内核断点 293
14.2.4 KGDB与控制台共享一个
串行端口 294
14.2.5 调试非常早期的内核代码 295
14.2.6 主线内核对KGDB的支持 296
14.3 内核调试技术 297
14.3.1 gdb远程串行协议 298
14.3.2 调试优化的内核代码 300
14.3.3 GDB的用户自定义命令 307
14.3.4 有用的内核GDB宏 307
14.3.5 调试可加载模块 315
14.3.6 printk调试 319
14.3.7 Magic SysReq key 320
14.4 硬件辅助调试 321
14.4.1 使用JTAG探测器对闪存
进行编程 322
14.4.2 使用JTAG探测器进行调
试 323
14.5 不能启动的情况 326
14.5.1 早期的串行端口调试输
出 326
14.5.2 转储printk的日志缓冲
区 327
14.5.3 使用KGDB调试内核异常 328
14.6 小结 329
第15章 调试嵌入式Linux应用程序 331
15.1 目标调试 331
15.2 远程(交叉)调试 331
15.3 调试共享程序库 335
15.4 调试多个任务 340
15.4.1 调试多个进程 340
15.4.2 调试多线程应用程序 342
15.4.3 调试引导加载程序/闪存
代码 345
15.5 其他远程调试选项 345
15.5.1 使用串行端口进行调试 345
15.5.2 附着到运行的进程上 346
15.6 小结 346
第16章 开源构建系统 348
16.1 为什么使用构建系统 348
16.2 Scratchbox 349
16.2.1 安装Scratchbox 349
16.2.2 创建一个交叉编译目标 350
16.3 Buildroot 351
16.3.1 安装Buildroot 352
16.3.2 配置Buildroot 352
16.3.3 构建Buildroot 353
16.4 OpenEmbedded 354
16.4.1 OpenEmbedded的组成 355
16.4.2 BitBake元数据 355
16.4.3 配方基础 356
16.4.4 任务 358
16.4.5 类 359
16.4.6 配置元数据 360
16.4.7 构建镜像 361
16.5 小结 362
第17章 实时Linux 363
17.1 什么是实时 363
17.1.1 软实时 363
17.1.2 硬实时 364
17.1.3 Linux调度 364
17.1.4 延时 364
17.2 内核抢占 365
17.2.1 抢占的障碍 366
17.2.2 抢占模式 367
17.2.3 SMP内核 368
17.2.4 抢占延时的根源 369
17.3 实时内核补丁 369
17.3.1 实时补丁的特性 370
17.3.2 O(1)调度器 371
17.3.3 创建实时进程 372
17.4 实时内核的性能分析 373
17.4.1 使用Ftrace追踪内核行为 373
17.4.2 检测抢占被关闭的延时 374
17.4.3 检测唤醒延时 375
17.4.4 检测中断被关闭的延时 377
17.4.5 检测Soft Lockup 378
17.5 小结 378
第18章 通用串行总线 379
18.1 USB概述 379
18.1.1 USB的物理拓扑结构 379
18.1.2 USB的逻辑拓扑结构 381
18.1.3 USB版本 382
18.1.4 USB连接器 382
18.1.5 USB线缆 383
18.1.6 USB模式 384
18.2 配置USB 384
18.3 sysfs和USB设备命名 388
18.4 实用的USB工具 390
18.4.1 USB文件系统 390
18.4.2 使用usbview 392
18.4.3 USB 实用程序(lsusb) 394
18.5 通用USB子系统 395
18.5.1 USB大容量存储类 395
18.5.2 USB HID类 397
18.5.3 USB CDC类驱动 398
18.5.4 USB网络支持 400
18.6 USB调试 401
18.6.1 usbmon 402
18.6.2 实用USB杂记 403
18.7 小结 403
第19章 udev 405
19.1 什么是udev 405
19.2 设备发现 406
19.3 udev的默认行为 407
19.4 理解udev规则 409
19.4.1 Modalias 411
19.4.2 典型的udev规则配置 414
19.4.3 udev的初始系统设置 415
19.5 加载平台设备驱动程序 417
19.6 定制udev的行为 419
19.7 持久的设备命名 420
19.8 udev和busybox配合使用 423
19.8.1 busybox mdev 423
19.8.2 配置mdev 425
19.9 小结 425
附录A 可配置的U-Boot命令 427
附录B BusyBox命令 430
附录C SDRAM接口注意事项 440
附录D 开源资源 447
附录E 简单的BDI-2000配置文件 449
下载地址:https://pan.baidu.com/s/1xfCmw5oRfPy_K-3FomOuqg
关注微信公众号获取提取码:
输入:lin9 获取提取码
嵌入式LINUX基础教程 第2版的更多相关文章
- 《嵌入式Linux基础教程学习笔记一》
常用书目下载地址:http://www.cnblogs.com/pengdonglin137/p/3688029.html 第二章 1.进程上下文和中断上下文(Page20) 当应用程序执行系统调用, ...
- 《嵌入式Linux基础教程》补充阅读建议电子数目下载
第二章 <Linux内核设计与实现(原书第三版)> <深入理解Linux内核(第三版)> <深入理解Linux虚拟内存管理> 其他与Linux相关的电子书下载地址: ...
- 嵌入式Linux开发教程:Linux常见命令(上篇)
摘要:这是对周立功编著的<嵌入式Linux开发教程>的第7期连载.本期刊载内容有关LinuxLinux常见命令中的导航命令.目录命令和文件命令.下一期将连载网络操作命令.安装卸载文件系统等 ...
- 《python基础教程(第二版)》学习笔记 基础部分(第1章)
<python基础教程(第二版)>学习笔记 基础部分(第1章)python常用的IDE:Windows: IDLE(gui), Eclipse+PyDev; Python(command ...
- Python基础教程-第3版(文字版) 超清文字-非扫描版 [免积分、免登录]
此处免费下载,无需账号,无需登录,无需积分.收集自互联网,侵权通知删除. 点击下载:Python基础教程-第3版 备用下载:Python基础教程-第3版
- 《HTML5与CSS3基础教程(第8版)》
<HTML5与CSS3基础教程(第8版)> 基本信息 原书名:HTML and CSS:visual quickstart guide 作者: (美)Elizabeth Castro ...
- HTML5与CSS3基础教程(第7版) 高清PDF扫描版
HTML5与CSS3基础教程(第7版)试读不仅介绍了文本.图像.链接.列表.表格.表单.多媒体等网页元素,也介绍了如何为网页设计结构.布局,添加动态效果.格式化等形式,此外还涉及调试和发布.聚合和吸引 ...
- HTML5与CSS3基础教程(第8版) PDF扫描版
<HTML5与CSS3基础教程(第8版)>自第1版至今,一直是讲解HTML和CSS入门知识的经典畅销书,全面系统地阐述HTML5和CSS3基础知识以及实际运用技术,通过大量实例深入浅出地分 ...
- 《python基础教程(第二版)》学习笔记 文件和素材(第11章)
<python基础教程(第二版)>学习笔记 文件和素材(第11章) 打开文件:open(filename[,mode[,buffering]]) mode是读写文件的模式f=open(r' ...
随机推荐
- linux系统查看系统内存和硬盘大小
1. 查看系统运行内存 free -m free -g(Gb查看) cat /proc/meminfo 2. 查看硬盘大小 df -hl
- 记一次对上传对jsp限制的绕过
当访问网站任何.jsp后缀的文件时都会显示如下图所示或者session timeout等提示, 并且网站防护会,对上传大马和一句话会被查杀. 解决方法: 利用jspx包含,利用jspx包含图片或者cs ...
- pandas 5 str 参考:https://mp.weixin.qq.com/s/Pwz9iwmQ_YQxUgWTVje9DQ
str的常用方法 方法 描述 cat() 连接字符串 split() 在分隔符上分割字符串 rsplit() 从字符串末尾开始分隔字符串 get() 索引到每个元素(检索第i个元素) join() 使 ...
- How to Start Up an Open Source Company
https://evolveum.com/start-open-source-company/ Evolveum is a successful open source company now. We ...
- getProperty获取属性值
- Mybatis框架-Delete节点元素的使用
这个就也比较简单,需求:将我们最新插入的那条数据删除掉,从用户表中. UserMapper.xml UserMapper.java 编写测试方法: @Test public void testDele ...
- 使用vue-cli3搭建项目过程
一.搭建前准备 node.js版本为8.9+: 安装模块:npm install -g n // 安装模块 这个模块是专门用来管理node.js版本的: 若原先已经安装,则更细模块:n stable ...
- 通过三层交换机实现不同VLAN间的通信
主机的IP地址以及子网掩码已列出,下面将讲解如何配置利用三层交换机来实现不同VLAN间的相互通信 SW1的命令: en //进入特权模式 conf t //全局模式 vlan 10 // ...
- 干货 | 10分钟带你全面掌握branch and bound(分支定界)算法-概念篇
00 前言 之前一直做启发式算法,最近突然对精确算法感兴趣了.但是这玩意儿说实话是真的难,刚好boss又叫我学学column generation求解VRP相关的内容.一看里面有好多知识需要重新把握, ...
- ES6 解构对象和数组
1.解构对象 let saveFiled = { extension: "jpg", name:"girl", size:14040 }; ES5 functi ...