首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在__turn_mmu_on阶段后调试Linux内核启动过程?

如何在__turn_mmu_on阶段后调试Linux内核启动过程?
EN

Stack Overflow用户
提问于 2012-09-24 13:39:44
回答 2查看 1.4K关注 0票数 0

我正在尝试启动安卓4.0.1 (冰淇淋三明治),基于Linux内核3.0.1在自定义硬件上。

我能够调试Linux Kernel 3.0.1的引导过程,直到在head.S中定义的__enable_mmu函数,使用串口。

但是一旦执行了__turn_mmu_on功能,我就无法调试引导过程。

我研究过linux-arm-kernel邮件列表归档&我尝试过他们的printascii()工作。但在__turn_mmu_on之后,我仍然无法在串行控制台上看到任何启动日志。

在这里,我能够在__turn_mmu_on之前获得日志,所以我的串行控制台端口工作正常。

还有一件事-我没有JTAG。

谁能提供打开MMU后如何调试Linux内核启动过程的解决方案?

EN

回答 2

Stack Overflow用户

发布于 2012-09-27 11:29:06

-

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

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

/* *启用内存管理单元。这完全改变了可视的结构

*内存空间。您将无法通过它来跟踪执行情况。

*如果您对此有疑问,请查看linux-arm-kernel

*邮件列表存档,然后再向列表发送另一个帖子。

*

* r0 = cp#15控制寄存器

* r1 =机器ID

* r2 =标签或dtb指针

* r9 =处理器ID

* r13 =完成后跳转到的虚拟地址

*

*其他寄存器依赖于完成时调用的函数

*/ .align 5

代码语言:javascript
复制
 .pushsection    .idmap.text, "ax"

条目(__turn_mmu_on)

……

……

__turn_mmu_on_end:

ENDPROC(__turn_mmu_on)

代码语言:javascript
复制
 .popsection   

因此,在调用__turn_mmu_on之后无法跟踪流似乎是很正常的。

但是,根据您使用printascii()的结果,您有没有调试过为什么它不可用?

你知道printascii()在没有配置的情况下是否易于使用吗?在使用它之前有没有必要的设置?你为它提供了一个可运行的环境吗?

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

谢谢。

票数 0
EN

Stack Overflow用户

发布于 2014-01-28 22:09:31

最有可能的是你有一个内存转换配置问题。打开MMU后,必须使用已映射到原始硬件地址(您之前使用的)的虚拟地址来访问串行设备。

要调试问题,您需要确保设置了正确的虚拟地址,并且内存映射配置是设备的内存映射配置。通常,设备内存映射是静态完成的,所以如果您看不到源文件中的错误,您也应该能够在调用__enable_mmu之前输出值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12559402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档