Android 如何调试Linux内核启动过程后uu打开u mmu_u在舞台上?

Android 如何调试Linux内核启动过程后uu打开u mmu_u在舞台上?,android,linux,linux-kernel,embedded-linux,mmu,Android,Linux,Linux Kernel,Embedded Linux,Mmu,我正在尝试在定制硬件上启动基于Linux内核3.0.1的Android 4.0.1(冰淇淋三明治) 我可以使用串口调试Linux内核3.0.1引导过程,直到在head.S中定义了\u enable\u mmu函数 但是,一旦执行了\uuu打开\ummu\u功能,我就无法调试引导过程 我已经浏览了linux arm内核邮件列表存档&我尝试了他们的printscii()解决方法。但在打开mmu后,我仍然无法在串行控制台上看到任何引导日志 在这里,我可以在打开mmu之前获取日志,因此我的串行控制台端口

我正在尝试在定制硬件上启动基于Linux内核3.0.1的Android 4.0.1(冰淇淋三明治)

我可以使用串口调试Linux内核3.0.1引导过程,直到在head.S中定义了
\u enable\u mmu
函数

但是,一旦执行了
\uuu打开\ummu\u
功能,我就无法调试引导过程

我已经浏览了linux arm内核邮件列表存档&我尝试了他们的
printscii()
解决方法。但在
打开mmu后,我仍然无法在串行控制台上看到任何引导日志

在这里,我可以在打开mmu之前获取日志,因此我的串行控制台端口工作正常

还有一件事——我没有JTAG

有人能提供在打开MMU后如何调试Linux内核引导过程的解决方案吗?

-

嗨,我不知道你的问题,但有一些想法

在Linux源代码中,有以下几点:

/* *启用MMU。这完全改变了可见光的结构
*内存空间。您将无法通过此跟踪执行情况。
*如果您对此有任何疑问,请查看linux arm内核
*在将另一篇文章发送到列表之前,邮件列表会进行存档。
*
*r0=cp#15控制寄存器
*r1=机器ID
*r2=atags或dtb指针
*r9=处理器ID
*r13=完成后要跳转到的虚拟地址
*
*其他寄存器取决于完成时调用的函数
*/ .align 5
.pushsection.idmap.text,“ax”
输入(\u打开\u mmu\u)
..
..
__打开\u mmu\u\u结束:
ENDPROC(打开mmu)
波普科长

因此,调用uu开启u mmu_后无法跟踪流似乎很正常

但是,使用printscii()的结果表明,您是否调试过为什么无法使用它

您知道printscii()在没有任何配置的情况下是否易于使用吗?使用前是否有任何必要的设置? 您是否为其提供了可运行的环境

由于缺少JTAG,打印可能是剩下的唯一方法,因此调试printscii()可能是您必须的


谢谢。

您很可能存在内存转换配置问题。打开MMU后,必须使用已映射到原始硬件地址(以前使用的)的虚拟地址访问串行设备


要调试问题,您需要确保设置了正确的虚拟地址,并且内存映射配置是设备的配置。一般来说,设备内存映射是静态完成的,因此如果您看不到源文件中有什么错误,那么您也应该能够在调用
\uuuu enable\ummu

之前输出这些值。不使用JTAG有什么特殊原因吗?(例如,缺少收割台?)。这些天来,基本JTAG调试探针的代码相当低,而且成本可能比您辛苦完成的时间要低。您好,谢谢您的回复。但我们定制板的JTAG将在1个月后提供给我。所以,在我得到JTAG之前,你能不能提供其他的解决方案来调试这个。嗨,谢谢你的回复。但是我以前也在我们的一个项目中使用过printscii(),所以我对printscii()工作所需的所有内核配置有背景知识。另外,Linux ARM邮件列表中也提供了它。即使尝试了所有这些东西,我也无法在串行控制台上获得任何数据。因此,如果有任何关于上述问题的指针,这将是非常有帮助的。