1. 程式人生 > 資訊 >CEO 親自寫程式碼登上熱榜,從零開始打造“裸金屬”樹莓派

CEO 親自寫程式碼登上熱榜,從零開始打造“裸金屬”樹莓派

10 月 10 日訊息CEO 親自寫的程式碼是啥樣?來自 RealVNC 公司的 CEO 說,自己常年當管理者,程式碼生疏了,所以決定重拾一下程式設計師工作,寫一點樹莓派的程式碼。

結果,一不小心就上了技術論壇 Hacker News 熱門。

這串程式碼究竟是什麼?開啟這位 CEO 的 Twitter 一看,是一段小遊戲。

花了一年時間就寫了個這?當然不是,這位 CEO 可是從零開始打造的這款遊戲,連繫統啟動檔案都是自己寫的

通常我們使用樹莓派都會在 SD 卡上刷寫好作業系統,其實樹莓派還能從零開始打造成一款“裸金屬”(Bare Metal)計算機。

所謂“裸金屬”就是沒有作業系統的計算機,直接在邏輯硬體上執行指令。這位 CEO 說,打造一個裸金屬系統是他兒時的志向。

所以就有了這串,從零開始到成功執行 Hello World,再到執行小遊戲的程式。

從啟動硬體到 Hello World

目前,該專案已經完成了 12 章,仍在 GitHub 上繼續更新中,截至今天已經收穫了 1.6k 星。

專案內容有:啟動、構建基本程式碼、執行 HelloWorld、呼叫藍芽聲音硬體等。

在編寫程式碼之前先要準備樹莓派 4 的周邊硬體:HDMI 線、micro-SD 卡以及 USB 轉 TTL 線。

由於編譯過程是在電腦上進行,而程式是在樹莓派上執行,因此還要在電腦上安裝交叉編譯器

接下來開始引導樹莓派啟動:

樹莓派 4 執行的第一個程式碼需要用匯編語言編寫,之後由 C 語言來編寫核心。

寫好啟動程式碼後,再製作 makefile 檔案進行交叉編譯。

CFILES=$(wildcard*.c)FILES=$(CFILES:.c=.o)GCCFLAGS=-Wall-O2-ffreestanding-nostdinc-nostdlib-nostartfilesGCCPATH=../../gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/binall:cleankernel8.imgboot.o:boot.S$(GCCPATH)/aarch64-none-elf-gcc$(GCCFLAGS)-cboot.S-oboot.o%.o:%.c$(GCCPATH)/aarch64-none-elf-gcc$(GCCFLAGS)-c$<-o
[email protected]
:boot.o$(OFILES)$(GCCPATH)/aarch64-none-elf-ld-nostdlibboot.o$(OFILES)-Tlink.ld-okernel8.elf$(GCCPATH)/aarch64-none-elf-objcopy-Obinarykernel8.elfkernel8.imgclean:/bin/rmkernel8.elf.o.img>/dev/null2>/dev/null||true

執行 make 後構建核心映像 kernel8.img,將映象檔案複製到 SD 卡中,這樣就可以啟動樹莓派了。

不過樹莓派在這一通操作後只能執行啟動畫面,之後只剩下一個空的黑屏。

然後就是讓樹莓派程式設計師熟悉的“Hello World”程式,但是在一臺黑屏的機器上如何執行呢?這就需要用到 UART 序列通訊。

剛剛準備的 USB 轉 TTL 線這時候就派上了用場。

將 TTL 的 RX 引線(白色)連結到 GPIO 的 TXD 引腳上,TX 引線(綠色)連結到 GPIO 的 RXD 引腳上,地線(黑線)連線到 Ground 引腳上。

電腦上還要安裝 PuTTY,將連結方式選擇為“Serial”,Speed 設定為 115200

#include“io.h”voidmain(){uart_init();uart_writeText(“Helloworld!\n”);while(1);}

這裡的標頭檔案 io.h 也不存在,需要自己定義。

但是此時的樹莓派還有沒字型檔案,也就是螢幕無法正常顯示英文字母,也需要自定義。經過一系列操作後,這位 CEO 終於在螢幕上成功顯示了“Hello world!”和幾個幾何圖形。

程式設計並沒有到此截止,這位 CEO 後面又實現了藍芽互傳資訊、播放音訊檔案等操作。他還表示,專案還在持續更新中。

關於作者

“裸金屬”樹莓派的作者 Adam Greenwood-Byrne 畢業於牛津大學,2009 年加入 RealVNC 擔任銷售經理,2018 年成為這家公司 CEO。

他的 GitHub 主頁上目前只有一個專案,第一章內容是他在疫情隔離期間完成的,之後專案就處於休眠狀態。

不過從今年的活躍度來看,他從今年開始又重拾了該專案,開始認真寫程式碼了。

專案 GitHub 連結:點選開啟