User Tools

Site Tools


zh:docs:guide-user:additional-software:saving_space

FIXME This page is not fully translated, yet. Please help completing the translation.
(remove this paragraph once the translation is finished)

节省固件空间占用

去除以下packages

自己编译镜像以减少空间占用(e.g. with the imagebuilder),移除不使用的packages. In order to completely remove IPv6 support and related packages you also need to ask the imagebuilder to do so by also passing this option to the make command: “CONFIG_IPV6=n”.

Action Packages
remove pppoe -ppp -ppp-mod-pppoe
remove IPv6 -ip6tables -odhcp6c -kmod-ipv6 -kmod-ip6tables -odhcpd-ipv6only
remove dhcp server -odhcpd
remove iptables -iptables
remove opkg -opkg
add LuCI minimal uhttpd uhttpd-mod-ubus libiwinfo-lua luci-base luci-app-firewall luci-mod-admin-full luci-theme-bootstrap
add zram¹ zram-swap

¹ Note: Do not use zram-swap for 4MB flash devices as it increases the amount of firmware space used. It is listed here as it is helpful on machines with very little RAM memory.

为4MB flash的设备编译镜像

Example image builder command line
Note: In the command line shown below, you need to adjust PROFILE=tl-wr941nd-v6 to your device. Use make info to list possibilities.

LuCI Action Imagebuilder commandline
with LuCI - remove pppoe and IPv6
+ include only needed luci components, not full luci package.
make image PROFILE=tl-wr941nd-v6 \ PACKAGES=“uhttpd uhttpd-mod-ubus libiwinfo-lua luci-base luci-app-firewall luci-mod-admin-full luci-theme-bootstrap \ -ppp -ppp-mod-pppoe -ip6tables -odhcp6c -kmod-ipv6 -kmod-ip6tables -odhcpd-ipv6only”
without LuCI - remove pppoe and IPv6 make image PROFILE=tl-wr941nd-v6 PACKAGES=“-ppp -ppp-mod-pppoe -ip6tables -odhcp6c -kmod-ipv6 -kmod-ip6tables -odhcpd-ipv6only”

Resources:

为16/32MB RAM的设备编译镜像

If the device has 16MB or less of RAM, then it should only be used as Internal AP (e.g. to extend Wi-Fi coverage).

Example image builder command line
Note: In the command line shown below, you need to adjust PROFILE=tl-wr941nd-v6 to your device. Use make info to list possibilities.

RAM Action Imagebuilder commandline
16MB - remove pppoe and IPv6
- remove all related elements to iptables
- remove dhcp servers
+ add LUCI
+ add zram-swap
- remove opkg - not needed after making these adjustments
make image PROFILE=tl-wr941nd-v6 \ PACKAGES=“uhttpd uhttpd-mod-ubus libiwinfo-lua luci-base luci-app-firewall luci-mod-admin-full luci-theme-bootstrap zram-swap \ -ppp -ppp-mod-pppoe -iptables -ip6tables -odhcp6c -kmod-ipv6 -kmod-ip6tables -odhcpd-ipv6only -odhcpd -opkg”
32MB - remove pppoe and IPv6
+ add LUCI
+ add zram-swap
- remove opkg - not needed after making these adjustments
make image PROFILE=tl-wr941nd-v6 \ PACKAGES=“uhttpd uhttpd-mod-ubus libiwinfo-lua luci-base luci-app-firewall luci-mod-admin-full luci-theme-bootstrap zram-swap \ -ppp -ppp-mod-pppoe -ip6tables -odhcp6c -kmod-ipv6 -kmod-ip6tables -odhcpd-ipv6only -opkg”

Resources:

Making all kernel modules built-in

