当前位置:主页 > 书籍配套资源 > Linux编程配套资源
《嵌入式Linux编程》源代码

《嵌入式Linux编程》源代码

  • 更新:2022-03-02
  • 大小:29.5 MB
  • 类别:Linux编程
  • 作者:克里斯?西蒙兹
  • 出版:机械工业出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

本书是按典型的嵌入式Linux项目的生命周期线组织的。前6章介绍如何建立项目,组织、Linux系统,以及选择合适的Linux构建系统。下一步,到达需要对系统架构和设计选择做出某些关键决策的阶段,包括闪存、设备驱动程序和init系统。接着,是利用已构建的嵌入式平台编写应用程序的阶段,其中有两章是关于进程、线程和内存管理的。最后,来到调试和优化平台的阶段,这是在第12章和第13章讨论的。最后一章描述如何为实时应用程序配置Linux。

嵌入式Linux是以Linux为基础的嵌入式操作系统,它继承了Internet上海量的开放源代码资源,有许多公开的代码可以参考和移植,具有软件移植容易,代码开放,实时性、稳定性、安全性高,应用软件支持广泛,产品开发周期短,新产品上市迅速等优点,已经在移动电话、媒体播放器、消费性电子产品以及航空航天等领域中得到广泛应用。

嵌入式Linux具有其他嵌入式系统所不具备的优势。首先,Linux是开放源代码的,不存在黑箱技术,遍布全球的众多Linux开发者提供强大技术支持;其次,Linux的内核小、效率高,内核的更新速度很快;再次,Linux是一个跨平台的系统,适应于多种CPU和硬件平台,而且性能稳定,可高度定制,开发和使用非常方便;最后,Linux内核对于TCP/IP协议簇具有完备的支持,扩展性强,非常适合于网络设备的开发和应用。

本书遵循典型的嵌入式Linux项目生命周期过程组织,全面地介绍了嵌入式Linux的编程技术。本书作者是一名具有多年嵌入式Linux开发经验的咨询顾问和培训师。本书详细描述了如何使用免费的开放源码项目构建一个健壮、可靠、高效的嵌入式Linux系统,并且使用实例来说明最佳实践。本书前6章介绍如何建立项目,组织Linux系统,以及选择合适的Linux构建系统。接着讨论系统架构和设计选择,包括闪存、设备驱动程序和init系统,以及如何利用已构建的嵌入式平台编写应用程序。最后,介绍如何调试和优化,以及如何为实时应用程序配置Linux。
本书由王春雷组织翻译,梁洪亮、朱华等参与了本书的翻译、校对等工作。译者在翻译的过程中,得到了机械工业出版社编辑的支持和帮助,在此深表感谢。限于时间以及译者水平和经验的不足,译文中难免存在一些不当之处,恳请读者提出宝贵的意见。

Linux是一个非常灵活和强大的操作系统,而我认为,我们还没有真正看到它在嵌入式世界中得到充分利用。一个可能的原因是,Linux有着众多不同的方面,并且它的学习曲线可能十分陡峭和耗时。

正如我自己在过去十年中所做的,你有可能描绘出自己通向嵌入式Linux世界的方式,但是我很高兴地看到像克里斯这样的人士,将许多有用的主题聚焦在一起,汇总为本书,给读者提供了一个很好的学习嵌入式Linux的平台。当我开始学习的时候,当然希望可以将本书作为指导!

很显然,我对于Yocto项目有着自己的个人见解,这也是我的主要贡献并且试图使得嵌入式Linux世界有所不同。它的核心目标之一是尝试并且使得人们在构建嵌入式Linux系统时,事情能变得更加简单。我们已经取得了一些成功,但是还有一些领域仍然需要继续探索。我们不断尝试简化学习的门槛从而让更多的人参与进来,使技术更容易获得和采用。

在写这本书时,克里斯也在为同样的目标努力。我希望你喜欢这本书,喜欢Linux,最终我们将会看到你成为这个充满活力的开源社区的一部分,该社区也同样包含着你即将学习的众多元素。

封面图

