嵌入式Linux基础教程

出版社:人民邮电出版社
出版日期:2009-11
ISBN:9787115215222
作者:哈利南
页数:341页

章节摘录

插图:Linux内核依靠硬件内存管理单元的优势实现了支持虚拟内存的操作系统。虚拟内存技术能够带来的最大好处是,可以更加有效地利用物理内存,并给用户提供远远大于实际物理内存的更大的可用地址空间。另一个好处是,内核可以为分配给某个任务或进程的地址空间设置访问权限,以阻止一个进程由于误操作而非法访问其他进程或整个操作系统的地址和资源。让我们来看看它是如何工作的。对虚拟内存系统整体性的介绍已经超出了本书的范围①,在这里我们将按照嵌入式系统开发者在实际工作中所接触的顺序,来逐一介绍虚拟内存的相关知识。2.3.6运行上下文在Linux启动运行的最初阶段,必须要做的一项工作,就是要配置好处理器的内存管理单元并初始化与之配套的数据结构,以支持虚拟地址到物理地址的转换。当这一步完成之后,内核就运行在它自己的虚拟地址空间中了。在最新的版本中,内核开发人员规定的内核虚拟地址默认为OxC0000000。在大多数体系结构中,这个地址被设置成可配置参数②。如果我们看一下内核符号表,将会发现所有的内核符号都以0xCOxxxxxx来编址。由此可见,当内核在内核空间执行代码时,处理器的IP指针都将指向这个地址范围中。在Linux中,根据指定线程③的运行环境,我们可以把它分为两个独立的运行上下文。当线程完全运行在内核空间时,我们称之为内核上下文,而应用程序则运行在用户空间上下文。

前言

如果早些看到Christopher Hallinan的这本书,我就不会在开发过程中走那么多弯路了!人类无限膨胀的欲望促进了嵌入式的发展。回想10年前,你能想象手机可以照相吗?你能想象汽车里会安装全球定位系统吗?今天看来,这些都是多么普通的功能,因为只要调用一些函数(压缩算法)就可以实现。但是你想过吗?如果没有操作系统的支持,很多复杂的功能是无法完成的。要从事嵌入式开发,掌握操作系统的知识是必要的本领之一。一个不可忽视的事实是电子产品的性能不断提升,而价格却在下降。开发商越来越重视成本。免费、自由的Linux无疑是一个强有力的竞争者。凭借优异的特性和良好的发展趋势,Linux轻而易举地坐上了嵌入式操作系统的头把交椅。嵌入式系统并不见得有多么高深,但是因为嵌入式系统本身涉及了很多学科,致使很多初学者时常深感迷茫,不知道从何入手,即便是编译环境都很难搭建,更不用说调试和部署了。幸运的是,Christopher Hallinan的这部著作为我们学习嵌入式系统提供了捷径。请允许我在此使用“捷径”一词,因为我在刚刚踏入嵌入式Linux大门时,其中的很多概念也一度让我觉得神秘而困惑。虽然网络搜索功能很强大,但是就如同迷失在一棵大树的树叶之间,你很难摸索到树干,找到正确的方向,而Christopher Hallinan的这本书就是指引我们前进的“树干”。更可贵的是,本书每章后都提供了相关参考资料,你会很容易地查找到需要了解的内容。在如此短的篇幅内阐述嵌入式Linux的方方面面是不可能的。但本书作者却让你在一本书中轻松地掌握了嵌入式开发的脉络,这是难能可贵的。本书内容广泛而又不乏深度,嵌入式L,inux开发的初学者和提高者都能从中获得巨大收获。

媒体关注与评论

“这本书很令我振奋,它为那些想在嵌入式系统中使用Linux的开发人员提供了极好的学习路线指导。本书内容简洁、准确,组织合理,Christopher的知识和见解贯穿全书,你不仅能得到很多信息和帮助,也能享受到阅读的乐趣。”  ——Arnold Robbins,著名Linux专家“本书涵盖了嵌入式Linux开发的方方面面……强烈推荐每一位嵌入式Linux开发人员阅读。”  ——LinuxQuestions.org

内容概要

