ブートローダーの構造を理解するための優れたツールまたは方法?


9

私は最近、オープンソースのブートローダーであるU-bootを実行しているAtmel AT91SAM9G20 SBCで取り組んでいる厄介なバグの原因を突き止めました。問題の核心は、U-bootがハードウェアを私が構築したものとは異なるように構成することを期待していたため、一部のデバイスレジスタが誤って構成されていたことでした。

私は問題を理解したので、レジスタを正しく構成するためにU-bootを微調整する必要があります。プログラムの最後に数行のコードを追加することで盲目的にこれを行うことができますが、それは面倒です。

これは私に私の質問をもたらします:U-bootがmain()から開始してすべてのファイルのすべての可能なコードパスを読み取るよりも効率的に機能する方法を理解するにはどうすればよいですか?私はファイル内をぐるぐる回ってみて、関連する識別子の近くのコードを調べました。これは効果がないことが判明しました。ほとんどのコードは私が気にしていないサブシステムのドライバーのようです。私は実際にブートローダーがどのようにうまく機能するかを理解していますが、私の素朴なアプローチよりも優れた方法があることを願っています。


uboot開発者のメーリングリストに質問してみましたか?
sybreon

回答:


6

役立つ可能性のあるいくつかのツール/戦略があります。

  • ソースコードを理解するためのより良いツール:

  • ランタイム分析

    • デバッガーで興味深いセクションをステップ実行し、何が起こっているかを分析する
    • gccのインストルメンテーション機能を使用して、すべての関数の入り口/出口で良いチャンクを呼び出します。例えば。http://ndevilla.free.fr/etrace/
  • 独自のミニブートローダーを作成する

    • 何かを理解するための最良の方法は、自分でそれを再現することであることがよくあります

残念ながら、すべてに有効な魔法のレシピはありません。


@Runtime Analysis-別の組み込みシステムではそれほど実行可能ではありません。特に、同時に実行されている基盤となるOS(たとえば、これがブートローダー)がない場合はそうではありません。
コナーウルフ

Jobyが示唆するように、デバッガーを使ってステップスルーすることもできます。複雑さに応じて、役立つ場合とそうでない場合があります。
Nick T

Cscopeは、私が想像していたようなものです。もう少し光沢のあるものを期待していましたが、良いスタートです。ありがとう。
pingswept 2010

2

AT91用にビルドするようにどのように構成しましたか?

コードツリーは、アーキテクチャ固有のものは「arch /(cpu class)/(cpu type)/ ...」ツリーに配置されるように設計されているようです。私は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
pingswept

1
ちなみに、私は全体的に、Uブートにかなり感銘を受けました。それがサポートする膨大な数のボードとCPUに対して、それはかなりよく整理されています。ドキュメントはまばらですが、それはブートローダーのコースに並ぶようです。
pingswept 2010

@pingswept:ねえ、4層のLinux。いいね。多分私はiMX233の代わりにそのチップを調べるべきです。私は、ARM + 2つのSDRAMチップを4層に配置しようとして、他のプロジェクトで使用するために棚上げにしていたのです。私もAltiumユーザーです。
darron

9G20とiMX233はかなり近いです。イーサネットMACが内蔵されており、チップの方が少量で安価なので、9G20を選択しましたが、iMX233が2位でした。
pingswept 2010

また、Chumby Hacker Boardもご覧ください。iMX233を中心にシステムを構築する場合は、このページから始めるのがよいでしょう。Altiumファイルは次のwikiページにあります:wiki.chumby.com/mediawiki/index.php/Chumby_hacker_board_beta
pingswept
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.