在樹莓派上開發微型的作業系統(MiniOS for Raspberry Pi)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

筆者所使用的作業系統:Lubuntu 18.10

環境建立
安裝 Cross Compiler
For Raspberry Pi 2:
sudo apt install gcc-arm-none-eabi

For Raspberry Pi 3:
sudo apt install gcc-aarch64-linux-gnu build-essential

安裝模擬器
sudo apt install qemu-system-arm

第一個程式例子「Hello Uart」
需要分別建立底下的檔案:

  • The kernel entry point「boot.S 」
  • The C code「kernel.c」
  • Tying the pieces together「linker.ld」
  • A special file that contains shell commands「Makefile」


底下就以RPI2與RPI3來當作例子吧。

1. Say "Hello" to RPI2 UART
https://jsandler18.github.io/ 裡,有針對這四個檔案做說明:


若不使用Makefile與make來編譯與執行時,需用底下指令來編譯
arm-none-eabi-gcc -mcpu=cortex-a7 -fpic -ffreestanding -c boot.S -o boot.o
arm-none-eabi-gcc -mcpu=cortex-a7 -fpic -ffreestanding -std=gnu99 -c kernel.c -o kernel.o -O2 -Wall -Wextra
arm-none-eabi-gcc -T linker.ld -o myos.elf -ffreestanding -O2 -nostdlib boot.o kernel.o

以及底下指令來執行
qemu-system-arm -m 256 -M raspi2 -serial stdio -kernel myos.elf

而在kernel.c的程式碼中有用到memory mapped IO 的觀念,這部份可參考此網頁的說明 https://jsandler18.github.io/extra/peripheral.html

於是筆者將程式修改成會輸出中文字,如下圖:

讀者可從筆者的github下載修改過的程式碼:https://github.com/pinglunliao/miniOS_RPI2/tree/master/helloUart


2. Say "Hello" to RPI3 UART
樹莓派3需要底下幾個檔案:

  • start.S(等於前述RPI2的boot.S)。
  • main.c、gpio.h、uart.c、uart.h(等於將前述RPI2的kernel.c模組化)。
  • link.ld(等於前述RPI2的linker.ld)。
  • Makefile。


讀者可從筆者的github下載修改過的程式碼:https://github.com/pinglunliao/miniOS_RPI3/tree/master/01helloUart1

入門的資訊就介紹到這兒,若想深入了解本文其他部份以及其他主題(如Processor initialization、Framebuffer、Interrupts、Processes等)請自行參考相關資料[1][2][3]。下圖就是Framebuffer的例子。(註:由GIMP可以輸出給framebuffer 用的 header file。)

沒有留言: