My RPi mini-kernel is now up and running, with
time-sharing multithreading (very simple), with
programs loaded from the SD card,
and I now have the MMU and caches working.
And of course the nice UART console.
I want to thank you all for the information you
posted here and elsewhere, which helped me a lot.
I also have a question:
I want to set up access control between memory
areas allocated to tasks and I try to understand the
"domain" concept from the ARM documentation.
As I understand it:
- each page is associated to a domain (16 max unless
entering the armv6 MMU mode, in which case there
are 16 more "secure" modes).
- there is a coprocessor register (CP15 c3)which can be
only changed in a privileged mode, and
which determines whether access to a domain is
But, I don't see yet how can I forbid a task all access to
pages that are not its own. Assume the very simple case
where I have 1Mbyte pages of which I only use 16:
- one is used by the kernel (code, data, stack, heap)
- the remaining ones are each used by one
of the 15 tasks.
How do I manage the permissions so that a task can only
access its own page? I don't want to let it even read from
the kernel page.