Hallo, Ich schreibe auf einen AVR32 einen kleinen Kernel. Jetzt bin ich an einen Punkt angelangt an dem ich die MMU initialisieren möchte. Im Manual zu MMU steht folgendes: Both the P1 and P2 segments are default segment translated to the physical address range 0x00000000 to 0x1FFFFFFF. The mapping between virtual addresses and physical addresses is therefore implemented by clearing of MSBs in the virtual address. The difference between P1 and P2 is that P1 is cached, while P2 is uncached. Because P1 and P2 are segment translated and not page translated, code for initialization of MMUs and exception vectors are located in these segments. P1, being cacheable, offers higher performance than P2. Because P1 and P2 are segment translated and not page translated, code for initialization of MMUs and exception vectors are located in these segments. ==> Also möchte ich den ganzen Kernel in dieses Segment verschieben. Wie kann ich das machen ? In Anhang ist mein Linker-Skript. Ich habe das Orginal von Atmel verwendet und ich versuche dieses anzupassen. Das SDRAM muss ich auch verschieben, weil ich möchte ein malloc machen ohne das ich eine Page anlegen muss. Ich habe es auf 0xB0000000 gelegt. Segmentation ist by default aktiviert. Das SDRAM -> mit malloc funktioniert bereits über 0xB.... Adressen die ja auf 0x1... Adressen gemappt werden. Das geht ju hu! Aber -> Wenn ich den Kernel Code linke, dann möchte ich das dieser auf 0x0... Adressen gelinkt ist aber über 0xA... Adressen angesprochen wird also über P2 Segment. Deshalb habe ich versucht im Linker skript die VMA und LMA anzupassen. Leider ohne erfolg. Das Programm läuft zwar, aber malloc funktioniert nicht mehr. Jemand eine Idee wie das geht ? Danke mgiaco
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.