Christopher Hallinan  著名嵌入式Linux技术专家。现任Monta Vista软件公司现场应用工程师,曾任3Com公司工程总监。他有25年以上网络和通信产品的软硬件开发经验。曾担任Linux咨询师,提供定制Linux主板接口、设备驱动程序和引导装入程序等方面的解决方案。

书籍目录

第1章 引言 11.1 为什么使用Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准和相关机构 31.4.1 LSB 31.4.2 OSDL 31.5 小结 4参考资源 4第2章 嵌入式初体验 52.1 需要嵌入式系统吗 52.2 嵌入式系统剖析 62.2.1 典型嵌入式Linux系统设置 72.2.2 启动目标板 82.2.3 启动内核 92.2.4 内核初始化概述 102.2.5 第一个用户空间进程:init 112.3 存储的思考 122.3.1 闪存 122.3.2 NAND闪存 132.3.3 闪存的用途 142.3.4 闪存文件系统 142.3.5 存储器空间 152.3.6 运行上下文 162.3.7 进程中的虚拟内存 172.3.8 交叉开发环境 192.4 嵌入式Linux的发行版 202.4.1 Linux商业发行版 212.4.2 Linux自定义发行版 212.5 小结 21参考资源 22第3章 处理器基础 233.1 单机处理器 233.1.1 IBM 970FX 243.1.2 Intel Pentium M 243.1.3 Freescale MPC7448 253.1.4 配套芯片组 253.2 集成化处理器:片上系统 273.2.1 PowerPC 273.2.2 AMCC PowerPC 273.2.3 Freescale PowerPC 303.2.4 MIPS 333.2.5 Broadcom MIPS 333.2.6 AMD MIPS 343.2.7 其他类型的MIPS 353.2.8 ARM 353.2.9 TI ARM 353.2.10 Freescale ARM 373.2.11 Intel ARM XScale 373.2.12 其他ARM 383.2.13 其他体系结构 383.3 硬件平台 383.3.1 CompactPCI 383.3.2 ATCA 393.4 小结 39参考资源 40第4章 Linux内核——不同视角 414.1 背景知识 414.1.1 内核的版本 424.1.2 内核源码库 434.2 Linux内核构造 444.2.1 顶层资源目录 444.2.2 编译内核 454.2.3 严格意义上的内核:vmlinux 464.2.4 内核映像组件 474.2.5 子目录结构 504.3 内核构建系统 504.3.1 .config文件 514.3.2 配置编辑器 524.3.3 makefile的目标 554.3.4 内核配置 584.3.5 自定义配置选项 594.3.6 内核makefile 624.3.7 内核文档 624.4 获取Linux内核 634.5 小结 64参考资源 64第5章 内核初始化 655.1 合成内核映像:piggy及其他 655.1.1 Image目标文件 675.1.2 体系结构相关的目标文件 685.1.3 第二阶段引导装入程序 695.1.4 引导信息 695.2 初始化控制流 725.2.1 内核入口点:head.o 735.2.2 内核启动:main.c 745.2.3 体系结构设置 755.3 内核命令行处理 755.4 子系统初始化 805.5 init线程 825.5.1 通过initcall初始化 835.5.2 引导的最后步骤 845.6 小结 85参考资源 85第6章 系统初始化 866.1 根文件系统 866.1.1 FHS 876.1.2 文件系统布局 876.1.3 最小文件系统 886.1.4 根文件系统带来的挑战 896.1.5 试错法 906.1.6 自动化文件系统构建工具 906.2 内核的最后引导过程 906.2.1 用户空间下第一个程序 916.2.2 解决依赖 926.2.3 定制初始化进程 926.3 init进程 926.3.1 inittab 956.3.2 Web服务器启动脚本示例 966.4 初始RAM磁盘 976.4.1 初始RAM磁盘的目的 986.4.2 使用initrd引导 986.4.3 引导装入程序对于initrd的支持 986.4.4 initrd的奥妙所在:linuxrc文件 1006.4.5 initrd探究 1006.4.6 构建initrd映像文件 1016.5 使用initramfs 1026.6 关机 1036.7 小结 103参考资源 104第7章 引导装入程序 1057.1 引导装入程序的作用 1057.2 引导装入程序的挑战 1067.2.1 DRAM控制器 1067.2.2 闪存与RAM 1067.2.3 映像的复杂性 1077.2.4 执行上下文 1087.3 通用的引导装入程序:Das U-Boot 1097.3.1 执行上下文 1097.3.2 U-Boot命令集 1117.3.3 网络操作 1117.3.4 存储子系统 1137.3.5 从磁盘启动:U-Boot 1137.4 移植U-Boot 1147.4.1 为EP405开发板移植U-Boot 1147.4.2 U-Boot的makefile配置目标 1157.4.3 EP405处理器初始化 1167.4.4 特定开发板的初始化 1177.4.5 移植概要 1207.4.6 U-Boot映像格式 1207.5 其他引导装入程序 1227.5.1 Lilo 1227.5.2 GRUB 1237.5.3 其他引导装入程序 1247.6 小结 124参考资源 124第8章 设备驱动程序基础 1268.1 设备驱动程序基本概念 1268.1.1 可加载模块 1278.1.2 设备驱动程序的体系结构 1278.1.3 最小设备驱动程序示例 1288.1.4 模块构建的基础设施 1298.1.5 安装设备驱动程序 1318.1.6 加载设备驱动程序模块 1328.2 模块实用程序 1338.2.1 insmod 1338.2.2 模块参数 1338.2.3 lsmod 1348.2.4 modprobe 1358.2.5 depmod 1368.2.6 rmmod 1368.2.7 modinfo 1378.3 驱动程序方法 1378.3.1 驱动程序文件系统操作 1388.3.2 设备节点与mknod 1408.4 汇总 1418.5 设备驱动程序与GPL 1438.6 小结 143参考资源 144第9章 文件系统 1459.1 Linux文件系统的概念 1469.2 ext2文件系统 1479.2.1 挂载文件系统 1489.2.2 文件系统完整性检查 1499.3 ext3文件系统 1509.4 ReiserFS文件系统 1529.5 JFFS2文件系统 1539.6 cramfs文件系统 1559.7 NFS文件系统 1569.8 伪文件系统 1609.8.1 proc文件系统 1609.8.2 sysfs文件系统 1629.9 其他文件系统 1649.10 构建简单的文件系统 1659.11 小结 166参考资源 166第10章 MTD子系统 16810.1 启用MTD服务 16810.2 MTD基础知识 17010.3 MTD分区 17210.3.1 Redboot分区表 17310.3.2 内核命令行分区 17610.3.3 映射驱动程序 17710.3.4 闪存芯片驱动程序 17810.3.5 特定开发板的初始化 17910.4 MTD实用程序 18010.5 小结 184参考资源 184第11章 BusyBox 18611.1 BusyBox简介 18611.2 BusyBox配置 18711.3 BusyBox操作 18911.3.1 BusyBox之init 19111.3.2 rcS初始化脚本示例 19311.3.3 在目标平台安装BusyBox 19311.3.4 BusyBox命令 19511.4 小结 196参考资源 196第12章 嵌入式开发环境 19712.1 交叉开发环境 19712.2 主机系统需求 20012.3 为目标板提供服务 20112.3.1 TFTP服务器 20112.3.2 BOOTP/DHCP服务器 20212.3.3 NFS服务器 20412.3.4 使用NFS为目标板挂载根文件系统 20512.3.5 U-Boot NFS根挂载示例 20612.4 小结 208参考资源 208第13章 开发工具 20913.1 GDB 20913.1.1 调试核心转储 21013.1.2 调用GDB 21113.1.3 GDB调试会话 21313.2 DDD 21413.3 cbrowser/cscope 21613.4 追踪和程序分析工具 21713.4.1 strace 21713.4.2 strace的变体 22013.4.3 ltrace 22113.4.4 ps 22213.4.5 top 22413.4.6 mtrace 22513.4.7 dmalloc 22613.4.8 内核oops 22813.5 二进制实用程序 23013.5.1 readelf 23013.5.2 使用readelf检查调试信息 23213.5.3 objdump 23313.5.4 objcopy 23413.6 其他二进制实用程序 23413.6.1 strip 23413.6.2 addr2line 23513.6.3 strings 23513.6.4 ldd 23513.6.5 nm 23613.6.6 prelink 23613.7 小结 237参考资源 237第14章 内核调试技术 23814.1 内核调试的难点 23814.2 使用KGDB调试内核 23914.2.1 KGDB内核配置 24014.2.2 支持KGDB的内核启动 24114.2.3 有用的内核断点 24314.3 Linux内核的调试 24414.3.1 gdb远程串口协议 24414.3.2 调试优化后的内核代码 24714.3.3 gdb用户定义命令 25114.3.4 有用的内核gdb宏 25214.3.5 调试可加载模块 25814.3.6 printk调试 26214.3.7 Magic SysReq键 26314.4 硬件辅助调试 26314.4.1 使用JTAG探测器对闪存编程 26514.4.2 用JTAG探测器进行调试 26614.5 无法启动时 26814.5.1 早期串口调试输出 26914.5.2 转储printk日志缓冲区 27014.5.3 KGDB捕捉崩溃 27114.6 小结 272参考资源 272第15章 调试嵌入式Linux应用程序 27415.1 目标机调试 27415.2 远程(交叉)调试 27415.3 使用共享库进行调试 27815.4 多任务调试 28215.4.1 多进程的调试 28215.4.2 多线程应用程序的调试 28415.4.3 引导装入程序/闪存代码的调试 28615.5 远程调试的附加选项 28715.5.1 串行端口调试 28715.5.2 绑定到正在运行的进程 28715.6 小结 288参考资源 288第16章 移植Linux 28916.1 Linux源代码的组织 28916.2 为开发板定制Linux 29116.2.1 前提和假设 29116.2.2 定制内核初始化 29216.2.3 静态内核命令行 29416.3 平台初始化 29516.3.1 早期变量访问 29816.3.2 开发板信息结构 29916.3.3 机器相关的调用 30116.4 汇总 30216.5 小结 304参考资源 304第17章 Linux与实时 30517.1 什么是实时 30517.1.1 软实时 30517.1.2 硬实时 30617.1.3 Linux 调度 30617.1.4 中断延迟 30617.2 内核抢占 30717.2.1 抢占的缺陷 30717.2.2 抢占模型 30817.2.3 SMP内核 30917.2.4 抢占延迟源 31017.3 实时内核补丁 31017.3.1 实时的特性 31117.3.2 O(1)调度器 31317.3.3 创建实时进程 31317.3.4 临界区管理 31417.4 调试实时内核 31417.4.1 软锁检测 31417.4.2 抢占调试 31517.4.3 调试唤醒时间 31517.4.4 唤醒延迟历史 31517.4.5 中断响应时间 31617.4.6 中断响应历史 31617.4.7 延迟跟踪 31717.4.8 调试死锁环境 31817.4.9 锁模式的运行时控制权 31917.5 小结 319参考资源 319附录A 可配置的U-Boot命令 320附录B BusyBox命令 322附录C SDRAM接口的注意事项 328附录D 开源项目资源 334附录E BDI-2000配置文件示例 336

