linux-dead-lock-detect-lockdep 7月前 评论
linux-dead-lock-detect-lockdep

**死锁概念**:死锁是指多个进程(线程)因等待已被其他进程占有的资源而陷入阻塞的状态。死锁一旦发生,程序本身无法解决,只能依靠外部力量使程序恢复运行。Linux 提供了检测死锁的机制,主要分为 D 状态死锁和 R 状态死锁。 **死锁类型**: * **D 状态死锁**:进程等待 I/O 资源无法得到满足,长时间处于 TASK_UNINTERRUPTIBLE 睡眠状态。触发成因复杂多样,可能因为 synchronized_irq、mutex lock、内存不足等。 * **R 状态死锁**:进程长时间处于 TASK_RUNNING 状态垄断 CPU 而不发生切换,导致多 CPU 间互锁,整个系统无法正常调度。 **常见错误**: * AA: 重复上锁 * ABBA: 曾经使用 AB 顺序上锁,又使用 BA 上锁 * ABBCCA: 这种类型是 ABBA 的扩展。AB 顺序 , AB 顺序,CA 顺序。 * 多次 unlock **AB-BA 死锁的形成**:假设有两处代码都要获取两个锁(lockA 和 lockB),如果进程 P 持有 lockA 后再去获取 lockB,而此时恰好由进程 Q 持有 lockB 且它也正在尝试获取 lockA,那么此时就是处于死锁的状态。 **lockdep 死锁检测模块**:lockdep 是 Linux 内核中的一种死锁检测机制,通过跟踪锁类的使用历史状态和依赖关系,以确保锁类状态和锁类之间的依赖总是正确的。lockdep 会检测并报告死锁风险,并提供相应的出错处理机制。 **检查规则**: * 单锁状态规则:一个软中断不安全的锁类也是硬中断不安全的锁类。 * 多锁依赖规则:同一个锁类不能被获取两次,不能以不同的顺序获取两个锁类,同一个锁实例在任何两个锁类之间,嵌套获取锁的状态前后需要保持一致。 **使用实例**:Lockdep 检测到死锁风险时,会打印相应的风险提示,并建议开发者修复代码,避免死锁。

MTK平台模块加载顺序控制 8月前 评论
MTK平台模块加载顺序控制

本文主要探讨了Android设备中模块加载顺序控制的相关知识点。首先,介绍了模块在文件系统中的位置要求,包括不同启动模式下模块的存放位置和加载顺序。接着,阐述了Android构建系统如何通过定义变量来支持模块加载,并举例说明了供应商内核模块的配置方式。然后,针对MTK平台,详细分析了模块加载控制机制,包括`ko_order_table.csv`文件的作用、编译逻辑以及树外驱动编译控制。最后,总结了设置模块加载顺序的原则,即通过调整`ko_order_table.csv`中的顺序来控制模块加载顺序,遵循先加载ramdisk模块,后加载vendor模块,且同一类型模块中,顺序靠前的先加载。

【深入内核】Linux 内核栈初步了解 9月前 评论
【深入内核】Linux 内核栈初步了解

这篇文章详细介绍了Linux内核栈的概念、重要性以及与之相关的常见问题和调试方法。内核栈是Linux为每个线程在运行内核代码时专用的一块栈空间,用于保存函数调用链、局部变量、寄存器上下文等信息。文章强调了内核栈的大小固定(在ARM64架构下默认为16KB),不可扩展,并指出了在栈上分配大数组、返回栈上变量地址等常见“死亡操作”。此外,还提供了如何调试内核栈使用的方法,包括编译选项、工具和查看系统文件。最后,总结了避免内核栈溢出的建议,以确保系统稳定运行。

设备树节点是如何转换成platform_device设备的呢? 2024-12-05 评论
设备树节点是如何转换成platform_device设备的呢?

你好,我理解你的需求,以下是我为你写的100字左右的摘要: 本文详细介绍了Linux内核中设备树dtb文件转换为platform_device的过程。首先,设备树中的各个节点会转换为device_node结构,然后通过of_platform_populate函数遍历这些节点,并根据节点的compatible属性创建对应的platform_device。对于包含特定compatible属性的节点,其子节点也会被转换为platform_device。此外,设备树中的reg和interrupt属性会被转换为platform_device中的resource结构,而其他属性则通过device_node结构传递给驱动开发者。

Linux级联中断控制器注册与中断处理 2024-11-21 评论
Linux级联中断控制器注册与中断处理

本文主要介绍了Linux内核中关于中断控制器的概念和注册过程。文中首先解释了几个关键概念,如`IRQCHIP_DECLARE`、`IRQCHIP_OF_MATCH_TABLE`和`__irqchip_of_table`,这些都是内核中用于中断控制器注册的重要结构。然后详细阐述了GIC中断控制器作为root中断控制器的注册流程,包括系统启动到GICv3初始化的过程以及GICv3中断控制器的初始化。接着,文中以高通平台的tlmm pinctrl控制器为例,说明了级联中断控制器的注册过程。最后,描述了级联情况下的中断处理流程。整篇文章提供了丰富的代码和设备树节点示例,帮助读者更好地理解中断控制器的注册和处理机制。