我建立一個嵌入式Linux,和我遇到引發的各種段的LMA和VMA地址錯誤不相等: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 /內核/ vmlinux.lds)具有以下行:
.init.data : AT(ADDR(.init.data) - 0) { ...}
這對我將表明.init.text VMA應該等於的.init。文本LMA。我也嘗試手動爲.data添加一個AT,這樣我在腳本中有.data : AT(ADDR(.data))
,但是這不會將.data移回到正確的位置。其中一個值得注意的地方是LMA和VMA的差別是0x470字節,這正好是__modver部分的大小。任何人都可以闡明爲什麼我會得到這種行爲?
(我用的buildroot 2011.11,uClibc的0.9.32.1,GCC 4.6和Linux 3.2爲MIPS架構。)
感謝
約翰