自制工业控制系统:Intel集成显卡实战——从GOP帧缓冲接管显示输出

起因

工控机上电,操作工看到的第一样东西是画面。这篇记录的就是显示输出怎么接手。接手用的 GOP 有来历:UEFI 接 BIOS 班时,把实模式 INT 10h/VBE 那套点亮屏幕的调用换成了结构体加函数指针的图形输出协议,帧缓冲地址和模式信息从它手里直接拿。对面的 Intel 核显同样有故事——2010 年前后(Arrandale/Clarkdale 起)显示单元并进了 CPU 封装,从此在 Intel 平台长期占着 bus0:dev2:func0 的固定座位。固件用 GOP 把屏幕点亮、谈好模式,把帧缓冲的物理地址交出来;固件退场之后,显示引擎的 pipe/plane/PLL 配置原样留着继续扫描,Intel 核显在我们这儿就是一个已经点亮的扫描输出引擎,配置一行不用碰。剩下的活看着只有一件——往那块内存里写像素——但真写稳了才知道,像素格式、行距、这块内存的来路、为什么慢、怎么变快,一个都绕不过去。

自制工业控制系统:APIC定时器与系统时间实战——寄存器级配置、HPET校准与RTC读写

起因

调度篇(中断驱动的硬实时层与协作式主循环)承诺"硬实时层的确定性来自中断优先级",这篇兑现它:屏蔽 PIC、启用 APIC、配置定时器、校准频率,最后加上工业系统天天要用的系统时间读写(RTC/CMOS 实操)。全部给到寄存器级。这条时间线上的每个部件都有来历:8259A 是 Intel 1976 年给 8080 配的中断控制器,PC/AT 上两片级联管 15 路中断一用四十年;APIC 体系是九十年代为多处理器机器生的,最早是主板上的外置 82489DX,Pentium 起把 Local APIC 塞进 CPU,多核时代每核一份;HPET 是 Intel 和微软 2000 年代联手定的规范,接 1981 年 IBM PC 那颗 8253/8254 PIT 的班——DOS 时代 18.2Hz 的系统节拍就是 PIT 传下来的祖制;RTC 则从 PC/AT(1984)起蹲在 CMOS 里,靠纽扣电池活到今天。

自制工业控制系统:CPU自举实战——重建GDT/IDT、TSS专用栈与中断框架

起因

上一篇拿齐家产、退出了启动服务,但 GDT/IDT 还是固件的——住在"别人留下的房子"里,位置内容不受控,指向的内存随时可能被复用。这篇接管 CPU 底层机制:重建 GDT、给安全中断配专用栈、装上自己的 IDT 和异常处理。这一篇做完,调度篇定义的 isr_safety/isr_discharge/isr_motion 才有地方挂。照例,细节讲到可以直接抄的程度。要重建的这几张表没有一样是新鲜东西,全是八十年代的层积:分段和描述符表是 80286 保护模式的遗产,386 引入分页后段机制退居幕后,x86-64 长模式干脆把基址和限长拍平,只留 FS/GS 还在干线程局部存储这类杂活;中断向量表从 8086 固定在地址 0 处的 1KB IVT,进化成 80286 起可以挪窝的 IDT;TSS 生来是硬件任务切换的载体,后来没有人真用硬件切任务,只剩 IST 专用栈这一个功能还在服役。重建它们不是因为它们好用,是 CPU 上电就只认这几张表。

自制工业控制系统:UEFI固件层实战——手写FFI绑定与ExitBootServices权力交接

起因

自制工业控制系统:从UEFI到内核》定下了路线:零外部 Cargo 依赖,与固件打交道的这一层参考 r-efi 手写 FFI 绑定,代码全部 vendor 进自己的仓库。这篇把这个系列真正的第一步展开:从 UEFI 应用入口写起,拿齐所有"过了这村没这店"的资源,最后调用 ExitBootServices() 完成固件到系统的权力交接。这一篇的目标是:照着做就能跑。权力交接为什么长这个样子,有段来历:BIOS 是 1981 年 IBM PC 的遗产,16 位实模式加 1MB 地址空间的假设,靠 INT 10h/13h 这类软中断服务往后缝缝补补撑了近二十年;九十年代末 Intel 给 64 位安腾平台做启动方案,发现这套底子实在撑不住,1998 年立项 EFI 推倒重来,2005 年捐给 UEFI 论坛变成开放标准——今天的主板固件几乎清一色是它。我们手写 FFI 对接的不是某家厂商的私有接口,是这份二十多年没换过骨架的行业标准。