This option compiles the kernel modules inside the kernel, you can either pick what modules you think can be integrated and make them built-in by pressing “y” on them when in the menuconfig, or do a quick-and-dirty change of the kernel config with (adjust the path in this example to point to your target's actual kernel config)

sed -i 's/=m/=y/g;' build_dir/target-mipsel_24kc_musl/linux-ramips_mt7620/linux-4.14.63/.config

This will work only if your device's kernel partition is big enough to accomodate the slightly larger kernel, or if the device is using dynamic partitions.

This was reported by Daniel Santos in an email in the OpenWrt Devel mailing list, 30 Oct 2018 (currently the mailing list archive server is unavailable so I cannot link directly to the mail in the archive).

His comments:

I did a quick experiment of this and instead of saving 4k, my *image* is a full 256k smaller. I haven't analysed the specifics, but also this means less RAM consumed because squashfs uses the page cache for uncompressed files. Further, modules inherently have greater overhead, even after __init sections have been discarded. The only downside is that built-ins cannot be unloaded and will always occupy a portion of RAM. But having them built into the kernel is far more efficient.

(The “surprising” change in image size may be due to the block size of the squashfs image. See, for example include/image-commands.mk and include/image.mk in November, 2018 sources)

In a follow up mail by Phillip Prindeville pointed out the main drawback of this method.

Some hardware (it’s rare but not unheard of) can only be reset by unloading and reloading the module that controls it. Otherwise, you have to reboot the box. If you build all of your drivers in, then rebooting is all you have.

修改编译配置变量

You can also save space by changing configuration variables using make menuconfig. In addition to the ones mentioned here you can save a tiny bit of space by disabling commands in busybox.

Options that can be disabled to save space.

Config variable Menu path Estimated savings
CONFIG_KERNEL_PRINTK Global build settings / Kernel build options / Enable support for printk
CONFIG_KERNEL_CRASHLOG Global build settings / Kernel build options / Crash logging
CONFIG_KERNEL_SWAP Global build settings / Kernel build options / Support for paging of anonymous memory (swap)
CONFIG_KERNEL_KALLSYMS Global build settings / Kernel build options / Compile the kernel with symbol table information
CONFIG_KERNEL_DEBUG_INFO Global build settings / Kernel build options / Compile the kernel with debug information
CONFIG_KERNEL_ELF_CORE Global build settings / Kernel build options / Enable process core dump support
IPV6 Global build settings / Enable IPv6 support in packages
CONFIG_KERNEL_MAGIC_SYSRQ Global build settings / Kernel build options / Compile the kernel with SysRq support
CONFIG_KERNEL_PRINTK_TIME Global build settings / Kernel build options / Enable printk timestamps
PACKAGE_MAC80211_DEBUGFS Kernel modules / Wireless Drivers / kmod-mac80211 / Export mac80211 internals in DebugFS 21 KB
PACKAGE_MAC80211_MESH Kernel modules / Wireless Drivers / kmod-mac80211 / Enable 802.11s mesh support 29 KB

Options that can be enabled to save space.

Config variable Menu path
CONFIG_STRIP_KERNEL_EXPORTS Global build settings / Strip unnecessary exports from the kernel image
CONFIG_USE_MKLIBS Global build settings / Strip unnecessary functions from libraries

make kernel_menuconfig options that can save space.

Config variable Menu path Comments
CONFIG_SERIAL_8250 Device Drivers / Character devices / Serial drivers / 8250/16550 and compatible serial support This will also save RAM by preventing /sbin/askfirst from running
CONFIG_EARLY_PRINTK Kernel hacking / Early printk

To build a kernel that only works with a specific device, run make kernel_menuconfig CONFIG_TARGET=subtarget to edit target/linux/<platform>/*/config-default and go to Machine selection / <Platform> machine selection and disable all devices except for the specific device. This can save some disk space and RAM.

Increase block size from the default 256 KB to improve compression. Warning: By default 3 blocks will be cached so this will also make the router use more RAM (if 3 blocks are cached, and a block size of 1024 KB is used, this will use 2,304 KB more RAM (3 * 1024 KB - 3 * 256 KB)). It may also make the router use more CPU to decompress the larger blocks.

Config variable Menu path
TARGET_SQUASHFS_BLOCK_SIZE Target Images / squashfs / Block size

Options that can be enabled to save RAM.

Config variable Menu path
PACKAGE_zram-swap Base system
PROCD_ZRAM_TMPFS Base system / procd Configuration

Reduce the number of cached blocks by running make kernel_menuconfig.

Config variable Menu path
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE File systems / Miscellaneous filesystems / Additional option for memory-constrained systems / Number of fragments cached

将LuCI的图标替换成空icon

LuCI的图标并非一定需要,换成空图标之后,可以节省大概15KB. This bash script will take an OpenWrt git path as parameter and replace the images with a blank using the files path:

Click to display ⇲

Click to hide ⇱

#!/bin/sh
if [ -z "$1" ]; then echo Need git path as parameter; exit 1; fi
cd "$1" || exit 1
gitpath=`pwd`
echo Installing to $gitpath
mkdir -p files/www/luci-static/resources/icons/
mkdir -p files/www/luci-static/resources/cbi/
wget -O files/www/luci-static/resources/cbi/blank.gif 'https://raw.githubusercontent.com/mathiasbynens/small/master/gif-transparent.gif'
wget -O files/www/luci-static/resources/cbi/blank.png 'https://raw.githubusercontent.com/mathiasbynens/small/master/png-transparent.png'
cd feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi
for a in *.gif; do ln -s blank.gif "$gitpath"/files/www/luci-static/resources/cbi/$a; done
cd ../icons
for a in *.gif; do ln -s ../cbi/blank.gif "$gitpath"/files/www/luci-static/resources/icons/$a; done
for a in *.png; do ln -s ../cbi/blank.png "$gitpath"/files/www/luci-static/resources/icons/$a; done
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
zh/docs/guide-user/additional-software/saving_space.txt · Last modified: 2019/03/16 21:28 by hgao