首页 技术 正文
技术 2022年11月23日
0 收藏 390 点赞 3,870 浏览 6272 个字

嵌入式LINUX基础教程  第2版

嵌入式LINUX基础教程  第2版

目录

第1章 入门 1
1.1 为什么选择Linux1
1.2 嵌入式Linux现状2
1.3 开源和GPL2
1.4 标准及相关组织3
1.4.1 Linux标准基础3
1.4.2 Linux基金会4
1.4.3 电信级Linux4
1.4.4 移动Linux计划:Moblin4
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 第一个用户空间进程:init13
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 970FX27
3.1.2 英特尔奔腾M27
3.1.3 英特尔凌动TM28
3.1.4 飞思卡尔MPC744828
3.1.5 配套芯片组28
3.2 集成处理器:片上系统30
3.2.1 Power架构30
3.2.2 飞思卡尔Power架构30
3.2.3 飞思卡尔PowerQUICC I31
3.2.4 飞思卡尔PowerQUICC II32
3.2.5 PowerQUICC II Pro32
3.2.6 飞思卡尔PowerQUICC III33
3.2.7 飞思卡尔QorIQTM34
3.2.8 AMCC Power架构36
3.2.9 MIPS38
3.2.10 Broadcom MIPS38
3.2.11 其他MIPS39
3.2.12 ARM40
3.2.13 德州仪器ARM40
3.2.14 飞思卡尔ARM42
3.2.15 其他ARM处理器43
3.3 其他架构43
3.4 硬件平台43
3.4.1 CompactPCI43
3.4.2 ATCA44
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 内核主体:vmlinux52
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 内核Makefile71
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.o84
5.2.2 内核启动:main.c85
5.2.3 架构设置86
5.3 内核命令行的处理87
5.4 子系统初始化92
5.5 init线程94
5.5.1 通过initcalls进行初始化95
5.5.2 initcall_debug96
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 inittab109
6.3.2 Web服务器启动脚本示例111
6.4 初始RAM磁盘112
6.4.1 使用initrd进行引导113
6.4.2 引导加载程序对initrd的
支持113
6.4.3 initrd的奥秘所在:
linuxrc115
6.4.4 initrd探究116
6.4.5 构造initrd镜像116
6.5 使用initramfs117
6.6 关机119
6.7 小结120
第7章 引导加载程序122
7.1 引导加载程序的作用122
7.2 引导加载程序带来的挑战123
7.2.1 DRAM控制器123
7.2.2 闪存与RAM123
7.2.3 镜像的复杂性124
7.2.4 执行环境126
7.3 通用引导加载程序:Das U-Boot126
7.3.1 获取U-Boot127
7.3.2 配置U-Boot127
7.3.3 U-Boot的监控命令129
7.3.4 网络操作130
7.3.5 存储子系统132
7.3.6 从磁盘引导133
7.4 移植U-Boot133
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 Lilo149
7.6.2 GRUB150
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 insmod162
8.2.2 lsmod163
8.2.3 modprobe163
8.2.4 depmod164
8.2.5 rmmod165
8.2.6 modinfo165
8.3 驱动程序方法166
8.3.1 驱动程序中的文件系统
操作166
8.3.2 设备号的分配169
8.3.3 设备节点和mknod169
8.4 综合应用170
8.5 在内核源码树外构建驱动171
8.6 设备驱动程序和GPL172
8.7 小结173
第9章 文件系统174
9.1 Linux文件系统概念175
9.2 ext2176
9.2.1 挂载文件系统177
9.2.2 检查文件系统的完整性178
9.3 ext3180
9.4 ext4182
9.5 ReiserFS182
9.6 JFFS2183
9.7 cramfs185
9.8 网络文件系统187
9.9 伪文件系统190
9.9.1 /proc文件系统191
9.9.2 sysfs194
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 在目标板上配置MTD205
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 配置UBIFS219
10.4.2 构建UBIFS镜像220
10.4.3 使用UBIFS作为根文件
系统222
10.5 小结222
第11章 BusyBox224
11.1 BusyBox简介224
11.2 BusyBox的配置225
11.3 BusyBox的操作227
11.3.1 BusyBox的init230
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 执行GDB255
13.1.3 GDB中的调试会话257
13.2 数据显示调试器258
13.3 cbrowser/cscope260
13.4 追踪和性能评测工具261
13.4.1 strace261
13.4.2 strace命令行选项264
13.4.3 ltrace266
13.4.4 ps267
13.4.5 top269
13.4.6 mtrace270
13.4.7 dmalloc272
13.4.8 内核oops274
13.5 二进制工具276
13.5.1 readelf277
13.5.2 使用readelf查看调试信息278
13.5.3 objdump280
13.5.4 objcopy281
13.6 其他二进制实用程序281
13.6.1 strip281
13.6.2 addr2line282
13.6.3 strings282
13.6.4 ldd282
13.6.5 nm283
13.6.6 prelink283
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 key320
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 Scratchbox349
16.2.1 安装Scratchbox349
16.2.2 创建一个交叉编译目标350
16.3 Buildroot351
16.3.1 安装Buildroot352
16.3.2 配置Buildroot352
16.3.3 构建Buildroot353
16.4 OpenEmbedded354
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章 实时Linux363
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 Lockup378
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 配置USB384
18.3 sysfs和USB设备命名388
18.4 实用的USB工具390
18.4.1 USB文件系统390
18.4.2 使用usbview392
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 usbmon402
18.6.2 实用USB杂记403
18.7 小结403
第19章 udev405
19.1 什么是udev405
19.2 设备发现406
19.3 udev的默认行为407
19.4 理解udev规则409
19.4.1 Modalias411
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 mdev423
19.8.2 配置mdev425
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版

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,894
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,422
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,240
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,054
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,683
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,720