Im Anhang sind 2 Linker Files für den AVR32 – AP7000. Ich möchte die MMU
verwenden deshalb versuche ich den Code in das P2 Segment zu
verschieben. Das Funktionier auch schon nur eben noch nicht ganz. Ich
habe noch folgendes Problem:
Im low.lds habe ich folgende MEMORY:
1 | MEMORY
|
2 | {
|
3 | FLASH (rxai) : ORIGIN = 0x00000000, LENGTH = 8M
|
4 | CPUSRAM (rwxa) : ORIGIN = 0x24000000, LENGTH = 32K
|
5 | SDRAM (rwxa) : ORIGIN = 0x10000000, LENGTH = 32M
|
6 | }
|
7 | SECTIONS
|
8 | {
|
9 | /* Read-only sections, merged into text segment: */
|
10 | PROVIDE (__executable_start = 0xa0000000); . = 0xa0000000;
|
11 | .interp : { *(.interp) } >FLASH AT>FLASH
|
12 | .reset : { *(.reset) } >FLASH AT>FLASH
|
13 | . = . & 0x9fffffff;
|
14 | ..
|
15 | ..
|
usw. siehe low.lds im Anhang. So funktioniert alles perfekt !
Im Linker File high.lds habe ich folgendes gemacht:
1 | MEMORY
|
2 | {
|
3 | FLASH (rxai) : ORIGIN = 0x00000000, LENGTH = 8M
|
4 | HFLASH (rxai) : ORIGIN = 0xA0000000, LENGTH = 8M
|
5 |
|
6 | CPUSRAM (rwxa) : ORIGIN = 0x24000000, LENGTH = 32K
|
7 | SDRAM (rwxa) : ORIGIN = 0x10000000, LENGTH = 32M
|
8 | }
|
9 | SECTIONS
|
10 | {
|
11 | /* Read-only sections, merged into text segment: */
|
12 | PROVIDE (__executable_start = 0xa0000000); . = 0xa0000000;
|
13 | .interp : { *(.interp) } >HFLASH AT>FLASH
|
14 | .reset : { *(.reset) } >HFLASH AT>FLASH
|
15 | . = . & 0x9fffffff;
|
16 | .hash : { *(.hash) } >HFLASH AT>FLASH
|
17 | .dynsym : { *(.dynsym) } >HFLASH AT>FLASH
|
18 | …
|
19 | …
|
usw. siehe Anhang high.lds
Ich habe also eine Memory HFLASH hinzugefügt. Beim AVR32 ist
Segmentation default eingeschaltet das heisst alle 0xA… adressen werden
auf 0x0… gemappt. usw.
Ich hab alle “ FLASH AT>FLASH “ auf “ HFLASH AT>FLASH “ geändert.
>> ausschnitt aus objdump mit low.lds
1 | Sections:
|
2 | Idx Name Size VMA LMA File off Algn
|
3 | 0 .reset 00000008 00000000 00000000 00001000 2**2
|
4 | CONTENTS, ALLOC, LOAD, READONLY, CODE
|
5 | 1 .rela.got 00000000 00000008 00000008 00001008 2**2
|
6 | CONTENTS, ALLOC, LOAD, READONLY, DATA
|
7 | 2 .text 00009234 00000008 00000008 00001008 2**2
|
8 | CONTENTS, ALLOC, LOAD, READONLY, CODE
|
9 | 3 .rodata 00000084 0000923c 0000923c 0000a23c 2**2
|
10 | CONTENTS, ALLOC, LOAD, READONLY, DATA
|
11 | 4 .gcc_except_table 00000e00 00009400 00009400 0000a400 2**9
|
12 | ...
|
13 | ...
|
Ausschnitt aus objdump mit high.lds
1 | Sections:
|
2 | Idx Name Size VMA LMA File off Algn
|
3 | 0 .reset 00000008 a0000000 00000000 00001000 2**2
|
4 | CONTENTS, ALLOC, LOAD, READONLY, CODE
|
5 | 1 .rela.got 00000000 a0000008 00000008 00001008 2**2
|
6 | CONTENTS, ALLOC, LOAD, READONLY, DATA
|
7 | 2 .text 00009234 a0000008 00000008 00001008 2**2
|
8 | CONTENTS, ALLOC, LOAD, READONLY, CODE
|
9 | 3 .rodata 00000084 a000923c 0000923c 0000a23c 2**2
|
10 | CONTENTS, ALLOC, LOAD, READONLY, DATA
|
11 | 4 .gcc_except_table 00000e00 a0009400 000092c0 0000a400 2**9
|
12 | ...
|
13 | ...
|
Bei Idx 4 sieht man das Problem gut, VMA und LMA sind versetzt, wieso ?
Was mache ich da falsch kennt sich jemand damit aus?
Die Linker File sind ident bis auf VMA. So läuft es nicht was auch klar
ist, weil die Adressen nicht stimmen.
mathias