特定の場所で Linux イメージを DRAM にロードしようとしています。DRAM の終了アドレスは 0x80000000 であり、「メモリ デバイスの終了アドレスは 0x80000000 です」というブート ログからわかります。アドレス「0x5000000」にイメージをロードしています。そして、その前に、イメージのさまざまなセクションが「0x80000000」より大きいアドレスにロードされます。
loading section to address 0xc5000000 from file position 0x1000, size is 0x5ac13e
上記の行の「ファイル位置0x1000から」の意味は何ですか。
読み込まれた最初のセクションは .text セクションです。以下は、セクション ヘッダーの vmlinux イメージ ダンプです。
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS c5000000 001000 5ac13e 00 AX 0 0 4096
[ 2] .notes NOTE c55ac140 5ad140 000168 00 AX 0 0 4
[ 3] __ex_table PROGBITS c55ac2b0 5ad2b0 000fe0 00 A 0 0 4
[ 4] .rodata PROGBITS c55ae000 5af000 20a930 00 A 0 0 64
[ 5] __bug_table PROGBITS c57b8930 7b9930 0075fc 00 A 0 0 1
[ 6] .pci_fixup PROGBITS c57bff2c 7c0f2c 001a90 00 A 0 0 4
[ 7] .builtin_fw PROGBITS c57c19bc 7c29bc 0000cc 00 A 0 0 4
非常に大きなリストなので、完全には投稿できませんでした。しかし、ここでわかることの 1 つは、.text セクションが DRAM の終了アドレスよりも大きいため、保持されている最初のセクションをロードした後にエラーが発生していないにもかかわらず、イメージが適切にロードされないことです。他のセクションをロードすると、このメッセージの後にハングします。
program load complete, entry point: 0x5000000, size: 0x92e7fc
私の質問は、これらの異なるセクション アドレスを DRAM アドレスに合わせる方法です。ここで objcopy ユーティリティを使用して、これらの異なるセクションのアドレスを変更できますか。
コンパイル前にこれらのセクション アドレスを設定する方法はありますか?? 2 つ目は、プログラムの読み込みが完了した後にハングアップする理由です。