前言
虽然说我有想着自己来学习一下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为正确的拼写
微信公众号已同步修改,但仅限修改一次