理解引导加载程序结构的好工具或方法?


9

最近,我弄清楚了我一直在与运行U-boot(一个开源的Bootloader)的Atmel AT91SAM9G20 SBC一起工作的一个令人讨厌的错误的原因。问题的核心是U-boot期望配置的硬件与我构建的硬件不同,因此某些设备寄存器的配置不正确。

现在,我已经解决了问题,我需要调整U-boot以正确配置寄存器。我可以通过在程序末尾添加几行代码来盲目地执行此操作,但这很麻烦。

这使我想到了一个问题:与从main()开始并读取所有文件中所有可能的代码路径相比,我如何找出U-boot的工作效率更高?我试着在文件中四处寻找,并查看相关标识符附近的代码。事实证明这是无效的;似乎大多数代码是我不在乎的子系统的驱动程序。我实际上已经了解了引导加载程序到现在的运行情况,但是我希望有一种比我幼稚的方法更好的方法。


您是否尝试过在uboot开发人员邮件列表中询问?
sybreon 2010年

Answers:


6

有几种工具/策略可能会有所帮助:

  • 更好地理解源代码的工具:

  • 运行时分析

    • 使用调试器逐步浏览有趣的部分并分析发生了什么
    • 使用gcc的检测功能在每个函数的进入/退出时调用一个好块。例如。http://ndevilla.free.fr/etrace/
  • 编写自己的迷你引导程序

    • 我经常发现理解某事的最好方法是自己重建

不幸的是,没有万能的万能药。


@Runtime Analysis-在单独的嵌入式系统上不可行,尤其是在没有同时运行底层操作系统的情况下,例如,引导加载程序。
康纳·沃尔夫

您仍然可以按照Joby的建议使用调试器来逐步完成它。根据复杂性,它可能有用也可能没有帮助。
尼克T 2010年

Cscope是我在想的那种东西。我希望有一些更闪亮的东西,但这是一个好的开始。谢谢。
2010年

2

您如何配置它以为AT91构建?

代码树的设计似乎使得任何特定于体系结构的东西都位于“ arch /(cpu类)/(cpu类型)/ ...”树中。我在arch / arm / cpu / arm926ejs / at91下找到了AT91代码...您要更改的特定于变体的东西不在此处吗?在该目录中没有太多可浏览的内容,尤其是因为几乎有一半的文件是特定于AT91变体的。

抱歉,如果这很明显...但是您没有提到检查此内容。

我还没有看过uBoot代码树,但是您的帖子吓到我了。我的后燃器项目最终涉及在自定义iMX233 PCB上使用uBoot和Linux。我对获得有关uBoot架构和特定于变体的内容的隔离程度以及将要经历的痛苦有多大的反馈非常感兴趣。


是的,我在arch / arm / cpu / arm926ejs / at91 / *上度过了一些美好的时光,但感谢您的建议。事实证明,我要查找的代码实际上在处理器引导ROM中,只有Atmel可以访问。血腥的细节在这里:at91.com/forum/viewtopic.php/f,9/t,19732/start,0/st,0/sk,t/sd,a
pingsept 2010年

1
顺便说一句,总的来说,我对U-boot印象深刻。对于它支持的大量板卡和CPU,它组织得很好。该文档很少,但是对于引导程序来说似乎是一样的。
2010年

@pingswept:嘿,Linux在4层上。真好 也许我应该研究该芯片而不是iMX233。我当时真想让我的ARM +两个SDRAM芯片放在4层上,并搁置以用于其他项目,真是太麻烦了。我也是Altium用户。
darron

9G20和iMX233非常接近。我之所以选择9G20,是因为它内置了以太网MAC,而且芯片数量少,价格便宜一些,但iMX233却紧随其后。
2010年

另外,请看一看Chumby Hacker Board,如果您决定围绕iMX233构建系统,那可能是一个不错的起点。Altium文件位于此Wiki页面上:wiki.chumby.com/mediawiki/index.php/Chumby_hacker_board_beta
2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.