本帖最后由 dingnan21 于 2021-10-10 13:47 编辑
对于Flash仅有8M的路由器来说,openwrt固件安装很勉强,在使用原版LuCI和easymesh的前提下,必须要去除IPv6和一系列非必要内核精简。具体精简内容,可参考Openwrt官方文档《Saving firmware space and RAM》本文是基于Openwrt官方文档《Saving firmware space and RAM》的实际上手实践。
最近淘了一台水星的D26G pro,由于只有8MB spi FLASH闪存,因此如何编译一个精简可用的固件就成了难题。
在默认情况下,我首次编译出的固件大小如下:
openwrt-ramips-mt7621-mercury_d26g-initramfs-kernel.bin 7859595B = 7675.4KB openwrt-ramips-mt7621-mercury_d26g-squashfs-sysupgrade.bin 8127260B = 7936.8KB
刨去uboot、env、factory等MTD布局需要占用的空间,在首次刷入openwrt时,仅有initramfs-kernel.bin可以成功刷入并进入系统。但由于存储空间不足,导致配置信息无法保存,重启即丢失。 而squashfs-sysupgrade.bin刷入后,系统由于firmware超出flash闪存边界,会陷入无限重启。
也就是说,默认编译精简固件至8MB Flash是肯定会失败的。这也是为什么网上绝大多数贴子建议更换16MB Flash的原因。
注意:我仅仅是把D26G pro作为AP使用,通过阉割PPPOE,ddns、IPV6、upnp等主路由必备的功能,因此可以编译出可以适配用于8MB Flash的固件,如果需要将D26G pro用于国际留学等场景,必须要扩容至16MB,否则软件包肯定装不下。
经过反复试验,在v1.3.5版本通过以下编译参数修改,编译出可用于8MB Flash的固件: 总计精简759.2KB的initramfs空间,及768KB的squashfs-sysupgrade.bin空间
openwrt-ramips-mt7621-mercury_d26g-initramfs-kernel.bin 7081101B = 6916.2KB openwrt-ramips-mt7621-mercury_d26g-squashfs-sysupgrade.bin 7340828B = 7168.8KB
- with Kernel build options 通过关闭部分内核参数,内核精简195.9KB
- CONFIG_KERNEL_CRASHLOG=n
- CONFIG_KERNEL_SWAP=n
- CONFIG_KERNEL_DEBUG_INFO=n
- CONFIG_KERNEL_MAGIC_SYSRQ=n
- CONFIG_KERNEL_PRINTK_TIME=y 关闭仅能节省0.2KB,不建议关闭
- CONFIG_STRIP_KERNEL_EXPORTS=y
- CONFIG_USE_MKLIBS=y
- CONFIG_KERNEL_ELF_CORE=n
- -nano [ Utilities-> Editors ] 精简45KB
- -ppp/-pppoe/-kmod-pppoe [ Network ] 精简144KB
- -ddns-scripts/-ddns-scripts_aliyun/ddns-scripts_dnspod [ Network-> IP Address and Names ] 精简17.4KB
- +autoreboot
- +easymesh
- +filetransfer 添加会增加1802B
- +firewall
- +nlbwmon
- +turboacc 删除Shortcut=FE和BBR CCA中任何一个,反而会增大bin文件体积
- -wget-ssl 精简146.6KB
- -openssl-util 精简187.4KB
经过实际刷机测试,在刷入v1.3.5版本,并进行相关配置后,flash剩余空间如下:
仅剩的空间,仅用于日常配置文件缓存,装额外的软件包基本是不可能了。
最后分享一下自己编译的D26G pro openwrt固件包,v1.3.5
拒绝百度网盘:http://gofile.me/5FstA/9YS4WJ6Ji
|