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