これは私が使用しているプロセッサに固有のものなのかどうか分かりませんので、私はCortex M0 +を使用しています。私は不思議に思っていました:-fPICを使ってgccを通して16進ファイルを生成すると、私は位置独立コードを生成します。しかし、objcopyから出てくるint 16進ファイル形式は、常に各行のヘッダーのアドレス情報を持っています。私がブートローダを書こうとしているのであれば、その情報を無視してそれに関連するバイトをスキップして、実際のコードをいつでもどこでもメモリにロードすることができます。gccを使用してインテル16進フォーマットと位置独立コード
答えて
intel-HEXフォーマットは、プログラムPROM、EPROM、または内部EPROM付きプロセッサに特化して設計されており、通常これらのデバイスのプログラマに使用されます。レコードの先頭にあるアドレスは、プログラムコードと直接関係がありません。これらは、PROMのどのアドレスにデータが書き込まれるかを示します。また、PROMはプロセッサのアドレス空間のどこにでもマッピングできるため、最終アドレスは変更できます。
PROMをプログラムしたくない場合は、レコード以外のデータを削除する必要があります。 (最後にチェックサムを忘れないでください;-)
私はintel-HEX形式を理解しているので、レコードは連続していてはいけません。その間に穴があるかもしれません。
いくつかの発言:
-f PICパラメータはインテルHEXフォーマットについては責任を負いません。私はコマンドラインのどこかで-O ihexを見つけるだろうと思う。実行可能なファイルを作成したい場合、objcopyはより適切な出力形式を提供します。
自分でブートプロセスの初期段階を書いていない限り、ブートローダはロードされません。ブートローダはロードされます。これが起こるアドレスは通常固定であり、変更可能ではありません。したがって、位置独立コードは必要ありませんが、どちらも傷ついていません。
これは古い質問ですが、解決しました。セクションは重要で、リンカファイルで指定されたアドレスに配置されます。データとBSSセグメントは、再配置可能なコードを作成しない限り、位置に依存しません。長い話が短いので、コードをロードするだけではアドレスは関係ありませんが、コードとデータを重要なものにすることができます –
- 1. 位置独立コードと共有オブジェクト
- 2. GOTなしの位置独立コードの使用
- 3. g ++ -fPICは位置独立コードを生成しません
- 4. C++を使用して16進値の位置を変更します
- 5. インテルの16進数検証ツール
- 6. 位置独立コードのリンカ定義シンボルの参照
- 7. Javaバイトコードの位置は独立していますか?
- 8. 16進コードを使用して制約を見つけよう
- 9. PowerPCアセンブリの位置依存、独立したコード、およびグローバル変数
- 10. 独立したスクロールバーを持つ固定位置のサイドバー?
- 11. 位置独立コード、共有ライブラリ、コードベニア - それらを連携させる
- 12. ウィンドウから独立したdivの位置付け
- 13. Groovyスクリプトを使用して16進数の16進数を生成する
- 14. キャストを使用して16進数から16進数に変換する
- 15. LLVMビットコードから位置独立オブジェクトファイルを作成
- 16. TensorFlowはCPUとGPUを独立して使用します
- 17. すべてのコードが位置独立してコンパイルされないのはなぜですか?
- 18. アンドロイドアプリの独立したデータベースを使用
- 19. Direct3Dを独立して使用するアプリケーションとDLL
- 20. 16進コードの相違
- 21. 特定の色の16進コードの暗い色の16進コードを取得
- 22. は独立して
- 23. すべての可能な16進コード
- 24. オーバーレイプロットとスクロールを独立してmatplotlib
- 25. jitsiを別のサーバー(独自のサービス)として独立したサービスとして使用する方法は?
- 26. tiの基本プログラムでの16進コードの使用84+
- 27. ASCII文字列のバイトの16進(16進)レンダリングを使用して文字列を取得します。
- 28. GCCを使用してC++で16進数のストリームを出力するために4.2.1
- 29. バイトを2桁の16進数でフォーマットします
- 30. gccでインテルの数学関数ライブラリを使用するには?
ブートローダでは、1つのことだけを気にする必要があります。ロードしようとしているプログラムのアドレスと交差していないこと。たとえば、ブートローダがカーネルを起動すると想定される場合、カーネルメモリ(カーネルイメージがメモリに格納されている場所)またはdevicetreeと交差してはいけません。 – theadnangondal
しかしそれ以外の問題は、アドレス情報とチェックサムの16進数ファイルを取り除き、残りのアドレスをいくつかのアドレスにダンプしてどこにジャンプするのかという問題でした。あるいは、私が知る必要がある16進ファイルのセグメントがあるので、どこにジャンプするかを知る必要がありますか? –
ええ、私はあなたがその情報を削除することができると思います。私はとにかくそれらのアドレスの使用を見ません...ジャンプは、それらのアドレスとは別に計算されます....おそらく、このヘルプの理解にhttp://stackoverflow.com/questions/5024387/trying-to-load- position-independent-code-on-cortex-m3 – theadnangondal