OpenWRT移植&适配小记

前言

虽然说我有想着自己来学习一下Openwrt,或者说Linux这边的移植

但是一直苦恼于找不到靠谱的资料,中文互联网上找不是找不到,而是找到的资料都很简略,大概只能算是讲一下思路而已

对于刚开始学移植的人来说,很难算是可行的参考

英文互联网上 的话,Google一下How to transplant dtb file on openwrt,搜出来的玩意也是大海捞针

至于GPT……?这么宽泛的问题你觉得他能行吗?

dts和dtb

也就是设备树描述符文件

Arm和mips这类,或者说risc指令集的设备,和x86相比,需要在镜像里提前写好dtb文件来告诉系统如何驱动外围设备

x86不需要在乎这点,因为有BIOS和ACPI的自动探测,所以只要一份镜像就能在绝大多数的x86兼容机上运行

dtb就是个坑爹的事情了,也正是因为它,让我们的手机和路由器之类的玩意不能通刷镜像,得找适配的包

dts是可以人工编写修改的原始文件,相当于源码的关系,dtb则是从dts编译出来的

但是没关系,dtb可以反编译回到dts(但是能不能用这说不准)

我的设备和分支镜像

这是我的设备

  • Orange Pi R1 Plus LTS
  • Rockchip RK3328
  • 四核 ARM Cortex-A53 64 位处理器,主频最高达1.5GHz
  • Mali-450MP2
  • 1GB LPDDR3(与 GPU 共享)

在当时,我的设备只被immortal wrt和xunlong openwrt分支所支持

甚至xunlong这个厂商的分支,还没适配新版的系统(编译过不了)

我想做的,是把istoreos给搬过去

这是当时的issue:https://github.com/istoreos/istoreos/issues/1190

为什么执着于dtb呢?也是因为这个分支的开发者表示理论上把dtb文件搬过去就行了,而且有个硬件很相似的r2s受到istoreos官方支持

dtb从哪来?

对于成品的arm设备来说,可能不太好办

但是对于开发板来说,还是相当容易的事情

首先我有适配的镜像(哪怕是旧版的系统),而且有不止一份,而且系统还能开机,且有root

那么就两个路子了

  • 开机直接从内存里拿dtb文件
  • 拆镜像解包

系统还能开机的话,可以去这里拿

ls /sys/firmware/devicetree/base

或者你也可以看看这个地方 /sys/firmware/fdt

但是板子在学校,那么就拆镜像吧

于是乎拿到了debian11和xunlong openwrt21.02的dtb文件

反编译的话,我们需要用到这个命令

dtc -I dtb -O dts -o out.dts openwrt.dtb

但是奇怪的是,他们的设备树文件的二进制大小居然还不一样,最终拿到的dts文件大小也不一样

不过在网上也看到,有些设备可能会选择直接硬编码参数到kernel上,然后就没有dtb了,幸好咱们没碰到这种鬼事情

转机

拿到dts之后,肯定就是思考怎么把dts塞回源码里make了

我的第一想法是看看xunlong那边的分支,在官方分支上改动了些什么东西

然后对着超过去

一口气开了俩codespace,然后本地还开了俩vscode

然后开始review commit

于是乎,我看到了个这东西

其实最开始也没抱有什么指望

直到看到最下面

卧槽,兄弟们,真过年啦

居然真给合并到主线去了

尝试

根据istoreos的文档,他们本质上大部分还是在插件上动的手脚,没有去魔改多少上游的东西

理论上上游适配之后,作为下游的他们,我想应该也是可以兼容的

果不其然,24.10的分支里我找到了我的设备

既然如此,那么跑个编译试试就知道了,把codespace的.config给搬过去,直接Action启动

现在是:听天由命 时间!

哦,它炸了

但搞笑的事情就来了

居然不是编译炸了,而是上传出错了

不过好在前面还有份Action的构建产物的流程,把build的产物打包后直接塞进去上传成功了

至此,咱们也算是拿到了一份理论上可用的镜像,虽然说和我扣出来的dtb没有半毛钱关系就是

过几天回去了倒是可以试试能不能用了,或者真的不行的话,接着immortal wrt也不是不能用

xunlong openwrt的槽点

xunlong openwrt可能是考虑到家用,预编译了一堆看起来很有用的插件,但是很多其实都年久失修

内置的ddns还强制依赖于第三方服务商,咱还不如自己起个ddns-go调用接口玩

尤其是递归DNS unbound这玩意,天天跟smartdns和adguard抢53端口

把它service自启动给关了,照样每次重启还会接着拉起来

唯一的好处大概就是内置了docker吧,openwrt装docker还算挺麻烦的事情

另外这东西的生命力也是真的顽强,不知道多少次ext4文件系统出错变成read-only file system了,这东西还能开机

隔壁immortal wrt早就启动不了了

为什么想要iStoreOS呢

其实看看他们的界面就知道了

原生的Luci不是不能用,但是对咱们国人来说,多少有些水土不服,或者说不太好用

这个界面就好使多了,一目了然,而且还默认是Argon主题

甚至还塞了俩定制主题

这个面向小白的界面,你说是成品硬路由我都信……

这还有个看起来很香的nas主题,不过nas还是专门整个nas吧(等有钱了先)

顺便它这玩意还有个看起来很方便的应用商店

但是也就这样了,都有docker了,我直接搓yaml跑compose不香吗?

可以说是个添头,但是无关紧要

顺便ddnsto和易有云,这俩我确实不太看得上,毕竟还得过别人的服务器

私有云过别人服务器,这个安全性永远是得打问号的,而且易有云看起来还强制需要注册登录他们的账户

算了算了,是黑群晖它不香了还是飞牛os他不香了?

最后,本文的图片没有用第三方图床,目前在观测dns污染和大陆cdn的阻断情况,请大家略微留意一下本文的图片加载速度如何

后记

2025.1.6更新:感谢 刻晴酱 指出文章的错误,已将AHCI更正为ACPI,以及修改BIOS为正确的拼写

微信公众号已同步修改,但仅限修改一次

点赞

赞助商广告

如果您的网络和设备条件允许,这里可能会显示来自Google和其他赞助商的广告

发表回复

电子邮件地址不会被公开。必填项已用 * 标注