<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近有幾個有趣的小想法想實踐一下,希望使用低功耗、低成本的硬體跑一些持續性的獨立的服務。最初的想法是入手一個樹莓派得了,開發板尺寸小巧,資源豐富。然而搜尋價格的時候發現最新版的樹莓派,如果搭配上一些常用配件,加一個客製化外殼,算下來成本幾乎能和我之前的 NUC 裸機價格一較高下。
那麼,有沒有價效比更高的方案呢?
於是,目光就鎖定到了同為 ARM 架構的廉價 SoC 上,前一陣群裡有同學推薦過“玩客雲”,搜尋了一番,發現雖然晶片其實是幾年前的款,但是效能並不差,擁有一個千兆網口,並且機器自帶一個金屬外殼 。因為我不需要使用 GPIO 介面 ,所以相比較樹莓派而言,一套 50 元左右的小主機,價效比高非常多。
玩客雲小裝置的外觀
而且裝置因為使用了廉價的 ARM 晶片,不光執行過程中的溫度不算高,日常功耗也非常低。
實際使用過程中的功耗也比較低
玩客雲採用的晶片方案是 Amlogic S805,和著名的 Hard Kernel 幾年前推出過的開發板“ODROID-C1+”幾乎完全一致。這個板子效能基本是樹莓派3B的兩倍,前文中提到的玩客雲的成本大概是目前二手樹莓派3的1/5~1/6。
S805 和樹莓派3之間的效能比較
如果追求絕對的效能,在價格差不多的情況下,可以考慮入手搭載 S905 晶片的“電視盒子”,效能和最新的樹莓派4相比也不落下風,甚至在一些環節中效能高出不少。不過缺點嘛也是有的,目前這類機器受限於成本問題,很少有利於散熱的金屬外殼;因為效能更高,發熱量也會更大。不過即便如此,綜合成本也只是樹莓派4的十幾分之一。
相對於硬體而言,軟體系統也非常重要。
擁抱 Linux 讓我們的裝置有了無窮的可能性,樹莓派有 Raspberry Pi OS(Raspbian),玩客雲則因為搭載了和 Hard Kernel 之前產品一致的 Soc ,所以可以使用 ArmBian。
在正式介紹如何為玩客雲更換系統,以及編譯一份乾淨的新版映象之前,我要介紹一下這個系統的由來,因為這裡有太多前人的無私貢獻。
Armbian 主要開源專案狀況
2014年末,Armbian 立項,或許是暴風雨來臨之前的沉寂,在 GAP一年多之後的2016年,Armbian 開始了每年千萬行程式碼變動的爆發式成長。截止目前為止,官方專案已經支援了接近 150 個不同的硬體裝置的適配。
https://github.com/150balbes/build
在2018年7月的時候,一名網名是150balbes的戰鬥民族網友出手了,他開始為各種官方原本並不支援的硬體做適配,過程中吸引了來自全世界有相同硬體折騰需求的網友,他第一個適配的 SoC 就是我們本文的主角同源的 s90x 系列的晶片。
在2020年的光棍節前,他或許是覺得直接在官方原有的程式碼檔案上進行修改,每次上游程式碼(Armbian)更新,他需要合併的內容太多了,畢竟Armbian是一個每年千萬行程式碼變更的專案,於是他刪除了原本開發了幾個月的程式碼,在官方原有開發模式上新增了一個只有他自己使用的釋出型別(dev),將之前的程式碼遷移了過來。隨後他開始了專注於將 Armbian 適配到電視盒子上,並且將自己的分支命名為 armbian-tv
,持續更新到了現在。
https://github.com/moham96/Build-Armbian
阿拉伯網友 moham96 很快關注到了俄羅斯小夥子的專案,並立馬 fork 了一份,升級了專案使用的 Linux 核心到 4.x 版本,並針對裝置 Mac 地址設定方式進行了調整。
https://github.com/Leo357449107/Build-Armbian/tree/20.11
前文提到的 150balbes 在春天的時候進行了一次分支的重構,其實這次重構非常“暴力”,原作者直接刪除了之前一直在維護的 Build-Armbian
專案,重新 fork 了一份新的 Armbian。
一般情況問題不大,但是如果有其他開發者正在基於他的程式碼進行開發的話,就會遇到類似下面的狀況:
2021/01/23 leo357449107 我正在愉快地Dubug的時候,上游把程式碼刪了,我也把程式碼回滾了,然後,就沒有然後了。
估計也是沒辦法,網友 leo 只好在 GitHub 上尋找了一份原來專案的 fork 版本(上文中的 moham96 的分支),再次進行 fork,並提交了自己的程式碼變更。
隨後網友 leo 的版本也就此停止了更新和維護(Armbian 20.12 Buster with Linux 5.9.0-rc7),不過在停更之前,他為玩客雲使用的 Armbian 帶來了下面的內容:
meson8b-odroidc1t_noHDMI.dtb
替換了 meson8b-odroidc1t.dtb
,讓硬體作為伺服器用途使用的時候,可以更加省電。https://github.com/witallwang/Build-Armbian
今年4月9日,有一位網友在 leo 的基礎上繼續進行了一些實用的調整。
linux-5.10.y
可惜的是,因為上游的中斷,這個系統的版本也被停留在了Armbian 的老版本 (Armbian 20.12 Buster, Linux 5.10.28)。
如果我們將上面的幾份程式碼進行合併,是不是就可以讓玩客雲的硬體繼續使新版本的 Armbian 系統,以及或許更新的 Linux 核心了呢?在萌生了這個想法之後,我將上面的程式碼分別溯源和進行了一些整理合並。
將 150balbes 的老程式碼以及最新程式碼提交合並回 armbian,修正時間軸:
https://github.com/soulteary/armbian-build-s805/tree/codebase-merge-150balbes
將 leo 的程式碼變更合併到已經合併到 armbian 程式碼中:
https://github.com/soulteary/armbian-build-s805/commits/codebase-merge-leo357449107
將 witallwang 的程式碼變更合併到 armbian 程式碼中:
https://github.com/soulteary/armbian-build-s805/commits/codebase-merge-witallwang
抽取 leo 和 witallwang 的程式碼變更,合併到 150balbes 的最新程式碼以及 armbian 最新程式碼中:
https://github.com/soulteary/armbian-build-s805/commits/codebase-on-150balbes https://github.com/soulteary/armbian-build-s805/commits/codebase-on-offical
幾位作者的程式碼變更時間軸可以參考下面的紀錄檔。
| * 82d18dbad (origin/codebase-on-150balbes, codebase-on-150balbes) s805 with kernel 5.10.x |/ | * b8a13a355 (origin/codebase-20211107) fix script | * aa688d0f4 fix filename | * 27860835d rm build flag | * 68ec3eac6 (origin/codebase-merge-witallwang, codebase-merge-witallwang) merge part of https://github.com/witallwang/Build-Armbian/commit/1691d4516893363ae2aaa63a2b73a68e780fbff2 | * e15a48946 (origin/codebase-merge-leo357449107, codebase-merge-leo357449107) merge part of https://github.com/Leo357449107/Build-Armbian/commit/5770744a0004740e378b87b86645919ee33fb630 | * e170397d9 (origin/codebase-merge-150balbes, codebase-merge-150balbes) Merge pull request #1 from 150balbes/armbian-tv | | | | * e7bdaef83 v20210814
相信上文已經交代清楚了玩客雲 S805 Soc 使用的 Armbian 系統程式碼的來源,所以在編譯的時候,你可以根據自己的需求進行選擇,以及二次開發。
編譯或者開發 Armbian 系統映象的方法,其實非常簡單。(如果你希望瞭解完整的細節,可以閱讀官方檔案。)下文將以合併到最新版本的 150balbes 的原始碼為基礎進行敘述。
先將程式碼 clone
到本地或者伺服器。
git clone https://github.com/soulteary/armbian-build-s805.git --branch=codebase-on-150balbes
如果你不希望針對系統進行調整,不在意歷史提交記錄,並且想在國內的機器構建,也可以使用下面的方式加速下載原始碼:
git clone https://github.com.cnpmjs.org/soulteary/armbian-build-s805.git --depth=1 --branch=codebase-on-150balbes
完整程式碼差不多接近1個GB,所以下載的時候需要有一些耐心。
建議使用按量付費的海外雲主機進行下載和構建,可以節約不少時間。如果你的硬碟空間比較緊張,可以考慮在 Git Clone 完畢之後,刪除根目錄的 .git
目錄,完整原始碼尺寸可以降低一半到 500MB 左右。
此外,折騰 Armbian 系統編譯,需要提前預留15G以上的磁碟空間,因為除了程式碼之外,預設構建選項下,編譯後的產物會佔用 10G 以上的空間。
du -hs armbian-build-s805 13G armbian-build-s805
開始構建之前,如果你是在國內的話,需要執行下面的命令,將程式碼中的一些依賴的下載方式切換為國內,避免因為網路問題,導致系統無法構建。
find . -type f -name "*.sh" | xargs -I {} sed -i 's///github.com////github.com.cnpmjs.org//' {} find . -type f -name "*.conf" | xargs -I {} sed -i 's///github.com////github.com.cnpmjs.org//' {} find . -type f -name "*.conf" | xargs -I {} sed -i 's/http://w1.fi//git://w1.fi//' {}
命令執行完畢之後,可以繼續執行下面的命令進行檢查,順利的話,將不會有任何輸出(因為都替換完畢了):
find . -type f -name "*.sh" | xargs -I {} cat {} | grep "//github.com/" find . -type f -name "*.conf" | xargs -I {} cat {} | grep "http://w1.fi/"
在構建過程中,你可能會看到一個編譯錯誤:
fit_image.c:19:10: fatal error: libfdt.h: No such file or directory
這個錯誤的原因是 150balbes 的老版本程式碼對於缺少一個開發依賴,這個問題作者在新版程式碼中修正了,因為上文提到的歷史原因,這個問題被“繼承”了下來。不過因為這個問題的觸發場景是無線網路卡開啟熱點,所以本身不具備無線能力的玩客雲,其實可以忽略掉。當然,如果你需要使用無線網路卡,那麼可以對此進行一個簡單的依賴修復:
apt install libfdt-dev
在上面的步驟就執行完畢之後,便可以通過下面的命令進行構建啦:
./compile.sh BOARD=裝置名稱 BRANCH=設定型別 RELEASE=focal BUILD_MINIMAL=yes BUILD_DESKTOP=no KERNEL_ONLY=no KERNEL_CONFIGURE=no COMPRESS_OUTPUTIMAGE=sha,gpg,img DOWNLOAD_MIRROR=china MAINLINE_MIRROR=tuna EXTRAWIFI=no
這裡的“裝置名稱”,是我們在 config/boards
裡存放的檔名稱,所以根據分支的不同,我們會使用到的名稱有:s805、s812、odroidc1。而“設定型別”則是 config/kernel
中,我們使用的 裝置名稱-*.conf
的組態檔的具體型別,根據實際分支的不同,我們可以選擇使用的名稱有:leagcy、edge、current、dev。這裡沒有好壞,根據自己的實際程式碼情況來即可。
第一次執行 complie.sh
會觸發安裝各種開發依賴,下載各種原始碼包,耗時會比較長,一般會在十來分鐘左右。
正式進行系統映象構建,根據硬體規格的不同,時間長度會有變化,以常見的 16核心的筆記或者伺服器來說,實際測試的構建時間都在五至十分鐘左右。
編譯過程火力全開的機器
命令完全執行完畢之後,在目錄中的 output/images
目錄中就能夠看到新鮮出爐的映象啦。
按照上面的方法,很輕鬆的就能夠得到不同程式碼基、不同 Linux 核心、不同 Armbian 版本的系統映象。
比如:
Armbian_21.11.0-trunk_Aml-s805_focal_current_5.9.0_minimal.img
Armbian_21.11.0-trunk_Aml-s805_focal_current_5.10.0_minimal.img
Armbian_21.08.0-trunk_Aml-s812_focal_current_5.9.0-rc7_minimal.img
Armbian_20.12_Aml-s812_focal_current_5.9.0-rc7_minimal.img
如果你的軟體對於系統核心有特別的需求,可以考慮使用 https://github.com/xdarklight/linux 這個倉庫中的核心對 Armbian 官方核心進行替換。不過因為系統依賴的緣故,可以直接升級到的最高版本是“meson-mx-integration-5.10-20201115”。
在系統映象構建完畢之後,我們就可以進行刷機這個步驟了。
給這臺機器換系統的難度非常低,如果採用我們熟悉的“五星評價”的方式來描述難度的話,我覺得難度只有一顆星,其中大半顆還都在拆卸上面。
以往不少貼文會建議大家購置 USB 轉 TTL 線,以及購買燒錄探針以及電烙鐵,但是隨著網友對於這臺裝置的開發,其實我們可以用更簡單的方式來為這臺裝置更換系統,而不需要購置這些裝備,以及進行焊接操作。
我的刷機模式採用了網友“尉遲申棠”的《無TTL線刷機》方案,整個操作流程大體分為四步,整個流程時間大概在十五分鐘~二十分鐘左右:
裝置拆機可以採用我下面這張圖片中的工具,把家用的剪指甲刀的受力臂拆下來,塞進玩客雲背部 SD 卡上方的貼片縫隙中,然後用螺絲刀或者其他的工具,把這個貼滿了雙面膠的背板撬下來,扭下6顆螺絲之後,接下來就可以使用短接金屬線來進行刷機了。
拆機方法和過程一覽
群裡的同學郵寄了一臺小裝置,順帶一起拆啦,正好湊齊新版和老版兩種主機板。
連帶群友的機器一起拆了
刷機需要使用短接的方式,來迫使玩客雲的主機板進入 USB 引導模式。短接的工具可以考慮找一根買電子產品時的綁線,然後把金屬線漏出來即可。(上圖中圖一的線被媳婦稱呼為“通往天堂的鑰匙”)
需要注意的是,新舊版本不太一樣,v1.3版的新主機板短接在前面,而老主機板的短接位置在背後。(順手安裝完畢了,忘記拍圖了,不過網路上圖很容易就能搜到,就不補啦)
刷機完畢,登陸系統後,順便看一眼 CPU 資訊。
root@aml:~# lscpu Architecture: armv7l Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1 Model: 1 Model name: ARMv7 Processor rev 1 (v7l) BogoMIPS: 2.00 Flags: half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 vfpd32
此外,如果你採用 MacOS 上的虛擬機器器進行刷機,很有可能會失敗,因為裝置在通過 USB 公對公傳輸線和 USB_Burning_Tool
刷機的過程中,可能會快速重啟切換模式,這時如果是使用虛擬機器器,會因為裝置握手重連虛擬機器器時間過長,導致刷機失敗。提示 “Romcode/狀態切換/裝置識別/命令結果返回錯誤”。
如果使用直接安裝的 Windows 系統進行 U-Boot 刷入,就不會出現這個問題了,這個裝置重連導致失敗的情況,至多出現一次。
USB Burning 過程
第一次是刷入引導,第二次是為了避免折騰 TTL 短接,利用網友構建的自動安裝映象,完成 eMMC (embedded MMC) 刷機,而這個系統的版本和核心都比較舊,所以第三次才是真實的刷機,刷入我們自己的系統。
如果你願意的話,也可以對比分析“eMMC刷機包”中的指令碼,在構建自己映象的時候做一些調整,減少一次刷機的過程。
玩客雲在引導時,USB 介面存在不能正確掛載 U 盤的情況,所以如果你製作的系統映象沒有被正確的載入,可以斷掉電源重新拔插一遍 U 盤再試試引導。
另外,因為裝置供電能力有限(本身低功耗),所以使用的 U 盤也儘量使用傳統 U 盤,而不要使用固態硬碟魔改的 U 盤,可能帶不動。
上文雖然已經提到了許多來自網友的智慧結晶,但其實在整個過程中,還參考和學習了其他的網友的經驗。
如果你希望更進一步,從 U-Boot 引導開始折騰,或者適配給其他的裝置,或許這些資料對你也會有用處,所以我將它們按照話題進行了分類,並列舉在了下面。
文章至此,玩客雲的 Armbian 折騰過程就結束了。後續的文章裡,我將展開我想折騰的腦洞,用這臺50元成本的裝置,做一些有趣的實驗:一臺能夠快速實現異地組網的裝置,讓你和你的基友快速聯網打遊戲;一臺能夠隨身攜帶的電子筆記伺服器;一臺完善獨立的密碼記錄本;一臺低功耗的監控探針。
到此這篇關於玩客雲折騰記錄之編譯 ArmBian 系統的文章就介紹到這了,更多相關玩客雲ArmBian 系統內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45