编辑推荐

《嵌入式Linux基础教程》:广泛的硬件支持、高效稳定的内核、开源共享的软件、优秀的开发工具、完善的网络通信和文件管理机制等特点,使嵌入式Linux获得了广泛应用,已成为嵌入式开发的主流平台。《嵌入式Linux基础教程》是嵌入式Linux领域名著。全面深入而又简明地阐述了构建嵌入式LirIUX系统的精髓。书中不仅剖析了嵌入式Linux系统,而且描述了处理器、内核、引导装入程序、设备驱动程序、文件系统等关键组件。介绍了嵌入式LirlUX系统的开发工具和调试技术。书中作者多年积累总结的嵌入式Linux开发技巧和提示,无论对初学者还是有经验的开发人员,都弥足珍贵。译者特别提供了《嵌入式Linux基础教程》内容的答疑服务,网址为http://www.farsight.com.cn/FarsightBBS/irldex.aspo嵌入式Linux权威著作Amazon全五星评价全面剖析嵌入式Linux开发,揭示大量技术内幕

作者简介

《嵌入式Linux基础教程》是嵌入式Linux的经典教程,介绍了引导装入程序、系统初始化、文件系统、闪存和内核、应用程序调试技巧等,还讲述了构建Linux系统的工作原理,用于驱动不同体系结构的配置,Linux内核源码树的特性,如何根据需求配制内核运行时的行为,如何扩展系统功能等内容。更重要的是,《嵌入式Linux基础教程》阐述了如何修改系统使之满足读者自己的需求,使读者能从中学习一些嵌入式工程中非常有用的提示和技巧。
《嵌入式Linux基础教程》适合Linux程序员阅读,也可作为高等院校相关专业师生的参考读物。

