Linux aarch64 中断处理全流程分析 1日前 评论
Linux aarch64 中断处理全流程分析

深入解析了Linux中断系统的核心概念,包括硬件中断号(hwirq)与虚拟中断号(virq)的区别、各类中断号在中断控制器中的分配和映射关系,以及物理与逻辑中断线的实际意义。强调Linux内核通过virq实现统一管理,解决硬件中断号冲突,展示了复杂中断结构在SoC中的连接方式,为开发者理解和排查多级中断控制器的中断流程问题提供理论知识的指导。

华为充电管理架构概览 6日前 3 条
华为充电管理架构概览

深入剖析华为Mate X5充电管理源码,从软件架构、目录组织到核心模块如电池与充电器管理,亮点涵盖充电模式协商、事件驱动通信、参数投票决策等机制。文章详细展现了多电池支持、故障安全保护、硬件抽象接口与充电流程,对华为Linux内核电源管理体系结构及流程进行了系统性解读,为技术研究和实践提供重要参考。

【深入内核】中断真的不能睡眠吗? 6日前 1 条
【深入内核】中断真的不能睡眠吗?

“中断上下文不能睡眠”是Linux内核开发的底层铁律,源于中断执行期间CPU未切换进程,无法被调度器感知和管理。文章通过深入解析CPU执行模型、调度机制以及arm64中断流程,阐明中断上下文不具备调度实体特征、没有task_struct、不能被调度,也无法安全使用睡眠相关API和某些锁。这样设计避免

[Linux进程调度] 第002篇 Linux下0号进程的前世(init_task进程)今生(idle进程) 3月前 评论
[Linux进程调度] 第002篇 Linux下0号进程的前世(init_task进程)今生(idle进程)

Linux下有三个特殊进程:idle(PID=0)、init(PID=1)和kthreadd(PID=2)。idle是系统首个进程,由静态定义的init_task演变而来,是唯一未通过fork/kernel_thread产生的进程,运行在内核态,每个处理器单元独立一个,负责系统空闲时执行节能循环。init由idle创建,完成初始化后进入用户空间,成为所有用户进程祖先,最终转为守护进程。kthreadd亦由idle创建,始终运行于内核空间,负责管理和调度所有内核线程,是其父进程。idle通过rest_init函数创建init和kthreadd后演变为idle,不参与调度,仅在运行队列为空时执行cpu_idle_loop。

[linux内存管理] 第029篇 谁把folio的函数定义“藏”起来了? 4月前 3 条
[linux内存管理] 第029篇 谁把folio的函数定义“藏”起来了?

这篇文章探讨了在阅读Linux内核代码时,如何解决一些函数定义难以找到的问题。作者遇到了folio_test_active()等函数无法找到定义的困惑,通过搜索发现这些函数是通过特殊的宏定义在page-flags.h文件中创建的。文章详细解释了PAGE_TYPE_OPS()和FOLIO_FLAG()宏的工作原理,以及如何通过这些宏定义函数。最终,作者成功理解了这些函数的定义方式,并总结说这种方法虽然特殊,但探索和理解的过程非常有意思。