Forum: Mikrocontroller und Digitale Elektronik Kann MMU / MPU Registerzugriff verhinden?


von Oliver (Gast)


Lesenswert?

Hi,

ist es möglich, auf einem ARM einem Prozess zu verbieten, auf Register 
zuzugreifen, mit denen die Hardware (Timer, ...) gesteuert wird?

Konkret geht es darum, ob ich hardwaremäßig sicherstellen kann, dass ein 
Prozess, der durch einen Bug außer Kontrolle gerät, das Betriebssystem 
abschießen kann. Das wäre in diesem Fall ein RTOS, z.B. FreeRTOS.

Ab welchem Typ ARM geht das, und auf welchen Hardwarebaustein (MMU, MPU) 
muss ich da achten?

Danke.

von Stefan F. (Gast)


Lesenswert?

Guck mal hier nach Stellen, wo das Wort "protect" vorkommt: 
https://www.eecs.umich.edu/courses/eecs373/labs/refs/M3%20Guide.pdf

Der NVIC hat dazu gewisse Funktionen, ebenso der Stack (zwei separate 
Stapelzeiger). Mit der eventuell vorhandenen MPU kannst du Zugriffe auf 
RAM und Peripherie schützen.

von ui (Gast)


Lesenswert?

Beide können das auf unterschiedliche Weise.
Auch wenn die ARM Architektur eigentlich recht dankbar ist, musst du dir 
aber sofort, sobald du sowas machen willst, über initialisierung von 
deinem ganzen System gedanken machen.
Hauptproblem: Bei MMU oder auch MPU kannst du immer nur Bereiche 
freigeben/sperren. Dies bedeutet, dass i.d.R. immer nur ganze Pages 
(also zwischen 1 - 4kB) freigegeben werden können. Da aber bei ARM die 
Clock zusammengeführt auf einige Pages sind, kannst du quasi von dem 
Prozess, der Zugriff auf die Clocksteuerung von Peripherie hat, immer 
auch andere Peripherie mit abschalten. Das ist weniger ein Problem wenn 
du das global machst, z.B. einmal initialisierst und dann die Tasks 
werkeln lässt.

Vor allem wirst du aber das Problem haben das du das bei FreeRTOS alles 
per Hand machen musst -> du musst dich noch ordentlich mit der 
Architektur auseinandersetzen.

von Christoph (gizmo)


Lesenswert?

Oliver schrieb:
> Ab welchem Typ ARM geht das, und auf welchen Hardwarebaustein (MMU, MPU)
> muss ich da achten?

Bei den Cortex-M und Cortex-R ist die MPU immer optional, das heisst du 
musst die Hersteller/Distributoren danach abklappern, ST hat in vielen 
STM32 eine drin, sogar in einigen M0+.

Bei den Cortex-A kriegst du fast immer eine MMU mit TrustZone weil die 
ja unter anderem für volle OS wie Linux gedacht sind.

: Bearbeitet durch User
von Ben W. (ben_w)


Lesenswert?

mit der MPU auf einem Cortem-M3/M4 ist das relativ simpel .
FreeRTOS gibt es auch in einer MPU version die das mesite für dich 
händelt.
Da kannst du einen "unprivileged" Thread (restrictedTask) erzeugen der 
erstmal auf nichts außer den eigenen Stack zugreifen darf. Wenn der Task 
auf mehr zugreifen soll kannst du ihm bis zu 3 "Ausnahmen" dazugeben, 
z.B: wenn der einen Uart benutzen soll etc.

kleiner TIPP. die aktuelle FreeRTOS version 9.0 hat den MPU support 
leider nur für den Compiler Keil and GCC, IAR fehlt leider noch, ist 
aber gerade in der mache.
Wir testen gerade eine beta von IAR+ST die soweit gut läuft. Dies wird 
dann vermutlich auch in die STCubeMX von ST aufgenommen.

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
Noch kein Account? Hier anmelden.