真工程師:20塊錢做了張「名片」,可以跑Linux和Python
對于一個工程師來說,如何在一張名片上宣告自己的實(shí)力?在上面制造一臺完整的計(jì)算機(jī)說不定是個好主意。
最近,美國一名嵌入式系統(tǒng)工程師 George Hilliard 的名片引發(fā)了眾人的關(guān)注。他以自己的名片為「主板」,在小小的空間里打印了計(jì)算機(jī)系統(tǒng)所需的所有元器件,使其可以成為了一臺可以運(yùn)行 Linux 的電腦。上面還有一個簡化版的 Python 解釋器。
這一頗具極客風(fēng)的創(chuàng)意引來了社交網(wǎng)絡(luò)上人們的廣泛推崇,他的文章在 HackerNews 上出現(xiàn)還不到一天,點(diǎn)贊量就超過了 2000。
制作這樣一張名片,除了需要有足夠的理論知識以外,所需的零件可以在淘寶上買到(是的,這位美國小哥就是這么做的),一張名片的成本大約 20 元人民幣。
讓我們看看他是如何做到的。
作為一名嵌入式系統(tǒng)工程師,George Hilliard 一直在追尋完美的設(shè)計(jì),其中之一就是最簡潔的 Linux 系統(tǒng)計(jì)算機(jī)。他一直在海量處理器型號中尋找最優(yōu)解,最終發(fā)現(xiàn)了新的大陸。他對自己說:「這些處理器便宜得就像白送?!购芸飚a(chǎn)生了用它們來制作可以運(yùn)行 Linux 的名片的想法。
此前,不少極客先驅(qū)曾經(jīng)在名片上發(fā)揮了自己的創(chuàng)意,其中包括 U 盤名片、帶閃光燈的名片,甚至帶無線電首發(fā)功能的名片。不過還從來沒有可以運(yùn)行 Linux 系統(tǒng)的名片。
所以 George 自己動手做了一個:
成品看起來是這個樣子的,它是一臺完整的 ARM 架構(gòu)計(jì)算機(jī),運(yùn)行由 Buildroot 構(gòu)建的定制 Linux 固件。
所以如何讓它跑起來呢?名片的左下角是一個 USB 接口,如果你把它插入一臺計(jì)算機(jī),它將在 6 秒鐘啟動,顯示為 USB 閃存,以及虛擬串行端口,你可以使用卡片的 shell 登陸。閃存驅(qū)動器里有一個 README 文件、個人簡歷的副本以及一些照片。而 shell 上有很多游戲,比如 Unix 上經(jīng)典的 fortune and rogue、2048 以及一個小型的 MicroPython 解釋器。
所有這些都是在一個容量僅有 8MB 的閃存卡上實(shí)現(xiàn)的。Bootloader 的大小為 256KB,內(nèi)核為 1.6MB,整個根文件系統(tǒng)用掉了 2.4MB。所以裝一個系統(tǒng)綽綽有余。它還包含了一個可寫入的主目錄,以備有人想在上面存入什么東西。
最后,一張名片的成本被控制在人民幣 20 元左右,對于一臺電腦來說,這顯得足夠便宜。
名片設(shè)計(jì)是件「技術(shù)活」
George Hilliard 自己設(shè)計(jì)并制作了整張名片,這雖然是作者的本職工作,但要找到足夠便宜的元件還是非常麻煩的。
處理器的選擇是最重要的部分,它會控制成本并確定整個項(xiàng)目是可行的。在一系列調(diào)研后,George 選擇了 F1C100s,它是 Allwinner 出品的一塊賊便宜的芯片,它在成本優(yōu)化上下足了功夫。這塊芯片集成了 RAM 與 CPU,在功能上至少已經(jīng)滿足要求了。
沒想到的是,George 小哥哥竟然是在淘寶上買的 F1C100s,其它元器件都是在 LCSC 上買的。
George 使用 JLC 制作了 PCB 板子,大概只需要 56 塊錢就能做 10 份。George 表示他對 JCL 制作的板材印象深刻,它們雖然不像 OSHPark 制作的那么好,但是質(zhì)量也還不錯,重點(diǎn)是價格實(shí)惠。第一次做出來的電路板是啞光的黑色,它帶有一點(diǎn)指紋的磁感。
在第一次制作電路板時還遇到了一點(diǎn)麻煩:首先,USB 端口不夠長,因此很難與更多的 USB 接口連接;其次,flash footprint 是錯誤的,George 通過手動把針腳壓到元件后面。
在我們驗(yàn)證了各個部分后,再制作一次板材就能得到文章上面的實(shí)力。因?yàn)榫€路板尺寸很小,George 決定立即使用一個便宜的回流焊回流所有的部件。因?yàn)樗苁褂眉す馇懈顧C(jī),所以可以用激光切割壓模機(jī)壓制的焊錫模板。模板的效果非常好,芯片的 0.2 毫米針腳需要特別注意才能保持光潔:激光功率與焦距是非常重要的。
其它空白的 PCB 板是非常好的夾具,用來固定板材以處理針腳,固定可以通過透明膠完成。George 使用焊錫手動焊接元器件,他確保板材和元器件的處理都是無鉛、無害的,因此用來作為名片也是沒什么問題的。
上面這張圖展示的處理結(jié)果有點(diǎn)偏離,但焊錫其實(shí)還是挺容易使用的,而且組裝起來也非常容易。每一個元器件大概需要 10 秒鐘裝配,所以作者盡量減少元器件的數(shù)量。
這樣的名片多少錢?
前面 George 已經(jīng)盡可能降低成本了,他認(rèn)為現(xiàn)在已經(jīng)足夠便宜,即使將名片發(fā)給別人也不會心疼。當(dāng)然,也只有重要的結(jié)識對象才會收到這樣的名片,畢竟所有元件都要你一個個裝配。下面所有的成本都沒有考慮裝配時間,動手能力強(qiáng)的讀者們可以考慮自己做一個。
當(dāng)然,作者也表明還有很多成本并不能量化,例如運(yùn)費(fèi)和試錯等等。但 20 塊 RMB 已經(jīng)非常低了,尤其是對于一塊能運(yùn)行 Linux 系統(tǒng)的板子。這其實(shí)也體現(xiàn)了企業(yè)制作端設(shè)備的成本,元器件成本要比我們想象中的低很多。
名片的性能怎么樣
嗯,它在 6 秒內(nèi)就啟動了一個超級簡化的 Linux 系統(tǒng)。因?yàn)楦袷胶统杀镜纫蛩?,該名片是沒有 I/O、聯(lián)網(wǎng)模塊,以及其它占資源比較大的程序。不過不管怎么樣,George 還是將一些有趣的應(yīng)用拷進(jìn)了固件鏡像文件。
USB
我們能通過 USB 做很多有意思的事,但作者特意令名片保持非常精簡的狀態(tài),我們可以在電腦上做一些嘗試。Linux 可以讓我們像設(shè)備一樣使用一些小工具,作者將該芯片之前的一些開發(fā)工作也傳到了名片內(nèi),所以能有 USB 小工具框架的完整功能。George 決定模擬一個預(yù)生成的閃存驅(qū)動器,并通過虛擬串行端口提供 shell 服務(wù)。
Shell
在登錄為 root 用戶后,我們可以運(yùn)行所有模擬串行控制臺:
- rogue:經(jīng)典的 Unix 游戲《地牢爬蟲》;
- 2048:控制臺版的 2048 游戲;
- fortune:各種名人名言,為了給其它應(yīng)用節(jié)約空間,其并不包含完整的數(shù)據(jù)庫;
- micropython:一個非常輕量的 Python 解釋器。
模擬閃存驅(qū)動
在編譯的過程中,構(gòu)建工具可以生成一個很小的 FAT32 鏡像,并將其加到 UBI 分區(qū)中。正如之前描述的,Linux 小工具子系統(tǒng)會將其作為一個儲存設(shè)備提供給 PC。如果你希望看看閃存驅(qū)動到底發(fā)生了什么,那么最簡單的就是看看源代碼,它里面有作者的一些簡歷與介紹。
閃驅(qū)源碼地址:https://github.com/thirtythreeforty/businesscard-linux/tree/master/package/businesscard-flashdrive/files
制作這種名片需要哪些資源?
在制作電路板名片的過程中,George 使用了 F1C100s 芯片,并在上面運(yùn)行主流的 Linux 5.2 版本。此外,他還提供了一些有關(guān) F1C100s 芯片的文檔,供讀者借鑒。
源代碼
George 已經(jīng)在 GitHub 上開源了 Buildroot tree,讀者可以自行查看。Buildroot tree 包含生成 NOR flash 鏡像的代碼,然后通過處理器的 USB 下載模式進(jìn)行安裝。此外,Buildroot tree 還包含游戲和其他好用的軟件包,比如為 Buildroot 添加 fortune 軟件。
如果你想在項(xiàng)目中使用 F1C100s 芯片,則是一個很好的開始(如有問題,請隨時聯(lián)系)。
Buildroot tree 項(xiàng)目地址:https://github.com/thirtythreeforty/businesscard-linux
此外,George 重定了 Icenowy 發(fā)布的 F1C100s 開發(fā)工作,其可以運(yùn)行 Linux 4.9 版本。George 的名片在接近主流的 5.2 版本上運(yùn)行,其中對補(bǔ)丁進(jìn)行了修補(bǔ)和調(diào)試。
- Icenowy/linux 項(xiàng)目地址:https://github.com/Icenowy/linux/tree/f1c100s
- thirtythreeforty/linux 項(xiàng)目地址:https://github.com/thirtythreeforty/linux/tree/f1c100s-v5.2.4
對于 F1C100s 芯片,George 相信自己擁有目前最好的 U-Boot 配置編譯端口,這些再次基于 Icenowy 的部分工作。
U-Boo 項(xiàng)目地址:https://github.com/thirtythreeforty/u-boot/tree/f1c100s-v2019.04
F1C100s 文檔
George 找到了以下一些關(guān)于 F1C100s 的文檔:
- Allwinner F1C100s Datasheet (提供插腳引線和一般信息):https://www.thirtythreeforty.net/media/F1C100s_Datasheet_V1.0.pdf;
- Allwinner F1C600 Reference Manual(提供 F1C600 的寄存器定義,它是 F1C100s 重貼商標(biāo)后的改進(jìn)版,支持 Linux):https://www.thirtythreeforty.net/media/Allwinner_F1C600_User_Manual_V1.0.pdf;
- schematic for Sipeed's Lichee Nano(這是 George 使其軟件順利運(yùn)行所使用的開發(fā)板):http://dl.sipeed.com/LICHEE/Nano/。
最后,如下圖所示,George 上傳了制作電路板名片的原理圖。
電路板名片原理圖
有網(wǎng)友評論道:「對我來說令人難以置信的是,這樣一塊成本 1.42 美元(約合人民幣 10 元)的芯片幾乎包含了帶動 Linux 的所有必要硬件:500MHz 的 CPU、32MB SDRAM、2D GPU、SD/MMC 支持以及 USB 控制器。他們都封裝在一塊 10mm×10mm 的微小芯片里。這讓我不由得想入坑嵌入式開發(fā)。」
項(xiàng)目感悟
George 表示自己從這個名片項(xiàng)目中學(xué)到了很多,這是他首次使用回流焊來回流元器件的項(xiàng)目。此外,對于一些缺少文檔的元器件,George 還必須學(xué)習(xí)找到必需的資源。
在項(xiàng)目開展過程中,George 借鑒了其有關(guān)嵌入式 Linux 和設(shè)計(jì) PCB 的經(jīng)驗(yàn)。項(xiàng)目并非完全沒有瑕疵,但體現(xiàn)了他的能力。此外,George 表示他正致力于如何從零開始為電路板名片等小型、廉價的 Linux 系統(tǒng)構(gòu)建硬件和軟件。