使用 imagebuild 在 docker 中编译红米 AX6S 的 OpenWrt 固件
下载安装时所需的镜像,这里使用的是 ubuntu
。
1 | $ sudo docker pull ubuntu:22.04 |
接下来创建一个容器,并挂把当前目录下的 /imagebuilder
目录挂在到容器中。
1 | $ sudo docker run -d -it \ |
在容器中安装编译 openwrt
固件所需要的依赖。
1 | $ sudo docker exec openwrt_imagebuilder apt-get update && sudo docker exec openwrt_imagebuilder apt-get install -y build-essential libncurses5-dev zlib1g-dev gawk git gettext libssl-dev xsltproc wget unzip python3 curl rsync file |
在容器中下载红米AX6S的openwrt imagebuilder 文件。
1 | $ sudo docker exec openwrt_imagebuilder bash -c "curl https://downloads.openwrt.org/releases/22.03.3/targets/mediatek/mt7622/openwrt-imagebuilder-22.03.3-mediatek-mt7622.Linux-x86_64.tar.xz | tar Jxv -C /root/imagebuilder" |
进入到容器中。
1 | $ sudo docker exec -it openwrt_imagebuilder bash |
这时默认登录进入的目录为/root/imagebuilder
,接下来进入到刚才下载 imagebuilder
的目录中。
1 | $ cd ./openwrt-imagebuilder-22.03.3-mediatek-mt7622.Linux-x86_64 |
首先运行 make info
查看该 imagebuilder
都支持了哪些硬件。
1 | $ make info |
这时会看到这里有一个名为 xiaomi_redmi-router-ax6s
的可用配置,说明官方固件已经支持红米 AX6S。
接下来就开始进行编译固件。
1 | $ make image \ |
简单说明一下该命令参数的意思。
PROFILE
: 需要编译的配置,不填写的话它会编译默认的配置,比如这个imagebuilder
中默认的为bananapi_bpi-r64
(貌似就是make info
出来的第一个配置)。PACKAGES
: 编译时需要添加或删除的插件名字,用空格分割。在imagebuilder
中默认是不带后台管理的插件,因此加上luci
以及所需语言包。
等待编译结束后,在 ./bin/targets/mediatek/mt7622
目录中就可以看到已经编译好的openwrt的固件了。
openwrt-22.03.3-mediatek-mt7622-xiaomi_redmi-router-ax6s.manifest
记录该固件中编译了的插件以及版本openwrt-22.03.3-mediatek-mt7622-xiaomi_redmi-router-ax6s-squashfs-factory.bin
用于从头开始安装OpenWrt的bin文件openwrt-22.03.3-mediatek-mt7622-xiaomi_redmi-router-ax6s-squashfs-sysupgrade.bin
用于系统升级的bin文件
请自行解决网络问题。
Optional: 一些额外的小知识
使用
imagebuilder
编译 x86 的固件的时候,在生成固件时会出现以下消息。1
/root/imagebuilder/openwrt-imagebuilder-22.03.3-x86-64.Linux-x86_64/staging_dir/host/bin/grub-bios-setup: warning: Your BIOS Boot Partition is under 1 MiB, please increase its size..
解决方法是修改
imagebuilder
目录下的./target/linux/x86/image/Makefile
文件,在文件中的56行处的256
改成1024
后,再次编译即可。
也可用如下命令直接修改文件内容。1
sed -i 's/256/1024/g' ./target/linux/x86/image/Makefile
如果编译出来的固件只当作AC用,不需要AP的功能的话,可以把
wifi
相关的插件都给去掉后编译,相关的插件如下。1
2
3
4
5
6
7iw
iwinfo
libiwinfo-data
libiwinfo-lua
libiwinfo*
rpcd-mod-iwinfo
wireless-regdb去除插件的方法是在
PACKAGES
中插件名前添加-
字符标识删除该插件即可。1
PACKAGES="-iw -iwinfo"
编译 OpenWrt 需要在大小写敏感的文件系统中才能运行。
via form Image Builderでカスタムimage作成