rpi4-osdev/RPI-BUILD.md
2021-05-11 18:20:38 +01:00

2.6 KiB

Writing a "bare metal" operating system for Raspberry Pi 4

Building on the RPi4 itself

It's possible (but not super-simple) to follow this tutorial on the Raspberry Pi without need for an additional build device.

It will require you firstly to re-image your Pi to use the 64-bit Raspberry Pi OS (Beta):

  • Download a zipped .img image file from the 64-bit image list, picking the newest update
  • Unzip it and use the Raspberry Pi Imager to write it to your SD card, selecting "Use custom" from the options and pointing it at your downloaded .img file
  • Boot the Pi and follow the setup wizard to ensure you have a working Internet connection
  • Just for luck, run sudo apt update

You'll then need to download a cross-compiler from the Arm website.

What you're looking for is the current AArch64 ELF bare-metal target (aarch64-none-elf). If this link is somehow broken, you can use Google to search for "Arm GNU-A linux hosted cross compilers".

Then unpack the archive using tar -xf _downloaded-filename_. You'll end up with a gcc directory (albeit with a slightly longer name), which itself contains a bin subdirectory, wherein you'll find the gcc executable (again - with a longer name!). Remember this path.

Now let's build something:

  • Use git to clone this repo: git clone https://github.com/isometimes/rpi4-osdev.git
  • Decide which part you want to build - I like testing with part5-framebuffer (it's visual, so you'll know when it works!)
  • Copy the Makefile.gcc to Makefile
  • Edit the Makefile and ensure the GCCPATH variable points to the bin subdirectory that you just unpacked
  • Type make at the command line and it should build without errors

If you want to then boot with this, you'll need to copy the kernel8.img file to a prepped SD card as the tutorial discusses. For the purposes of testing this process, I did the following (NOTE: it will trash your OS install unless you backup the old files so you can move them back later):

  • sudo cp kernel8.img /boot
  • Then edit /boot/config.txt to include only these lines (for part5-framebuffer anyway, read the tutorial in full for any necessary config changes for other parts):
hdmi_group=1
hdmi_mode=16
core_freq_min=500

Reboot and you should see the part5-framebuffer demo firing up!

Go to part1-bootstrapping >