Denis Yuriev

Записки бездельника

Главная » Linux » OpenWRT » D-Link DIR-320 » OpenWRT — борьба за размер для DIR-320 ч.4: загадочный Strip

OpenWRT — борьба за размер для DIR-320 ч.4: загадочный Strip

Ядро и библиотеки в процессе сборки OpenWRT по умолчанию собираются «как есть», то есть в них включаются все функции, которые могут нам понадобится, чтобы мы не установили.
Однако мы, как уже не раз говорилось, планируем «установить и забыть». Но, получается, что мы за собой теоретически тянем куски кода, который нам в принципе не понадобятся, так как ничего доустанавливать мы не планируем.
Вот на этот случай для экономии размера разработчики компиляторов придумали отличную процедуру исключения из готовых бинарных файлов функций и процедур, которые никем использоваться не будут. Процедура эта носит название Strip.
В OpenWRT это применимо для

  • ядра — исключаем экспортируемые процедуры из ядра, которые не используются выбранными нами модуля ядра
  • библиотек — исключаем экспортируемые процедуры из библиотек, которые не используются выбранными нами пакетами

Обратите внимание, очищается всё, что не попадает под зависимости в текущей конфигурации. То есть что-то доустановить, возможно, у Вас не получится.

Итак, подчищаем за собой:

make menuconfig

И включаем следующие пункты:

Global build settings  --->
    [*] Strip unnecessary exports from the kernel image
    [*] Strip unnecessary functions from libraries

И пересобираем:

make clean
make -j3

Сделай приятное автору - поделись статьей в социальной сети.

15 Комментариев

  1. slavon4ever

    Спасибо за статьи по сборке OpenWRT. Можете ли поделиться готовой свежей прошивкой для DIR320A2 с PPTP?

  2. slavon4ever

    Я проверю. Прошивка которую я собрал перегружает роутер периодически по непонятной причине.

  3. t00rm3n

    Здраствуйте Денис. Посмотрел Ваши статьи «борьба за размер» и решил написать.
    Недавно занимался портирование nmap и gdb на MIPS-архитектуру, столкнулся с проблемой ожирения статически слинкованных программ.
    Решил эту проблему с помощью утилиты UPX — эффективно сжимает бинарники ELF-формата и в частности mips/mipsel.
    Например статически слинкованный nmap после strip у меня получился около 3.7Mb. После UPX с —ultra-brute чуть больше 700Kb.
    Успешно сжимал им и busybox, и даже ядро OpenBSD. Также upx-ом можно сжимать библиотеки, но на MIPS-коде я работоспособность не проверял.
    Надеюсь, что данная иформация будет Вам полезна.

  4. Денис Юрьев

    Данные в флеше устройства уже сжаты. Думаю многие знают, что повторно сжимать данные — не лучшая идея.

  5. t00rm3n

    На мой взгляд, уменьшение размера исполняемых файлов ведёт к осводбождению места на файловой системе, что позволяет получить доп.функционал за те же байты, или даже за меньшие. Например — статически слинкованный gdb, его можно запускать на любой системе без перепрошивки устройства, в оригинале весит 22Mb(и на роутер он, естественно, не влезет) — после сжатия 1,7Mb — это вес именно исполняемого файла. Для динамически собранного кода разница будет не так заметна, но она будет — проверено.
    А насчёт повторно сжимать — сначала сжате, после компиляции, upx-ом, потом упаковка в squashfs. И в этой связке UPX будет эффективней.

  6. Денис Юрьев

    в те времена, когда я использовал UPX под Linux — получаемые бинарные файлы не умели себя распаковывать в память. в итоге получалось, что они распаковывали себя на диск.

    у меня сейчас устройство с 8мбайтами — экспериментировать лень. Ибо итак всё влезает

  7. Денис Юрьев

    вообще идея для jffs2 уместна весьма, почитал — с 5.2мб до 5.0мб таким образом данные на jffs2 разделе сжимали.
    однако squashfs думается мне куда меньших результатов продемонстрирует

  8. zor1984qq

    да я тоже так думаю, об этом написано в мануале, спасибо огромное за исчерпывающий фидбэк ;) я постараюсь завтра сделать все что нужно, просто сегодня бухло с батей наметилось и я переплевался с тем как он мешал мне выбирать опции ;) + я еще не сохранил половину, завтра буду разбираться что надо, а что не надо, но насчет jffs2 вы правы)…оно только для возможности записи в файловую систему, как написано в мануале. тем не менее спасибо за обновленные гайды, просто остальные все старые под 320ки. А он у меня завалялся с тех времен, когда еще 2740U купил, xDSL, под который в принципе саппорта так и не запилили.

  9. Собираю Chaos Calmer под D-Link DIR-300 B5. Понадобился wget для получения файлов с сервера. В итоге wget (181521 байт) + притянутые openssl (629122 байт) и libpcre (82665 байт) занимают 893308 байт. Прошивка умещается, но настройки не сохраняются из-за нехватки места. Чем бы заменить wget без openssl? Вроде есть легковесная альтернатива opensll. libpolarssl?

  10. Денис Юрьев

    Пакет WGET по умолчанию включен в BUSYBOX

    Если Вы точно уверены, что вам необходимо устанавливать его как отдельное приложение, то удалите его из BusyBox’а

  11. zor1984qq

    эхх комплилю заново…спасибо)

Оставьте комментарий

Войти с помощью: 
Denis Yuriev DMOZ Индекс цитирования

© 2017