您现在的位置是:网站首页> 编程资料编程资料
玩客云折腾记录之编译 ArmBian 系统_其它综合_
2023-05-27
259人已围观
简介 玩客云折腾记录之编译 ArmBian 系统_其它综合_
写在前面
最近有几个有趣的小想法想实践一下,希望使用低功耗、低成本的硬件跑一些持续性的独立的服务。最初的想法是入手一个树莓派得了,开发板尺寸小巧,资源丰富。然而搜索价格的时候发现最新版的树莓派,如果搭配上一些常用配件,加一个定制外壳,算下来成本几乎能和我之前的 NUC 裸机价格一较高下。
那么,有没有性价比更高的方案呢?
为什么选择搭载 Amlogic S805 的玩客云
于是,目光就锁定到了同为 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 官方代码
Armbian 主要开源项目状况
2014年末,Armbian 立项,或许是暴风雨来临之前的沉寂,在 GAP一年多之后的2016年,Armbian 开始了每年千万行代码变动的爆发式成长。截止目前为止,官方项目已经支持了接近 150 个不同的硬件设备的适配。
来自战斗民族的 Armbian TV 分支
https://github.com/150balbes/build
在2018年7月的时候,一名网名是150balbes的战斗民族网友出手了,他开始为各种官方原本并不支持的硬件做适配,过程中吸引了来自全世界有相同硬件折腾需求的网友,他第一个适配的 SoC 就是我们本文的主角同源的 s90x 系列的芯片。
在2020年的光棍节前,他或许是觉得直接在官方原有的代码文件上进行修改,每次上游代码(Armbian)更新,他需要合并的内容太多了,毕竟Armbian是一个每年千万行代码变更的项目,于是他删除了原本开发了几个月的代码,在官方原有开发模式上新增了一个只有他自己使用的发布类型(dev),将之前的代码迁移了过来。随后他开始了专注于将 Armbian 适配到电视盒子上,并且将自己的分支命名为 armbian-tv
,持续更新到了现在。
来自阿拉伯网友 moham96 的分支
https://github.com/moham96/Build-Armbian
阿拉伯网友 moham96 很快关注到了俄罗斯小伙子的项目,并立马 fork 了一份,升级了项目使用的 Linux 内核到 4.x 版本,并针对设备 Mac 地址设置方式进行了调整。
来自国内网友 leo357449107 的分支
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 带来了下面的内容:
- 添加了快速将系统刷入 eMMC 的功能,添加了一些方便使用的软件源切换脚本。
- 验证了设备两个 USB 端口其实都是正常可用的,调整和关闭都可以根据修改启动分区的 dtb (Device tree)来实现。
- 使用了
meson8b-odroidc1t_noHDMI.dtb
替换了meson8b-odroidc1t.dtb
,让硬件作为服务器用途使用的时候,可以更加省电。 - 支持关闭默认的 USB 网卡支持,可以节约一些编译时间。
来自国内网友 witallwang 的分支
https://github.com/witallwang/Build-Armbian
今年4月9日,有一位网友在 leo 的基础上继续进行了一些实用的调整。
- 将内核版本升级到了
linux-5.10.y
- 更新了构建补丁,调整了启动硬件使用的 dtb 文件。
可惜的是,因为上游的中断,这个系统的版本也被停留在了Armbian 的老版本 (Armbian 20.12 Buster, Linux 5.10.28)。
品尝最新版本的 Armbian
如果我们将上面的几份代码进行合并,是不是就可以让玩客云的硬件继续使新版本的 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 的老版本代码对于缺少一个开发依赖,这个问题作者在新版代码中修正了,因为上文提到的历史原因,这个问题被“继承”了下来。不过因为这个问题的触发场景是无线网卡开启热点,所以本身不具备无线能力的玩客云,其实可以忽略掉。当然,如果你需要使用无线网卡,那么可以对此进行一个简单的依赖修复:
提示: 本文由神整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
点击排行
本栏推荐
