rpi4-osdev/part10-multicore
2021-02-22 12:15:47 +00:00
..
audio.bin Added part10-multicore - a rough multicore approach to sound 2021-02-21 20:58:04 +00:00
audio.wav Added part10-multicore - a rough multicore approach to sound 2021-02-21 20:58:04 +00:00
boot.S Cleaned up boot.S so it's clearer where the changes are from part9 2021-02-22 11:28:55 +00:00
fb.c Added part10-multicore - a rough multicore approach to sound 2021-02-21 20:58:04 +00:00
fb.h Added part10-multicore - a rough multicore approach to sound 2021-02-21 20:58:04 +00:00
io.c Added part10-multicore - a rough multicore approach to sound 2021-02-21 20:58:04 +00:00
io.h Now setting DMA transfer on CPU core 2 to show both cores free 2021-02-22 12:09:11 +00:00
kernel.c Now setting DMA transfer on CPU core 2 to show both cores free 2021-02-22 12:09:11 +00:00
link.ld Slimmed down the muilticore example 2021-02-22 10:24:12 +00:00
Makefile Added part10-multicore - a rough multicore approach to sound 2021-02-21 20:58:04 +00:00
Makefile.gcc Added part10-multicore - a rough multicore approach to sound 2021-02-21 20:58:04 +00:00
mb.c Added part10-multicore - a rough multicore approach to sound 2021-02-21 20:58:04 +00:00
mb.h Added part10-multicore - a rough multicore approach to sound 2021-02-21 20:58:04 +00:00
multicore.c Slimmed down the muilticore example 2021-02-22 10:24:12 +00:00
multicore.h Slimmed down the muilticore example 2021-02-22 10:24:12 +00:00
README.md Doc update for part10-multicore 2021-02-22 12:15:47 +00:00
terminal.h Added part10-multicore - a rough multicore approach to sound 2021-02-21 20:58:04 +00:00

Writing a "bare metal" operating system for Raspberry Pi 4 (Part 10)

Using multiple CPU cores

Instead of a background DMA transfer, I suggested that we might use a second CPU core to play the audio whilst our main core continues on. I also said it would be hard on the Raspberry Pi 4... and it is.

I wrote this code as I referenced Sergey Matyukevich's work, for which I am very grateful. It did need some modification to ensure the secondary cores are woken up when the time is right. This code isn't particularly "safe" yet, but it's good enough to prove the concept in principle.

Importantly, you'll need to modify your config.txt file on your SD card to include the following lines:

kernel_old=1
disable_commandline_tags=1
arm_64bit=1

For now, I'll signpost the following points of interest in the code:

  • The new boot.S loader
  • The new multicore.c library and related multicore.h header
  • A revised kernel.c with a new multicore approach to main()
  • A revised link.ld adding provisions for a secondary core's stack and the 0x00000 entry point (a result of setting kernel_old=1)

I will write more soon to attempt to explain what's going on here.