摘要:
序言 设备驱动可以运行在内核态,也可以运行在用户态,用户态驱动的利弊网上有很多的讨论,而且有些还上升到政治性上,这里不再多做讨论。不管用户态驱动还是内核态驱动,他们都有各自的缺点。内核态驱动的问题是:系统调用开销大;学习曲线陡峭;接口稳定性差;调试困难;bug致命;编程语言选择受限;而用户态驱动面临 阅读全文
摘要:
人类的智力存在上限和无法扩容可能是人类文明发展的最大障碍。为了解决这一问题,人类发展史上所有的科技发明,无一不是想方设法来扩容脑力。软件作为一种模仿人类脑力活动的“生命体”,在其发展早期,也遇到类似问题,Frederick P. Brooks, Jr.教授著名的“人月神话”观点就是对这一现象的总结。 阅读全文
摘要:
为什么是Docker 进入21世纪,继互联网之后,云计算开始大放异彩。云计算是互联网发展后期的必然方向,反过来,云计算也进一步推动了互联网的发展。云计算模式最关键的突破就是资源使用方式的改变。 云计算是一种融合了多项计算机技术的、以数据和处理能力为中心的密集型计算模式,它的主要技术包括虚拟化、分布式 阅读全文
摘要:
问题背景 最近boot中遇到个用户态程序的segment fault异常,除了一句“Segment fault”打印外无其他任何打印。该问题复现概率较低,定位起来比较棘手。我们的boot是个经过裁剪的最小linux系统,由于bootflash大小的限制,加上在boot阶段也没有挂载其他储存设备,所以 阅读全文
摘要:
Linux设备驱动故障定位指引 Linux设备驱动种类繁多,涉及的知识点多,想写一个通用的故障定位方法指引,是个难度颇大且不容易做好的工作。限于笔者的经验,难以避免存在疏漏之处,欢迎大家留言指正补充。 Linux设备驱动的知识点涉及硬件和软件,其故障原因也各种各样。不过从笔者多年的维护经验来看,与内 阅读全文
摘要:
软件重构是改善代码可读性、可扩展性、可维护性等目的的常见技术手段。圈复杂度作为一项软件质量度量指标,能从一定程度上反映这些内部质量需求(当然并不是全部),所以圈复杂度往往被很多项目采用作为软件质量的度量指标之一。 C语言开发的项目中,switch/case代码块是一个很容易造成圈复杂度超标的语言特性 阅读全文
摘要:
引子 Linux操作系统的一大优势就是支持数以万计的芯片设备,大大小小的芯片厂商工程师都在积极地向Linux kernel提交设备驱动代码。能让这个目标得以实现,这背后隐藏着一个看不见的技术优势:Linux内核提供了一套易于扩展和维护的设备驱动框架。Linux内核本身提供一套设备驱动模型,此模型提供 阅读全文
摘要:
TLA+介绍 TLA+(WIKI,官网)是一门领域特定语言,主要用于数理逻辑计算和并发系统的正确性验证。TLA+中的TLA代表的是“行为时序逻辑(Temporal Logic of Actions)”,Action 是纯函数;“+”代表“Data Logic”。这是由 Dr. Lamport所提出的 阅读全文
摘要:
linux kexec 介绍 kexec的功能是用一个运行的内核去运行一个新内核,就像运行一个应用程序一样。这种机制因为跳过了bootloader,可以实现系统的快速重启。另外kdump也是基于kexec实现(示意如下)。 kexec的实现有几点难点: kexec的使用示例如下,其分为2部分:kex 阅读全文
摘要:
Linux中断子系统 Linux中断子系统是个很大的话题,如下面的思维导图所示,包含硬件、驱动、中断上半部、中断下半部等等。本文着眼于中断控制器(PIC),特别是级联中断控制器驱动部分,对驱动的设计和调试要点进行分析总结。 级联中断控制器驱动 中断控制器的核心对象是irq_chip,其提供了很多接口 阅读全文