自制工业控制系统:中断驱动的硬实时层与协作式主循环——两级调度模型设计

起因

自制工业控制系统:从UEFI到内核,为线切割机全自研专用系统的立项与技术选型》定了整体方向——用现代技术栈做一个不受第三方系统限制、又不用做得那么复杂的专用工业系统。调度模型是这个系统里最容易被想得过于复杂的一块:一提到"操作系统调度",很容易联想到 Linux CFS 那种复杂的多级反馈队列,或者实时操作系统教科书里一整套优先级继承、优先级天花板协议。这套东西对一台专用机床控制系统来说,大部分是不需要的负担。优先级继承和天花板协议是上世纪八十年代 RTOS 研究为治互斥锁上的优先级反转发明的药,1997 年火星探路者栽在这病上(低优先级的气象任务卡住高优先级的总线任务,整机被看门狗复位)之后才广为人知——可见药再好,病根是"任务共享锁"这个前提本身。工控行业自己还有一支更朴素的血统:前后台系统,主循环转着干杂活、中断干要紧事,DOS 时代 HF 那类线切割控制柜跑了几十年就是这个结构。这篇定下这台线切割机控制系统实际要用的调度模型:不是纯抢占式也不是纯协作式,是按任务的实时性要求分成两级,各自用最简单够用的机制——把那支老血统在现代硬件上重新讲一遍。

自制工业控制系统:从UEFI到内核,为线切割机全自研专用系统的立项与技术选型

起因

前两篇整理了现代 UEFI 平台的真实工作方式,讲清楚了固件自己怎么跑起来、GOP/PCIe/NVMe 这些设备怎么被固件认出来。写完之后决定往前走一步:把这套认知真正落地成一个能用的东西——从 UEFI 到内核全部自己写的线切割机工业控制系统。这个系列从这篇开始,记录整个项目从立项到落地的技术决策和实现细节。

现代UEFI平台真实工作方式:长模式、GOP、驱动模型,与教材脱节的部分

起因

上一篇整理了从加电到长模式的经典引导原理——BIOS 自检、512 字节引导扇区、13 号中断读盘、实模式段寻址、GDT/LDT。写完之后越想越觉得不踏实:这套东西教材里教、网上教程也在教,但它描述的其实是正在退场的一条路径。现在随便一台新买的机器,主板上大概率根本没有传统意义上的 BIOS 了,CSM(兼容模式)在新平台上要么默认关闭要么直接被砍掉,Intel 从多年前就公开说要在自家平台上清除所有 CSM 痕迹。真机器的引导链路早就换了一套完全不同的骨架:不读 512 字节找 0x55AA,不靠 13 号中断读盘,甚至不存在"从实模式开始"这个起点。

从加电到长模式:x86引导原理笔记(实模式/保护模式/GDT到GRUB/UEFI)

起因

早年学微机课的时候就发现一个规律:班里学得最好的往往不是那些按老师要求一步一步照本学打字的人,反而是那些先偷着玩游戏的人——他们对计算机本身的兴趣,比对打字这件枯燥任务的兴趣高得多。那一代人里,不少人正是因为迷上了 DOS 上的游戏,一路琢磨怎么破解、怎么改内存、怎么写自己的小程序,最后走上了程序员这条路,兴趣领进门这件事从来都不是一句空话。我自己走的也是这么一条路:从折腾 DOS 开始,到研究 Windows 底层,再到后来自己动手写操作系统,一路是这么摸过来的。

用Claude+Hugo博客仓库+Python脚本写技术文章:AI负责判断,脚本负责确定性操作

起因

这个博客最早写文章全靠手工:开编辑器、复制上一篇的 front matter 改日期改标题、图片一张张压缩改名丢进 static 目录、写完了本地跑一遍 hugo 看有没有编译报错。日子久了慢慢攒了几十篇文章,头部格式却越写越乱——键名顺序不统一、日期格式忽而带引号忽而不带、分类名想到什么写什么,同一个方向能冒出三四个不同的分类名。

GPT+KiCad画板子实测:AI能干体力活,但规则得自己喂

起因

我画 PCB 的手艺一直不算好,而且说实话不太喜欢这件事——摆元件、拉线、改规则,枯燥又费时间。这几年断断续续找过不少"让机器帮我画板子"的路子:EDA 软件自带的自动布线器效果一般,走线经常绕远路、打孔乱放,事后还是要手动清理;市面上零星几个主打"AI 画 PCB"的工具试下来也没找到特别满意的,直到 GPT 系列模型能力上来之后,这件事才算真正看到希望。