組み込みLinuxを構築していますが、さまざまなセクションのLMAアドレスとVMAアドレスが等しくないためにエラーが発生します。
> /opt/tc/uclibc-crosstools-gcc-4.6/usr/bin/mips-linux-uclibc-objdump -h vmlinux
...
9 __modver 00000470 802b6b90 802b6b90 002aab90 2**0
ALLOC
10 .data 002f5e20 802b8000 802b7b90 002abb90 2**14
CONTENTS, ALLOC, LOAD, DATA
11 .init.text 0001c020 805ae000 805adb90 005a1b90 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
...
私が抱えている問題は、自動生成されたリンカースクリプト(arch / mips / kernel / vmlinux.lds)に次の行があることです。
.init.data : AT(ADDR(.init.data) - 0) { ...}
これは、.init.textVMAが.init.textLMAと等しくなければならないことを示しています。また、スクリプトにあるように、.dataのATを手動で追加しようとしました.data : AT(ADDR(.data))
が、.dataが正しい場所に戻されません。興味深い点の1つは、LMAとVMAが0x470バイト異なることです。これは、まさに__modverセクションのサイズです。なぜ私がこの振る舞いをしているのか、誰かが何か光を当てることができますか?
(mipsアーキテクチャーにはbuildroot 2011.11、uClibc 0.9.32.1、gcc 4.6、およびlinux 3.2を使用しています。)
ありがとう
ジョン