目录

  • 译者序
  • 推荐序
  • 审校者简介
  • 前言
  • 第1章概述1
  • 1.1选择合适的操作系统2
  • 1.2参与者3
  • 1.3项目生命周期4
  • 1.4开放源码5
  • 1.5嵌入式Linux系统硬件6
  • 1.6本书使用的硬件7
  • 1.7本书使用的软件9
  • 1.8总结9
  • 第2章学习工具链10
  • 2.1工具链是什么10
  • 2.2工具链类型:本地工具链和交叉工具链11
  • 2.3选择C库13
  • 2.4寻找工具链14
  • 2.5工具链解析17
  • 2.6工具链中的其他工具20
  • 2.7查看C库的组件21
  • 2.8链接库:静态和动态链接21
  • 2.9 交叉编译艺术24
  • 2.10交叉编译的问题28
  • 2.11总结29
  • 第3章引导加载程序30
  • 3.1引导加载程序都做了些什么30
  • 3.2引导序列31
  • 3.3使用UEFI固件引导32
  • 3.4从引导加载程序到内核33
  • 3.5设备树介绍34
  • 3.6选择引导加载程序38
  • 3.7U-Boot39
  • 3.8Barebox49
  • 3.9总结51
  • 第4章移植与配置内核52
  • 4.1内核做了什么52
  • 4.2选择内核53
  • 4.3内核构建55
  • 4.4编译60
  • 4.5清理内核源63
  • 4.6启动你的内核63
  • 4.7将Linux移植到新板上66
  • 4.8延伸阅读69
  • 4.9总结69
  • 第5章构建根文件系统71
  • 5.1根文件系统是什么71
  • 5.2根文件系统的程序75
  • 5.3根文件系统库78
  • 5.4设备节点79
  • 5.5proc与sysfs文件系统80
  • 5.6内核模块81
  • 5.7把根文件系统转移到目标81
  • 5.8创建启动内存磁盘82
  • 5.9init程序85
  • 5.10配置用户账号86
  • 5.11启动守护进程87
  • 5.12管理设备节点的更好方法88
  • 5.13配置网络89
  • 5.14借助设备表创建文件系统映像90
  • 5.15使用NFS挂载根文件系统92
  • 5.16使用TFTP加载内核94
  • 5.17延伸阅读95
  • 5.18总结95
  • 第6章选择构建系统96
  • 6.1不再手动创建嵌入式Linux96
  • 6.2构建系统96
  • 6.3包格式和包管理器98
  • 6.4Buildroot98
  • 6.5Yocto项目104
  • 6.6延伸阅读116
  • 6.7总结116
  • 第7章创建存储策略117
  • 7.1存储器选择117
  • 7.2从引导加载程序访问闪存121
  • 7.3从Linux中访问闪存122
  • 7.4闪存文件系统127
  • 7.5NOR和NAND闪存的文件系统128
  • 7.6托管闪存的文件系统134
  • 7.7只读压缩文件系统138
  • 7.8临时文件系统138
  • 7.9使根文件系统为只读139
  • 7.10文件系统选择140
  • 7.11现场更新140
  • 7.12延伸阅读142
  • 7.13总结143
  • 第8章设备驱动程序介绍144
  • 8.1设备驱动程序的作用144
  • 8.2字符设备145
  • 8.3块设备147
  • 8.4网络设备147
  • 8.5在运行时寻找驱动程序149
  • 8.6找到正确的设备驱动程序153
  • 8.7用户空间中的设备驱动程序153
  • 8.8编写内核设备驱动程序158
  • 8.9加载内核模块163
  • 8.10查找硬件配置163
  • 8.11延伸阅读166
  • 8.12总结167
  • 第9章启动初始化程序168
  • 9.1在内核启动后168
  • 9.2初始化程序简介169
  • 9.3BusyBox init169
  • 9.4System V init171
  • 9.5systemd176
  • 9.6延伸阅读181
  • 9.7总结181
  • 第10章学习进程和线程182
  • 10.1进程还是线程182
  • 10.2进程183
  • 10.3线程191
  • 10.4调度196
  • 10.5延伸阅读200
  • 10.6总结200
  • 第11章内存管理201
  • 11.1虚拟内存基础201
  • 11.2内核空间内存布局202
  • 11.3用户空间内存布局205
  • 11.4进程内存映射206
  • 11.5交换207
  • 11.6用mmap映射内存208
  • 11.7我的应用程序使用了多少内存209
  • 11.8每个进程的内存使用情况210
  • 11.9识别内存泄漏213
  • 11.10内存耗尽215
  • 11.11延伸阅读217
  • 11.12总结217
  • 第12章使用GDB调试218
  • 12.1GNU调试器:GDB218
  • 12.2准备调试218
  • 12.3使用GDB调试应用程序219
  • 12.4使用gdbserver远程调试219
  • 12.5开始调试221
  • 12.6调试共享库224
  • 12.7即时调试225
  • 12.8调试分叉和线程226
  • 12.9核心文件226
  • 12.10GDB用户界面228
  • 12.11调试内核代码230
  • 12.12延伸阅读237
  • 12.13总结237
  • 第13章剖析和跟踪238
  • 13.1观察者效应238
  • 13.2开始剖析239
  • 13.3使用top进行剖析240
  • 13.4介绍perf241
  • 13.5其他剖析器:OProf ile和gprof245
  • 13.6跟踪事件247
  • 13.7介绍Ftrace247
  • 13.8使用LTTng252
  • 13.9使用Valgrind剖析应用程序256
  • 13.10Callgrind256
  • 13.11Helgrind256
  • 13.12使用strace显示系统调用257
  • 13.13总结259
  • 第14章实时编程260
  • 14.1什么是实时性260
  • 14.2确认非确定性的来源262
  • 14.3理解调度延迟263
  • 14.4内核抢占263
  • 14.5实时Linux内核(PREEMPT_RT)264
  • 14.6线程化中断处理程序264
  • 14.7可抢占的内核锁266
  • 14.8获得PREEMPT_RT补丁266
  • 14.9高精度定时器267
  • 14.10在实时应用中避免页面错误268
  • 14.11中断屏蔽269
  • 14.12测量调度延迟269
  • 14.13延伸阅读273
  • 14.14总结273

资源下载

资源下载地址1:https://pan.baidu.com/s/1kShDwvFEDF860mft0rboUg

相关资源

网友留言