10 月 10 日消息 CEO 親自寫的代碼是啥樣?來自 RealVNC 公司的 CEO 說,自己常年當管理者,代碼生疏了,所以決定重拾一下程序員工作,寫一點樹莓派的代碼。
結(jié)果,一不小心就上了技術(shù)論壇 Hacker News 熱門。
這串代碼究竟是什么?打開這位 CEO 的 Twitter 一看,是一段小游戲。
花了一年時間就寫了個這?當然不是,這位 CEO 可是從零開始打造的這款游戲,連系統(tǒng)啟動文件都是自己寫的。
通常我們使用樹莓派都會在 SD 卡上刷寫好操作系統(tǒng),其實樹莓派還能從零開始打造成一款“裸金屬”(Bare Metal)計算機。
所謂“裸金屬”就是沒有操作系統(tǒng)的計算機,直接在邏輯硬件上執(zhí)行指令。這位 CEO 說,打造一個裸金屬系統(tǒng)是他兒時的志向。
所以就有了這串,從零開始到成功運行 Hello World,再到運行小游戲的程序。
從啟動硬件到 Hello World
目前,該項目已經(jīng)完成了 12 章,仍在 GitHub 上繼續(xù)更新中,截至今天已經(jīng)收獲了 1.6k 星。
項目內(nèi)容有:啟動、構(gòu)建基本代碼、運行 HelloWorld、調(diào)用藍牙聲音硬件等。
在編寫代碼之前先要準備樹莓派 4 的周邊硬件:HDMI 線、micro-SD 卡以及 USB 轉(zhuǎn) TTL 線。
由于編譯過程是在電腦上進行,而程序是在樹莓派上運行,因此還要在電腦上安裝交叉編譯器。
接下來開始引導樹莓派啟動:
樹莓派 4 運行的第一個代碼需要用匯編語言編寫,之后由 C 語言來編寫內(nèi)核。
寫好啟動代碼后,再制作 makefile 文件進行交叉編譯。
CFILES = $(wildcard *.c) FILES = $(CFILES:.c=.o) GCCFLAGS = -Wall -O2 -ffreestanding -nostdinc -nostdlib -nostartfiles GCCPATH = ../../gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin all: clean kernel8.img boot.o: boot.S $(GCCPATH)/aarch64-none-elf-gcc $(GCCFLAGS) -c boot.S -o boot.o %.o: %.c $(GCCPATH)/aarch64-none-elf-gcc $(GCCFLAGS) -c $< -o $@ kernel8.img: boot.o $(OFILES) $(GCCPATH)/aarch64-none-elf-ld -nostdlib boot.o $(OFILES) -T link.ld -o kernel8.elf $(GCCPATH)/aarch64-none-elf-objcopy -O binary kernel8.elf kernel8.img clean: /bin/rm kernel8.elf .o .img > /dev/null 2> /dev/null || true
運行 make 后構(gòu)建內(nèi)核映像 kernel8.img,將鏡像文件復制到 SD 卡中,這樣就可以啟動樹莓派了。
不過樹莓派在這一通操作后只能運行啟動畫面,之后只剩下一個空的黑屏。
然后就是讓樹莓派程序員熟悉的“Hello World”程序,但是在一臺黑屏的機器上如何運行呢?這就需要用到 UART 串行通信。
剛剛準備的 USB 轉(zhuǎn) TTL 線這時候就派上了用場。
將 TTL 的 RX 引線(白色)鏈接到 GPIO 的 TXD 引腳上,TX 引線(綠色)鏈接到 GPIO 的 RXD 引腳上,地線(黑線)連接到 Ground 引腳上。
電腦上還要安裝 PuTTY,將鏈接方式選擇為“Serial”,Speed 設置為 115200
#include“io.h” void main() { uart_init(); uart_writeText(“Hello world!\n”); while (1); }
這里的頭文件 io.h 也不存在,需要自己定義。
但是此時的樹莓派還有沒字體文件,也就是屏幕無法正常顯示英文字母,也需要自定義。經(jīng)過一系列操作后,這位 CEO 終于在屏幕上成功顯示了“Hello world!”和幾個幾何圖形。
編程并沒有到此截止,這位 CEO 后面又實現(xiàn)了藍牙互傳信息、播放音頻文件等操作。他還表示,項目還在持續(xù)更新中。
關于作者
“裸金屬”樹莓派的作者 Adam Greenwood-Byrne 畢業(yè)于牛津大學,2009 年加入 RealVNC 擔任銷售經(jīng)理,2018 年成為這家公司 CEO。
他的 GitHub 主頁上目前只有一個項目,第一章內(nèi)容是他在疫情隔離期間完成的,之后項目就處于休眠狀態(tài)。
不過從今年的活躍度來看,他從今年開始又重拾了該項目,開始認真寫代碼了。
項目 GitHub 鏈接:點擊打開
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。