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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Oliver (Gast)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von ui (Gast)


Bewertung
0 lesenswert
nicht 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 S. (gizmo)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.