У пристроях з лише 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 означає видалення пакета. Без префікса — додавання.
Приклад команди 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” |
Ресурси:
Пристрої з 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
і вимкніть усі інші моделі.
| Змінна | Шлях |
|---|---|
CONFIG_PACKAGE_zram-swap=y | Base system |
CONFIG_PROCD_ZRAM_TMPFS=y | procd Configuration |
CONFIG_KERNEL_SWAP=y | Kernel build options |
Іконки в LuCI не критичні. Їх можна замінити на 1-піксельні прозорі — це зекономить ~15 КБ.