Linux Kernel
未读
🔍【深入内核】Linux 内核栈详解:你所需要知道的一切
内核调试经常遇到栈溢出、Oops、watchdog 死锁等问题?内核栈搞不清楚会非常致命。这篇文章将用清晰的结构,带你彻底搞懂 Linux 的 内核栈 —— 什么是内核栈、为什么重要、常见误区、如何避免踩坑。
🧠 一、什么是内核栈?内核栈(Kernel Stack)是 Linux 为每个线程在 运行内核代码时专用的一块栈空间。当用户进程通过系统调用、中断或异常「进入内核」后,Linux 不再使用用户栈,而是切换到它自己的内核栈:
12用户态 → 系统调用 / 中断 → 内核态 ↘ 使用内核栈
内核栈用于保存:
函数调用链(call stack)
局部变量
寄存器上下文
中断处理信息
🧵 二、每个线程都有一块内核栈
每个 task_struct 对应一块独立的内核栈。
不管线程是否在用户态运行,内核栈始终分配好。
当进入内核态(syscall / 异常 / 中断)时,就会切换到该线程的内核栈。
📏 三、内核栈有多大?在 ARM64 架构下,默认是 16KB, ...
7c971adf77762131b6b45d26c07ff4ea44929669ff3a9892c851356e759afa90ce84be70681ab443e5dbc6c6e6b9c47d082688d3752bfd6baef7de343a1a62a01960170b805f7acbfa1fb9114452c7fa016626d4c6a6d774cd85a8e26ebfd8cd784785cc4cfdf2fcbaf777fcb82ffbea3ea9c61a05253b3d51ab6c3837ae8c45e1e5e9d41d9eeae5ce95372dff63d577df58e49edc8a7b8d7febad50292a5168c8bf2cb1a63cda72490b73ce9fa43ddaa99800f2f38681938e91a68ad4c5ab4e385f230b997234abe670a3b0c5ce9f0122ae53b493073b9aabd5d13e1d7cc620cc1a5634cc1631e921719366b5b6f254ba48918509015feba ...
7c971adf77762131b6b45d26c07ff4ea44929669ff3a9892c851356e759afa90ce84be70681ab443e5dbc6c6e6b9c47d082688d3752bfd6baef7de343a1a62a01960170b805f7acbfa1fb9114452c7fa016626d4c6a6d774cd85a8e26ebfd8cd784785cc4cfdf2fcbaf777fcb82ffbea3ea9c61a05253b3d51ab6c3837ae8c45e1e5e9d41d9eeae5ce95372dff63d57755276126f0c5ebe1068ed65c0d8bfff4c487326e76687778d14b19af2d98250a93f9b6b4c6714d8a794b1e9c7a898a382e23e790e1634d299c0eda1ec0d2cfec223c14ad568fca597b52d941e4587ffbd422723d8c7a376ef750c5f963875e6b767af0426f4d207af ...
7c971adf77762131b6b45d26c07ff4ea44929669ff3a9892c851356e759afa90ce84be70681ab443e5dbc6c6e6b9c47d082688d3752bfd6baef7de343a1a62a01960170b805f7acbfa1fb9114452c7fa016626d4c6a6d774cd85a8e26ebfd8cd784785cc4cfdf2fcbaf777fcb82ffbea3ea9c61a05253b3d51ab6c3837ae8c45e1e5e9d41d9eeae5ce95372dff63d577c18e852d8adbf9dee73254eb9574439270cd89df9340aeffaff52f0eddd8070319eec2de54c4eed08612e5b128c8aaccf5e13f4993b25a5bef8398b8741176c6a624fde9f923a92bd8ab7acb75b8313607686f7c1a7e10d59768f19793a85d9f5a7e203ab553a35a7 ...
一、引言在基于 Qualcomm 平台的 Android 系统开发与调试过程中,常见的系统重启场景包括 Watchdog 重启、用户触发 reboot、按键长按重启等。而其中较为底层且难以捕捉的两种重启方式是:
OCP(Over Current Protection)触发的 Warm Reset
通过组合键 + Timer 配置触发的 Warm Reset
本文将深入剖析这两种 Warm Reset 的触发原理、执行路径与调试手段。
二、OCP(过电流保护)Warm Reset 机制1.1 什么是 OCP?OCP(Over Current Protection)是 PMIC(如 PM6375)内置的一种硬件保护机制,实时监测各个供电轨(如 LDO/SMPS)是否出现过电流现象,以防止烧毁或异常功耗。
一旦检测到 OCP,PMIC 可以根据配置执行不同级别的响应操作:
响应类型
行为
IRQ
仅上报中断,不重启
Shutdown
拉低 PS_HOLD,SoC 完全断电冷重启
Warm Reset✅
触发 SoC 重启,供电不断电
1.2 Warm ...
7c971adf77762131b6b45d26c07ff4ea44929669ff3a9892c851356e759afa90ce84be70681ab443e5dbc6c6e6b9c47d082688d3752bfd6baef7de343a1a62a01960170b805f7acbfa1fb9114452c7fa016626d4c6a6d774cd85a8e26ebfd8cd784785cc4cfdf2fcbaf777fcb82ffbea3ea9c61a05253b3d51ab6c3837ae8c45e1e5e9d41d9eeae5ce95372dff63d577105c6a12262c1ccf79cab1fa3bf671fed04fdf20e91f34cab1c8a314b3453de1aa2f907daba7ade6b0f76dc895546e6b332bda87013246dc1bf682eb7d23924e02eef90e08d038d9e1205df1276dbb024c8237bb046eae34adda5a175015826a5c10def8cf887eb28 ...
7c971adf77762131b6b45d26c07ff4ea44929669ff3a9892c851356e759afa90ce84be70681ab443e5dbc6c6e6b9c47d082688d3752bfd6baef7de343a1a62a01960170b805f7acbfa1fb9114452c7fa016626d4c6a6d774cd85a8e26ebfd8cd784785cc4cfdf2fcbaf777fcb82ffbea3ea9c61a05253b3d51ab6c3837ae8c45e1e5e9d41d9eeae5ce95372dff63d577a5d34eb21ec1688ec0640088573752648546d86de4bd06bb0929cc0b698bc859ea59df3934f031ea44fba8453213dc199bb22a3e423698be47a661e87e443c95550a6fba1e3fbe7455be18b81ed308d52662d27e80139861cdf41f24bb3510cbbffc9784ce6b5702e ...
Linux Kernel
未读
一、死锁概念死锁是指多个进程(线程)因为长久等待已被其他进程占有的的资源而陷入阻塞的一种状态。当等待的资源一直得不到释放,死锁会一直持续下去。死锁一旦发生,程序本身是解决不了的,只能依靠外部力量使得程序恢复运行,例如重启,开门狗复位等。
Linux 提供了检测死锁的机制,主要分为 D 状态死锁和 R 状态死锁。
D 状态死锁进程等待 I/O 资源无法得到满足,长时间(系统默认配置 120 秒)处于 TASK_UNINTERRUPTIBLE 睡眠状态,这种状态下进程不响应异步信号(包括 kill -9)。如:进程与外设硬件的交互(如 read),通常使用这种状态来保证进程与设备的交互过程不被打断,否则设备可能处于不可控的状态。对于这种死锁的检测 Linux 提供的是 hung task 机制,MTK 也提供 hang detect 机制来检测 Android 系统 hang 机问题。触发该问题成因比较复杂多样,可能因为 synchronized_irq、mutex lock、内存不足等。D 状态死锁只是局部多进程间互锁,一般来说只是 hang 机、冻屏,机器某些功能没法使用 ...
c5b1c9d87331a45001ba9b8dd4d3824dcdb0440640a1963744c70c84d2bb34ef65ca301f946b70afa03f6b6b445de8617a34bb4217e837eab40a1b88e9303250390b091b9bbf6e1309c45b2203e4e3bbcc08974ad6e4ff8c5f6e5b87e856eca9e5f05648e97ef27e5587f2e9d5a849efed7108c274d511f3b34301bdb7f1820d7293ef6084ad685f73ce9642a08bcf971da2e716c0323edfdd2443976a46b15a0f3cbdaab613169b93015aeafb83fe88d869f1bb2c083e5aeb0bc3b5aebd5ffde627566d814ceb9d3ebb0d49bd6f7269327d7695c24ffd58d9473bb57348a98561c2cf063dd20566048eae9f910828f6ddf8445765aacc718 ...
c5b1c9d87331a45001ba9b8dd4d3824dcdb0440640a1963744c70c84d2bb34ef65ca301f946b70afa03f6b6b445de8617a34bb4217e837eab40a1b88e9303250390b091b9bbf6e1309c45b2203e4e3bbcc08974ad6e4ff8c5f6e5b87e856eca9e5f05648e97ef27e5587f2e9d5a849efed7108c274d511f3b34301bdb7f1820d7293ef6084ad685f73ce9642a08bcf9725178df6643cd80be27a2fea9442ff1934747d3e14145f7b85b6381d668042ba7106db873db97fa4727fc965ae9c78366081b4a266dc752bb53a6804e6972a9094212787044f80aeaaf9928aa6b4c1eb743b35d88747137f9f27be5342331b26751e7f129d05e8830 ...