我们正在基于imx6 SoC构建自定义的Android板。所使用的Android版本非常老旧(KitKat 4.4.2),内核也是如此(3.0.35)。
我们遇到了一个问题,但尚未解决。
通常情况下,当一切正常时,板子的重启时间最多只需5-6秒钟。但有时,板子的重启时间会很长,从1.30分钟到2.30分钟不等。
我们想知道的第一件事是,内核卡在哪个模块/函数中。
我们怀疑这可能是eMMC的问题,但这只是一个猜测,我们真的不知道目前发生了什么。
您是否知道如何使内核额外详细?例如打印每个函数调用?kgdb或类似的调试工具能否帮助我们解决问题?
谢谢,
问候,
Vauteck
我们不是唯一遇到这个问题的人。(NXP论坛上的帖子在这里) 我们尝试注释掉这行代码。
现在该函数不会再阻塞,但有时候板子仍然不能立即重启。 我们目前仍在寻找见解和建议。 感谢大家的阅读。
通常情况下,当一切正常时,板子的重启时间最多只需5-6秒钟。但有时,板子的重启时间会很长,从1.30分钟到2.30分钟不等。
我们想知道的第一件事是,内核卡在哪个模块/函数中。
我们怀疑这可能是eMMC的问题,但这只是一个猜测,我们真的不知道目前发生了什么。
您是否知道如何使内核额外详细?例如打印每个函数调用?kgdb或类似的调试工具能否帮助我们解决问题?
谢谢,
问候,
Vauteck
编辑: 我们在解决问题的过程中取得了进展。事实证明,内核被卡在arch/arm/kernel/process.c中的arm_machine_restart()函数中。 具体来说,在调用cpu_proc_fin()函数后,它被卡住了,对于我们的板子来说,该函数在arch/arm/mm/proc-v7.S中被定义为cpu_v7_proc_init。这个函数的代码是用汇编写的:
mrc p15, 0, r0, c1, c0, 0 @ ctrl register
bic r0, r0, #0x1000 @ ...i............
bic r0, r0, #0x0006 @ .............ca.
mcr p15, 0, r0, c1, c0, 0 @ disable caches
mov pc, lr
我们不是唯一遇到这个问题的人。(NXP论坛上的帖子在这里) 我们尝试注释掉这行代码。
// bic r0, r0, #0x0006 @ .............ca.
现在该函数不会再阻塞,但有时候板子仍然不能立即重启。 我们目前仍在寻找见解和建议。 感谢大家的阅读。