嵌入式Linux基础教程(第2版)
图书信息
作者:(美)Christopher Hallinan 著,人民邮电 | 分类:科学技术,计算机/网络,操作系统,Linux
作者简介
作者简介 暂缺《嵌入式Linux基础教程(第2版)》作者简介
内容简介
内容简介 《图灵程序设计丛书:嵌入式Linux基础教程(第2版)》是嵌入式Linux的经典教程,介绍了引导加载程序、系统初始化、文件系统、闪存和内核、应用程序调试技巧等,还讲述了构建Linux系统的工作原理,用于驱动不同架构的配置,Linux内核源码树的特性,如何根据需求配制内核运行时的行为,如何扩展系统功能,用于构建完整嵌入式Linux发行版的常用构建系统,USB子系统和系统配置工具udev等内容。更重要的是,《图灵程序设计丛书:嵌入式Linux基础教程(第2版)》阐述了如何修改系统使之满足读者自身的需求,确保读者能够从中学习一些嵌入式工程中非常有用的提示和技巧。《图灵程序设计丛书:嵌入式Linux基础教程(第2版)》适合Linux程序员阅读,也可作为高等院校相关专业师生的参考读物。
目录
图书目录第1章 入门1.1 为什么选择Linux1.2 嵌入式Linux现状1.3 开源和GPL1.4 标准及相关组织1.4.1 Linux标准基础1.4.2 Linux基金会1.4.3 电信级Linux1.4.4 移动Linux计划:Moblin1.4.5 服务可用性论坛1.5 小结第2章 综述2.1 嵌入与非嵌入2.2 剖析嵌入式系统2.2.1 典型的嵌入式Linux开发环境2.2.2 启动目标板2.2.3 引导内核2.2.4 内核初始化:概述2.2.5 第一个用户空间进程:init2.3 存储2.3.1 闪存2.3.2 NAND型闪存2.3.3 闪存的用途2.3.4 闪存文件系统2.3.5 内存空间2.3.6 执行上下文2.3.7 进程虚拟内存2.3.8 交叉开发环境2.4 嵌入式Linux发行版2.4.1 商业Linux发行版2.4.2 打造自己的Linux发行版2.5 小结第3章 处理器基础3.1 独立处理器3.1.1 IBM 970FX3.1.2 英特尔奔腾M3.1.3 英特尔凌动TM3.1.4 飞思卡尔MPC74483.1.5 配套芯片组3.2 集成处理器:片上系统3.2.1 Power架构3.2.2 飞思卡尔Power架构3.2.3 飞思卡尔PowerQUICC I3.2.4 飞思卡尔PowerQUICC II3.2.5 PowerQUICC II Pro3.2.6 飞思卡尔PowerQUICC III3.2.7 飞思卡尔QorIQTM3.2.8 AMCC Power架构3.2.9 MIPS3.2.10 Broadcom MIPS3.2.11 其他MIPS3.2.12 ARM3.2.13 德州仪器ARM3.2.14 飞思卡尔ARM3.2.15 其他ARM处理器3.3 其他架构3.4 硬件平台3.4.1 CompactPCI3.4.2 ATCA3.5 小结第4章 Linux内核:不同的视角4.1 背景知识4.1.1 内核版本4.1.2 内核源码库4.1.3 使用git下载内核代码4.2 Linux内核的构造4.2.1 顶层源码目录4.2.2 编译内核4.2.3 内核主体:vmlinux4.2.4 内核镜像的组成部分4.2.5 子目录的布局4.3 内核构建系统4.3.1 .config文件4.3.2 配置编辑器4.3.3 Makefile目标4.4 内核配置4.4.1 定制配置选项4.4.2 内核Makefile4.5 内核文档4.6 获得定制的Linux内核4.7 小结第5章 内核初始化5.1 合成内核镜像:Piggy及其他5.1.1 Image对象5.1.2 与具体架构相关的对象5.1.3 启动加载程序5.1.4 引导消息5.2 初始化时的控制流5.2.1 内核入口:head.o5.2.2 内核启动:main.c5.2.3 架构设置5.3 内核命令行的处理5.4 子系统初始化5.5 init线程5.5.1 通过initcalls进行初始化5.5.2 initcall_debug5.5.3 最后的引导步骤5.6 小结第6章 用户空间初始化6.1 根文件系统6.1.1 FHS:文件系统层次结构标准6.1.2 文件系统布局6.1.3 最小化的文件系统6.1.4 嵌入式根文件系统带来的挑战6.1.5 试错法6.1.6 自动化文件系统构建工具6.2 内核的最后一些引导步骤6.2.1 第一个用户空间程序6.2.2 解决依赖关系6.2.3 定制的初始进程6.3 init进程6.3.1 inittab6.3.2 Web服务器启动脚本示例6.4 初始RAM磁盘6.4.1 使用initrd进行引导6.4.2 引导加载程序对initrd的支持6.4.3 initrd的奥秘所在:linuxrc6.4.4 initrd探究6.4.5 构造initrd镜像6.5 使用initramfs6.6 关机6.7 小结第7章 引导加载程序7.1 引导加载程序的作用7.2 引导加载程序带来的挑战7.2.1 DRAM控制器7.2.2 闪存与RAM7.2.3 镜像的复杂性7.2.4 执行环境7.3 通用引导加载程序:Das U-Boot7.3.1 获取U-Boot7.3.2 配置U-Boot7.3.3 U-Boot的监控命令7.3.4 网络操作7.3.5 存储子系统7.3.6 从磁盘引导7.4 移植U-Boot7.4.1 EP405的U-Boot移植7.4.2 U-Boot Makefile中的配置目标7.4.3 EP405的第一次构建7.4.4 EP405 处理器初始化7.4.5 与具体板卡相关的初始化7.4.6 移植总结7.4.7 U-Boot镜像格式7.5 设备树对象(扁平设备树)7.5.1 设备树源码7.5.2 设备树编译器7.5.3 使用DTB的其他内核镜像7.6 其他引导加载程序7.6.1 Lilo7.6.2 GRUB7.6.3 其他更多的引导加载程序7.7 小结第8章 设备驱动程序基础8.1 设备驱动程序的概念8.1.1 可加载模块8.1.2 设备驱动程序架构8.1.3 最小设备驱动程序示例8.1.4 模块构建的基础设施8.1.5 安装设备驱动程序8.1.6 加载模块8.1.7 模块参数8.2 模块工具8.2.1 insmod8.2.2 lsmod8.2.3 modprobe8.2.4 depmod8.2.5 rmmod8.2.6 modinfo8.3 驱动程序方法8.3.1 驱动程序中的文件系统操作8.3.2 设备号的分配8.3.3 设备节点和mknod8.4 综合应用8.5 在内核源码树外构建驱动8.6 设备驱动程序和GPL8.7 小结第9章 文件系统9.1 Linux文件系统概念9.2 ext29.2.1 挂载文件系统9.2.2 检查文件系统的完整性9.3 ext39.4 ext49.5 ReiserFS9.6 JFFS29.7 cramfs9.8 网络文件系统9.9 伪文件系统9.9.1 /proc文件系统9.9.2 sysfs9.10 其他文件系统9.11 创建简单的文件系统9.12 小结第10章 MTD子系统10.1 MTD概述10.1.1 开启MTD服务10.1.2 MTD基础10.1.3 在目标板上配置MTD10.2 MTD分区10.2.1 使用Redboot分区表进行分区10.2.2 使用内核命令行传递分区信息10.2.3 映射驱动10.2.4 闪存芯片驱动10.2.5 与具体板卡相关的初始化10.3 MTD工具10.4 UBI文件系统10.4.1 配置UBIFS10.4.2 构建UBIFS镜像10.4.3 使用UBIFS作为根文件系统10.5 小结第11章 BusyBox11.1 BusyBox简介11.2 BusyBox的配置11.3 BusyBox的操作11.3.1 BusyBox的init11.3.2 rcS初始化脚本示例11.3.3 BusyBox在目标板上的安装11.3.4 BusyBox小应用11.4 小结第12章 嵌入式开发环境12.1 交叉开发环境12.2 对主机系统的要求12.3 为目标板提供服务12.3.1 TFTP服务器12.3.2 BOOTP/DHCP 服务器12.3.3 NFS服务器12.3.4 目标板使用NFS挂载根文件系统12.3.5 U-Boot中使用NFS挂载根文件系统的例子12.4 小结第13章 开发工具13.1 GNU调试器(GDB)13.1.1 调试核心转储13.1.2 执行GDB13.1.3 GDB中的调试会话13.2 数据显示调试器13.3 cbrowser/cscope13.4 追踪和性能评测工具13.4.1 strace13.4.2 strace命令行选项13.4.3 ltrace13.4.4 ps13.4.5 top13.4.6 mtrace13.4.7 dmalloc13.4.8 内核oops13.5 二进制工具13.5.1 readelf13.5.2 使用readelf查看调试信息13.5.3 objdump13.5.4 objcopy13.6 其他二进制实用程序13.6.1 strip13.6.2 addr2line13.6.3 strings13.6.4 ldd13.6.5 nm13.6.6 prelink13.7 小结第14章 内核调试技术14.1 内核调试带来的挑战14.2 使用KGDB进行内核调试14.2.1 KGDB的内核配置14.2.2 在开启KGDB时引导目标板14.2.3 一些有用的内核断点14.2.4 KGDB与控制台共享一个串行端口14.2.5 调试非常早期的内核代码14.2.6 主线内核对KGDB的支持14.3 内核调试技术14.3.1 gdb远程串行协议14.3.2 调试优化的内核代码14.3.3 GDB的用户自定义命令14.3.4 有用的内核GDB宏14.3.5 调试可加载模块14.3.6 printk调试14.3.7 Magic SysReq key14.4 硬件辅助调试14.4.1 使用JTAG探测器对闪存进行编程14.4.2 使用JTAG探测器进行调试14.5 不能启动的情况14.5.1 早期的串行端口调试输出14.5.2 转储printk的日志缓冲区14.5.3 使用KGDB调试内核异常14.6 小结第15章 调试嵌入式Linux应用程序15.1 目标调试15.2 远程(交叉)调试15.3 调试共享程序库15.4 调试多个任务15.4.1 调试多个进程15.4.2 调试多线程应用程序15.4.3 调试引导加载程序/闪存代码15.5 其他远程调试选项15.5.1 使用串行端口进行调试15.5.2 附着到运行的进程上15.6 小结第16章 开源构建系统16.1 为什么使用构建系统16.2 Scratchbox16.2.1 安装Scratchbox16.2.2 创建一个交叉编译目标16.3 Buildroot16.3.1 安装Buildroot16.3.2 配置Buildroot16.3.3 构建Buildroot16.4 OpenEmbedded16.4.1 OpenEmbedded的组成16.4.2 BitBake元数据16.4.3 配方基础16.4.4 任务16.4.5 类16.4.6 配置元数据16.4.7 构建镜像16.5 小结第17章 实时Linux17.1 什么是实时17.1.1 软实时17.1.2 硬实时17.1.3 Linux调度17.1.4 延时17.2 内核抢占17.2.1 抢占的障碍17.2.2 抢占模式17.2.3 SMP内核17.2.4 抢占延时的根源17.3 实时内核补丁17.3.1 实时补丁的特性17.3.2 O(1)调度器17.3.3 创建实时进程17.4 实时内核的性能分析17.4.1 使用Ftrace追踪内核行为17.4.2 检测抢占被关闭的延时17.4.3 检测唤醒延时17.4.4 检测中断被关闭的延时17.4.5 检测Soft Lockup17.5 小结第18章 通用串行总线18.1 USB概述18.1.1 USB的物理拓扑结构18.1.2 USB的逻辑拓扑结构18.1.3 USB版本18.1.4 USB连接器18.1.5 USB线缆18.1.6 USB模式18.2 配置USB18.3 sysfs和USB设备命名18.4 实用的USB工具18.4.1 USB文件系统18.4.2 使用usbview18.4.3 USB 实用程序(lsusb)18.5 通用USB子系统18.5.1 USB大容量存储类18.5.2 USB HID类18.5.3 USB CDC类驱动18.5.4 USB网络支持18.6 USB调试18.6.1 usbmon18.6.2 实用USB杂记18.7 小结第19章 udev19.1 什么是udev19.2 设备发现19.3 udev的默认行为19.4 理解udev规则19.4.1 Modalias19.4.2 典型的udev规则配置19.4.3 udev的初始系统设置19.5 加载平台设备驱动程序19.6 定制udev的行为19.7 持久的设备命名19.8 udev和busybox配合使用19.8.1 busybox mdev19.8.2 配置mdev19.9 小结附录A 可配置的U-Boot命令附录B BusyBox命令附录C SDRAM接口注意事项附录D 开源资源附录E 简单的BDI-2000配置文件
推荐书籍
- 道教碑(赵孟书(元))
- 化学反应工程(第四版)(未知)
- 名校精英(宋立志,远方)
- 日本中老年时装(白锡尧编译,浙江人民)
- 江淮官话入声研究(石绍浪,北京语言大学)
- 建造师便携手册:建筑、机电卷(杜兰芝,高会芳 编,辽宁科学技术)
- 箭与靶:文坛名家笔战文编(许道明,陈麦青编评,上海文化)
- 文化创意产品项目实训教程(黄言涛 著,西安电子科技大学)
