Table of Contents

Зменшення розміру прошивки та використання оперативної памʼяті

Виключення пакетів

У пристроях з лише 4 МБ флеш-памʼяті важливо економити кожен кілобайт. Ви можете зекономити місце, компілюючи власний імідж прошивки (наприклад, через Image Builder), виключивши непотрібні пакети.

Щоб повністю видалити підтримку IPv6, необхідно передати параметр CONFIG_IPV6=n під час виклику `make`.

Дія Пакети Шлях у меню
видалити PPPoE -ppp -ppp-mod-pppoe Network
видалити IPv6 -ip6tables -odhcp6c -kmod-ipv6 -kmod-ip6tables -odhcpd-ipv6only Global build settings / Enable IPv6 support in packages
видалити DHCP сервер -odhcpd Network
видалити iptables -iptables Network / Firewall
видалити opkg -opkg Base system
додати мінімальний LuCI uhttpd uhttpd-mod-ubus Network / Web Servers/Proxies
libiwinfo-lua Languages / Lua
luci-base luci-app-firewall luci-mod-admin-full luci-theme-bootstrap LuCI
додати zram zram-swap Base system

:!: Не використовуйте zram-swap на пристроях з 4 МБ флеш-памʼяті, оскільки він збільшує розмір прошивки. Він наведений тут, оскільки корисний лише на пристроях з дуже малою RAM.

:?: Префікс -PACKAGE_NAME означає видалення пакета. Без префікса — додавання.

Побудова образу для пристроїв з 4MB флеш

Приклад команди Image Builder

:!: Змініть PROFILE=tl-wr941nd-v6 на свій пристрій. Використовуйте make info для отримання списку доступних профілів.

LuCI Дія Команда
with LuCI - видалити PPPoE і IPv6
+ додати лише необхідні компоненти luci.
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”
без LuCI - видалити PPPoE і IPv6 make image PROFILE=tl-wr941nd-v6 \ PACKAGES=“-ppp -ppp-mod-pppoe -ip6tables -odhcp6c \ -kmod-ipv6 -kmod-ip6tables -odhcpd-ipv6only”

Ресурси:

Побудова образу для пристроїв з 16/32MB RAM

Пристрої з 16MB RAM рекомендується використовувати лише як точки доступу (AP).

RAM Дія Команда
16MB - видалити pppoe та IPv6
- видалити всі елементи iptables
- видалити dhcp сервери
+ додати LUCI
+ додати zram-swap
- видалити opkg - не потрібен при виконанні цих дій
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 - видалити pppoe та IPv6
+ додати LUCI
+ додати zram-swap
- видалити opkg - не потрібен при виконанні цих дій
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”

Ресурси:

Включення модулів в ядро

Цей метод компілює модулі ядра всередину ядра. Можна вручну позначити потрібні модулі як y у `make kernel_menuconfig`, або зробити масову заміну:

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

Це працює лише якщо розділ ядра досить великий або пристрій підтримує динамічні розділи.

:!: Не можна вивантажити модулі, вбудовані у ядро. Але така інтеграція — ефективніша.

Заміна конфігураційних змінних

Можна зекономити простір, міняюючи змінні через make menuconfig.

Економія простору

Змінна конфігурації Шлях меню Коментарі
CONFIG_KERNEL_PRINTK=n Kernel build options Вимкнути printk
CONFIG_KERNEL_CRASHLOG=n Kernel build options Вимкнути crashlog
CONFIG_KERNEL_SWAP=n Kernel build options Вимкнути swap
CONFIG_KERNEL_KALLSYMS=n Kernel build options Вимкнути таблицю символів
CONFIG_KERNEL_DEBUG_INFO=n Kernel build options Вимкнути дебаг-інформацію
CONFIG_KERNEL_ELF_CORE=n Kernel build options Вимкнути core dump
CONFIG_IPV6=n Enable IPv6 support in packages Вимкнути IPv6 повністю
CONFIG_KERNEL_MAGIC_SYSRQ=n Kernel build options Вимкнути SysRq
CONFIG_KERNEL_PRINTK_TIME=n Kernel build options Вимкнути timestamps
CONFIG_PACKAGE_MAC80211_DEBUGFS=n Wireless Drivers / kmod-mac80211 -21 КБ
CONFIG_PACKAGE_MAC80211_MESH=n Wireless Drivers / kmod-mac80211 -29 КБ
CONFIG_STRIP_KERNEL_EXPORTS=y Strip kernel exports Видалити непотрібне
CONFIG_USE_MKLIBS=y Strip libraries Видалити непотрібні функції
CONFIG_SERIAL_8250=n Serial drivers Зекономить RAM, але зламає sysupgrade
CONFIG_EARLY_PRINTK=n Kernel hacking Доступно лише через kernel_menuconfig
KERNEL_SQUASHFS_FRAGMENT_CACHE_SIZE Kernel build options Менше кешу — менше RAM
TARGET_SQUASHFS_BLOCK_SIZE squashfs Збільшити block size для кращого стиснення

:!: Block size має бути степенем двійки (від 4КБ до 1МБ). Більший блок = більше RAM на кеш, більше CPU для розпакування.

:!: Щоб зібрати ядро тільки для одного пристрою, виконайте:

make kernel_menuconfig CONFIG_TARGET=subtarget

і вимкніть усі інші моделі.

Економія RAM

Змінна Шлях
CONFIG_PACKAGE_zram-swap=y Base system
CONFIG_PROCD_ZRAM_TMPFS=y procd Configuration
CONFIG_KERNEL_SWAP=y Kernel build options

Заміна іконок LuCI порожнім пікселем

Іконки в LuCI не критичні. Їх можна замінити на 1-піксельні прозорі — це зекономить ~15 КБ.

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

Зовнішні посилання