点击链接进入新版: 嵌入式Linux基础教程(第2版)

图书封面


 嵌入式Linux基础教程下载 更多精彩书评



发布书评

 
 


精彩书评 (总计1条)

  •     该书就是很全面,从构建linux,根文件系统,驱动,开发工具,调试等都讲了。对于我等没linux概念的人是很好的入门教程。有点类似 构建嵌入式linux系统。看完之后,再找本 实验的书比较好。

精彩短评 (总计20条)

  •     我都有点”崇外“了!读外后总算把住了嵌入式的纲了!以前总感觉实在沙里游!没有一个脉络!现在可以晋级了!
  •     把我们带入了嵌入式linux的世界中,不深不浅。对进一步学习很有帮助。
  •     原版的确算好书,但不知道翻译得怎么样,还有就是价格有些高
  •     最近借了该书再看,感觉很好,原作者果然很强!翻译质量尚可,没有太多明显的错误。虽是“基础”,但不太适合入门。
  •     粗看 已经很不错了,但rootfs 这一块讲的不好
  •     讲的比较全面,基本都概括了,没有shell部分,比较特别
  •     一年半以前,我开始在Linux上做产品应用开发(Powerpc平台),之前只是听说过Linux,从未接触. 项目组有高手负责uboot和驱动,负责让裁剪版的linux在开发板上跑起来。我不想深究Linux内核高深的机理。我只是想知道:Linux系统是在板子上的启动过程,调试手段为什么是眼前这样,这本书让我理解了这些最基本的问题,而且这本书的内容比较新。只要你稍有Linux嵌入式开发经验,这是一本必读的好书。《UNIX环境高级编程》可以当做编程的手册来查,这本书不是这样。
  •     个人觉得是一本不错的书。比较侧重开发实战方面的知识,而且脉络还比较清晰,知识也比较系统。和当前市面上很多书不同,当前市面的书比较侧重操作系统理论和操作系统内核的实现。也算是弥补了当前市场的一个空白。
  •     基本上是本好书,败给翻译了
  •     内容如书名,很好。物有所值,是一本嵌入式Linux的入门书籍,内容全面。作为入门,深度不可要求过高。
  •     确实是基础教程,不过感觉看了没价值
  •     有点像机器翻译,很多本意没有翻译出来,对着英文版的来看看就知道了,很不通顺,英文版的看过很好,容易懂。这本,翻译部咋地,而且难懂呐
  •     很不错,该讲的都讲了。很多年前买的,还能评论了,就评论了。
  •     基本读完,可惜没动手。收获颇丰,主要是一些基础知识的补充。内核调试那块跳过了,日后再读吧。。
  •     · 嵌入式Linux权威著作 · Amazon全五星评价 · 全面剖析构建嵌入式Linux开发,揭示大量技术内幕
  •     看过了。入门后,一看这本书。咦?原来这里有介绍啊!然后,就没然后了。我觉得更适合各种东西都学过之后,一直不知之间什么联系的。再看看这本就知道原来这么回事啊。
  •     语言干涩难懂,没使用价值
  •     总体来说,还是不错的,对于linux初学者来说,还算不错的入门,相对来说,对LINUX一个大体的描述,不是很深入。让初学者有个概念。适合入门。
  •     较其他类似图书讲解的要全面一些,发现了一些独有的地方
  •     一点都不适合出血者,有点像广告。什么都提了一点,但是都是要求你去参考别的书籍。
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024