内容简介
本书共13章,操作系统部分涉及内存管理、进程管理、文件系统、同步管理,以及系统调用。SoC部分涉及SoC启动的过程、设备模型、设备树原理、电源模块、时钟模块、引脚模块、时间模块以及中断模块,这些模块都是芯片运行的基本要求。作者站在一线开发者的角度先剖析了Kernel 6.6的实现原理,然后结合恩智浦i.MX9芯片的SoC硬件原理,由浅入深地讲解了操作系统和SoC的不解之谜。
经常书评
业内专家
芯片与操作系统成为业界当下的热点。然而,业界少有从打通操作系统和芯片开发角度讲解的技术书籍。本书的特色在于挖掘Linux核心技术,剖析难点痛点,打通Linux操作系统与芯片开发链路,为嵌入式系统工程师、芯片设计工程师等从业者拓宽技术视野,助力我国在芯片与操作系统关键领域技术人才的培养。
——上海交通大学特聘教授、OpenHarmony技术指导委员会主席、华为中央软件院副总裁、华为基础软件首席科学家,陈海波
这是一本少见的将内核(软件)和芯片(硬件)贯穿在一起阐述相关原理及其实现的书籍,是作者的心血之作,对内核开发者和芯片设计者均有裨益。相信可极大助力信创产业的发展。
——飞漫科技创始人,魏永明
作者是我多年未曾谋面的网友,一直致力于Linux系统下的一线研发工作。令人欣喜的是,盼盼凭借他多年的实战经验,深入剖析了从Linux操作系统到SoC芯片驱动的每一个环节,不仅详细阐述了它们的运作原理,更是洞察了背后的深层逻辑。对于那些渴望提升技术实力的技术爱好者来说,这无疑是一个极佳的起点,可成为升职加薪、进军大厂的得力助手!
——RT-Thread创始人,熊谱翔
Linux系统庞大而复杂,一个原因在于缺乏文档。阅读源码当然是本质的方法,但是你从哪个文件开始?函数调用过程如何?你能理清楚这些,其实已经消耗了极多的时间。本书讲解各个模块时,把它的主体调用过程罗列了出来,跟着本书可以快速掌握这些模块的主体框架、使用流程,然后再去阅读源码会事半功倍。
——深圳百问网科技有限公司创办人,韦东山
提前拜读了盼盼的这本书,受益匪浅,该书的突出特点是文字简练、结构清晰、内容翔实,很适合Linux开发者学习使用。
——CLK导师团成员、Linux内核多个项目的作者,宋宝华
操作系统方面的知识是计算机科学中需要掌握的,而Linux内核是人类历史上开放的,也是重要的和应用很多的,因为它已经属于全人类而不是某人某公司某国家。
操作系统是应用与硬件的桥梁。
盼盼是我认识很久的一位非常热衷对操作系统和芯片进行研究的工程师,这本书体现了他积累的丰富的、宝贵的行业实践经验。本书对新一代的系统工程师来说是非常好的入门指南,因为它既有操作系统有关方面的知识,也有硬件芯片实操方面的内容介绍。祝读者朋友们在阅读这本书的过程中收获快乐及能力提升。
——深度数智/鉴释科技创始人,梁宇宁
如果大家想要了解Linux内核如何管理和驱动硬件的工作原理,相信这本书会给您带来很多帮助。作者一直工作在开发一线,书中很多内容都是作者的经验总结,结合软件代码和硬件原理讲解,实践性很强。这本书对不了解硬件的软件工程师来说也是一个很好的知识补充。
——荣耀软件工程技术负责人,赵俊民
作者是我多年的朋友,凭借在国际顶尖科技公司多年的芯片开发和Linux内核经验,他将复杂的芯片架构与操作系统机制以清晰、系统的方式呈现给读者。这本书既适合芯片开发者理解操作系统,也适合Linux内核开发者深入硬件底层。
——八英里电子科技有限公司创始人,王晓辉
我长期阅读作者的“人人极客社区”自媒体,文章软硬结合、图文并茂、深入浅出、条分缕析,受益匪浅,建议阅读此书的读者也去关注他的自媒体,定会收获满满!
——泰晓科技Linux技术社区创始人,吴章金
本书的出版令人兴奋,作者高屋建瓴,同时从芯片和操作系统角度讲解技术,深入浅出地打通二者之间的关系,别具一格,对有志提升底层内功的朋友很有帮助!
——银河雷神特大型自研操作系统作者,谢宝友
行业媒体
Linux几乎是近些年中所有重要技术的基石。现代的技术里上到各种流行的互联网应用后台架构,下到各种芯片的开发都依赖Linux内核。本书几乎涵盖了Linux内核中的所有重要模块,既包括内存、进程、文件系统等核心模块,也涵盖了电源、时钟、设备、中断等。对于想系统学习Linux内核工作内部机制的同学来说,本书非常合适。
——自媒体“开发内功修炼”作者,张彦飞
这本书带来一个全新的视角和思路,犹如一座桥梁,连接起了操作系统与芯片开发。操作系统偏“软”,芯片开发偏“硬”,有了前面的操作系统的基础,芯片开发自然水到渠成,不论是启动过程,还是芯片的设备管理。而芯片中和操作系统息息相关的硬件资源,如电源、时钟、引脚、时间模块等,书中也有详细的基础讲解和对应的操作过程。如此一来,便可以打通从芯片系统到硬件开发的所有步骤。
——达尔闻创始人,妮mo
从书名可知,这本书是市面上少有的能够同时讲清Linux操作系统和底层SoC关键原理的图书,硬件芯片是载体,软件系统是灵魂,软硬结合才是真正的嵌入式。作者在国际领先芯片原厂辛勤工作十余年,对芯片内部的各个模块了如指掌,在此基础上,作者充分挖掘了Linux
目录
第1章内存管理
1.1内存管理的机制
1.1.1分段机制
1.1.2分页机制
1.2CPU访问内存的过程
1.2.1PN/PFN/PT/PTE
1.2.2MMU中的TLB和TTW
1.2.3一级页表映射过程
1.2.4为什么使用多级页表
1.3内存架构和内存模型
1.3.1Linux内存模型
1.3.2Linux内存映射
1.4memblock物理内存的初始化
1.4.1early boot memory
1.4.2memblock的数据结构
1.4.3memblock的初始化
1.5memblock物理内存的映射
1.5.1paging_init函数
1.5.2__create_pgd_mapping函数
1.6物理内存的软件划分
1.6.1划分的数据结构
1.6.2划分的初始化
1.7页帧分配器的实现
1.8页帧分配器的快速分配之水位控制
1.8.1水位的初始化
1.8.2水位的判断
1.9页帧分配器的快速分配之伙伴系统
1.9.1相关的数据结构
1.9.2伙伴算法申请页面
1.9.3伙伴算法释放页面
1.10页帧分配器的慢速分配之内存回收
1.10.1数据结构
1.10.2代码流程
1.11页帧分配器的慢速分配之内存碎片规整
1.11.1什么是内存碎片化
1.11.2规整碎片化页面的算法
1.11.3数据结构
1.11.4规整的三种方式
第2章进程管理
2.1内核对进程的描述
2.1.1通过task_struct描述进程
2.1.2如何获取当前进程
2.2用户态进程/线程的创建
2.2.1fork函数
2.2.2vfork函数
2.2.3pthread_create函数
2.2.4三者之间的关系
2.3do_fork函数的实现
2.3.1copy_process函数
2.3.2wake_up_new_task函数
2.4进程的调度
2.4.1进程的分类
2.4.2调度相关的数据结构
2.4.3调度时刻
2.4.4调度算法
2.4.5CFS调度器
2.4.6选择下一个进程
2.4.7进程上下文切换
2.5多核系统的负载均衡
2.5.1多核架构
2.5.2CPU拓扑
2.5.3调度域和调度组
2.5.4何时做负载均衡
2.5.5负载均衡的基本过程
第3章同步管理
3.1原子操作
3.2自旋锁
3.3信号量
3.4互斥锁
3.5RCU
第4章文件系统
4.1磁盘
4.1.1磁盘类型
4.1.2磁盘读写数据所花费的时间
4.2磁盘的分区
4.3磁盘上数据的分布
4.4查看文件系统的文件
4.4.1文件系统对象结构
4.4.2查看分区信息
4.4.3查看超级块
4.4.4查看块组描述符
4.5ext4文件系统
4.5.1磁盘布局
4.5.2ext3布局
4.5.3ext4中的inode
4.5.4ext4文件寻址
4.6查找文件test的过程
4.7虚拟文件系统
4.7.1文件系统类型(file_system_type)
4.7.2超级块(super_block)
4.7.3目录项(dentry)
4.7.4索引节点(inode)
4.7.5文件对象(file)
第5章系统调用
5.1系统调用的定义
5.2系统调用的处理流程
5.2.1用户态的处理
5.2.2内核态的处理
第6章SoC启动
6.1Uboot启动前的工作
6.1.1链接脚本和程序入口
6.1.2镜像容器
6.1.3SPL的启动
6.1.4ATF的启动
6.2Uboot的初始化过程
6.2.1Uboot的启动
6.2.2Uboot驱动的初始化
6.2.3Uboot的交互原理
6.3kernel的初始化过程
6.3.1内核运行的第一行代码
6.3.2head.S的执行过程
6.3.3内核子系统启动的全过程
第7章设备模型
7.1设备模型的基石
7.1.1设备模型是什么
7.1.2设备模型的实现
7.2设备模型的探究
7.2.1总线、设备和驱动模型
7.2.2设备树的出现
7.2.3各级设备的展开
第8章设备树原理
8.1设备树的基本用法
8.1.1设备树的结构
8.1.2设备树的语法
8.2设备树的解析过程
8.3设备树常用of操作函数
8.3.1查找节点的of函数
8.3.2查找父/子节点的of函数
8.3.3提取属性值的of函数
8.3.4其他常用的of函数
第9章电源模块
9.1电源子系统的power domain
9.1.1power domain的硬件实现
目录XVII
9.1.2power domain的软件实现
9.2电源子系统的runtime pm
9.2.1runtime pm在内核中的作用
9.2.2runtime pm的软件流程
9.2.3suspend/resume的过程
第10章时钟模块
10.1时钟控制器的硬件实现
10.1.1Clock Source
<前言/序言
操作系统与SoC(System on a Chip,系统级芯片)之间存在着紧密的联系。SoC是一种高度集成的芯片,它将多个功能模块(如CPU、GPU、NPU、存储器等)集成在一个芯片上,以实现更高效的性能和更低的功耗。操作系统则负责管理这些硬件资源,确保它们得到合理的分配和使用。如果把芯片比作一个人的心脏的话,操作系统无疑是一个人的灵魂。
势是未来发展的大势。人工智能、机器人、芯片自主、智能驾驶等新一代信息技术是当代智能科技的主要体现。在这个百年未有之大变局的历史机遇中,计算机底层教育的作用不言而喻,它是现代智能科技发展的核心支柱。计算机底层的技术包含芯片设计、操作系统、编译器、数学库等内容。目前,中美竞争的加剧使高端芯片和操作系统设计成为众所周知的“卡脖子”技术,国家开始重视底层技术,越来越多的企业投入芯片和操作系统的研发,比如华为的海思芯片和面向万物互联的鸿蒙操作系统。但对开发者而言,一直以来,芯片和操作系统是两个不同的领域。芯片从业者更多的是硬件工程师,操作系统从业者更多的是软件工程师,在这之间还有嵌入式工程师,彼此合作,又各自安好。可是操作系统和芯片开发彼此是紧密相连、相互依存的,芯片提供数据处理等核心能力,操作系统适配芯片架构来驱动硬件工作。芯片的性能影响操作系统运行的流畅度,操作系统合理地调配资源也能挖掘芯片的潜在性能。
道是事物背后的规律。回顾历史,每一次智能终端的发展,都会带来翻天覆地的变化。从PC时代的个人计算机,开启了数字化办公与学习的先河;到互联网时代的万维网,将全球信息紧密相连,彻底改变了信息传播的方式;再到移动互联网时代的智能手机,让信息获取与服务享受变得无处不在,极大提升了生活与工作的便捷性;直至现在的人工智能时代,以智能语音助手、自动驾驶汽车等为代表的产品,正逐步重塑生产方式、服务模式乃至社会结构,引领世界迈向一个更加智能化、自动化的未来。我们正在进入万物智能互联的新世界,万物智能互联的世界对传统的芯片和操作系统提出了新的需求。顺应时代发展,芯片和操作系统都出现了相应的革命,比如OpenAI的ChatGPT、恩智浦新研究的跨界处理器、谷歌新研究的TPU和Fuchsia、华为新研究的鸿蒙等,它们都是为万物智能互联新时代而生的新架构。
术是操作层面的方法。那么,如何学习底层技术?操作系统涉及的模块很多,包含内存管理、进程管理、文件系统、同步机制等内容,芯片开发的基本内容包括电源模块、时钟模块、时间模块、中断模块、引脚模块等,不同模块之间又是彼此关联的。想要精通这些模块,没有好的学习方法,基本无从下手。虽然“Talk is cheap. Show me the code.”,但除非你本身就是做操作系统或者芯片开发相关工作的,否则我不推荐大家把相关源码通读一遍,因为首先大部分人在工作时间已经够辛苦,工作之余并没有大量的时间去通读,其次即使你啃完了代码,但手头的工作和底层关系不大,没有工作的实践,过段时间还是会忘掉。
打通操作系统和芯片开发的过程,实际上是一个跨学科、跨领域的合作过程,需要操作系统开发人员和芯片设计工程师的紧密合作。尽管他们的工作背景和专长不同,但他们的目标是一致的,那就是提供高效、稳定、功能丰富的硬件和软件解决方案。市场上有很多芯片开发和操作系统的书籍,但似乎都是针对纯硬件或者纯软件的内容,鲜有将二者兼容,以至于操作系统和芯片开发从业者很难再次提升自己的内功。本书重点在于打通操作系统和芯片开发,让硬件工作者有机会走进软件的大门,让软件工作者有机会理解底层的本质。总之,如果你有志于修炼底层内功,那么这本《打通Linux操作系统和芯片开发》将是好的选择。
为什么写本书?
毕业后我一直从事底层技术开发,从起初的驱动开发、内核开发、安卓Framework开发,再到芯片级的系统开发,一直对底层的本质原理有着浓厚的兴趣,十多年的工作沉淀让我对操作系统和芯片级的软件开发有着一定的理解。我希望通过某种方式把自己的一些总结记录下来,另外,我一直觉得如果把人比作计算机,人的大脑更像是CPU,并不适合用来存储记忆,特别是随着时间的推移,经验也会化作遗忘,所以需要有像硬盘一样的东西把内容记录下来,这也是我选择写书的原因之一。
那为什么选择写打通操作系统和芯片开发的内容呢?我们知道,计算机行业是个变化极快的行业,特别是从事互联网行业的朋友,经常面对技术的更新,开发语言的迭代,每天过的都很焦虑,随着新人的入职,技术的变化,老人的技术经验似乎无法得到发挥,这也是为什么都说程序员有35岁失业风险的根本原因。那么技术更新不那么快的行业是不是就好点了呢?答案的确如此,比如更加接近底层的嵌入式行业、操作系统行业、芯片行业等都会比互联网行业好很多,特别是同时懂软件和硬件的工程师,甚至随着时间的推移,越老越吃香,而且国家越来越重视底层技术的开发。即便是在互联网行业,如果你对底层技术有