LINUX.ORG.RU

Building Tiny Rust Binaries for Embedded Linux

 ,


3

4

Сабж.

TL;DR: растоман последовательно уменьшает размер собираемого бинарника на примере хеллоуворлда с ~6 Мб до ~200 кб, используя ряд тонких настроек Cargo и LLVM, а также прибегая к помощи Xargo и upx.

★★★★★

Последнее исправление: Virtuos86 (всего исправлений: 1)

Ответ на: комментарий от anonymous

strip и upx являются ELF специфичными инструментами, или раст генерирует какой то свой исполняемый формат ?

Ты (судя по тому, что тот анонимус тоже поставил ненужный пробел перед вопросительным знаком) выступил в роли КО, заявив, что бинарники стрипают и стдлиб обрезают уже давно. Я ответил, что пойнт был не в этом.

Virtuos86 ★★★★★
() автор топика
Ответ на: комментарий от Dark_SavanT

Расскажи это тем, кто утрамбовывает сраный последний мегабайт в раздел флеша.

Да, согласен. Но это особый сорт извращений.

intelfx ★★★★★
()
Ответ на: комментарий от max_lapshin

речь идет про ембеддед, софт идет целиком и один

Ок.

intelfx ★★★★★
()
Ответ на: комментарий от anonymous

Я так не играю, ты сразу с козырей зашёл.

Virtuos86 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Чтобы уменьшить потребление пропускной способности сети их сделали, ололош.

Да, и это тоже. Вернее да первое это пропускная способность сети а второе датаценты тоже не бесплано строятся.

sniper21 ★★★★★
()
Ответ на: комментарий от max_lapshin

Ты же не хочешь сказать, что ты всерьез говоришь об обновлении одной библиотеки на, скажем, IP камере?

что принципиально мешает

Harald ★★★★★
()
Ответ на: комментарий от Harald

Еще один. Если рантайм Раста помещается в флэш-память девайса (подразумевается, что еще остается место), то это хороший повод выбрать Раст. Это то, что написал я.

Вы с анонимусом думаете, что я рекомендую выбросить на помойку весь эмбеддед, в который Раст не влезает. Где вы это прочитали, я не знаю.

Virtuos86 ★★★★★
() автор топика
Ответ на: комментарий от Virtuos86

зачем помещать в флеш-память девайса рантайм раста, если вместо этого туда можно поместить что-то полезное

Harald ★★★★★
()
Ответ на: комментарий от Virtuos86

если бы он был полезным, то его бы уже давно пихали бы во флеш-память девайсов :)

Harald ★★★★★
()
Ответ на: комментарий от Virtuos86

рантайм раста, как и рантайм си, и любой другой рантайм, очень полезный

чем полезен для С рантайм раста ? он вообще бесполезен.

anonymous
()
Ответ на: комментарий от Harald

ты всерьез говоришь об обновлении одной библиотеки на, скажем, IP камере?

что принципиально мешает

Говорить? Ты же говоришь - значит, ничто не мешает.

tailgunner ★★★★★
()
Ответ на: комментарий от vromanov

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

Dark_SavanT ★★★★★
()
Ответ на: комментарий от intelfx

В рач линуксе, например, для всего кода на хаскелле насильно сделали динамическую линковку. И теперь после каждого апдейтп что-нибудь да ломается, ведь в рач линуксе зависимости от динамических библиотек никто не отслеживает.

Кстати, пару раз с либреофисом такая же лажа была.

hateyoufeel ★★★★★
()
Ответ на: комментарий от tailgunner

upx - это читинг. Хотя, возможно, для bare metal и полезно.

У меня на bare metal этот upx нормально никогда не работал и все сжатые им исполнительные файлы не запускались. Кроме того, upx не работал и на старых железках под Linux 2.4.* и Linux 2.6.*, с примерно похожими симптомами.

Архитектуры ARMv5TE, ARMv6, MIPS32

EXL ★★★★★
()
Ответ на: комментарий от RazrFalcon

Нет, насколько мне известно. Да и какой rebuild, если там бинарные пакеты?

hateyoufeel ★★★★★
()
Ответ на: комментарий от max_lapshin

на диске 8 мегабайт
в памяти 64 мегабайта

В чем причина такой экономии? Сейчас же это все стоит жалкие копейки. Почему нельзя сделать 128/128 увеличив цену на пару баксов?

Im_not_a_robot ★★★★★
()
Ответ на: комментарий от Im_not_a_robot

Обычно просто дают целевую платформу, и на ней всё должно работать. Почему платформа именно такая - не объясняют.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от Im_not_a_robot

Сейчас же это все стоит жалкие копейки. Почему нельзя сделать 128/128 увеличив цену на пару баксов?

особенности массового производства - прежде чем поставить на конвеер надо скомплектовать, например 100 тыс изделий - для них сначала закупают комплектующие, добавил ты 1 бакс и тебе уже надо вложить в производство на 100 тыс долларов больше, потом оптовые цены могут непропорционально изменяться - память небольшого размера можно найти по бросовым ценам на стоках. Для местных IP-камерщиков все еще сложнее - они просто покупают готовое и чтобы что-то поменять для них цены вырастут в разы, самим перепаивать - надо вскрыать каждое изделие.

anonymous
()
Ответ на: комментарий от Im_not_a_robot

У меня на одной из целевых машинок 512 флеша и 32 кб озу. И это еще и PowerPC

vromanov ★★
()
Ответ на: комментарий от Virtuos86

Это не должно попадать в бинарник по умолчанию.

vromanov ★★
()
Ответ на: комментарий от Im_not_a_robot

есть готовые камеры по 20$, надо брать их, что бы на ровном месте не превратиться в 200$

а камеры так делают, потому что оно влезает и всех устраивает

max_lapshin ★★★★★
()
Ответ на: комментарий от max_lapshin

так влезает или не влезает ? вы определитесь с показаниями

anonymous
()
9 сентября 2018 г.
Ответ на: комментарий от anonymous

Если бы ты просто написал: «я дурак», — то значительно сэкономил бы во времени и в усилиях при одинаковом итоговом результате, которого добился.

Virtuos86 ★★★★★
() автор топика

Хм не знаю что такое карго, но upx это читерство и полный зашквар. Такой способ имеет только недостатки.

anonymous
()

Мда. Что ж это за говённый язык такой, которому надо минимум 6Мб какого-то шлака, просто ради того, чтобы одним сисколлом строку в stdout выплюнуть? Боюсь представить объёмы для чего-то мало-мальски полезного. Тут даже жаба с электроном уже не выглядят полным идиотизмом.

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

Если это статически слинкованный бинарник, то у плюсов примерно то же самое получается, и тоже чтобы 1 строку в stdout выплюнуть, так что претензия несколько некорректная получается. А вот upx это дно пробито.

anonymous
()
Ответ на: комментарий от anonymous

Пытался когда-то давно собрать musl статически с lto, чтобы собирать маленькие статические бинарники без зависимостей. Но что-то с наскока не пошло, забросил. Были проблемы с неправильным указанием видимости функции-стартера в musl, из-за чего она выкидывалась при lto. Думаю и с другими именами были бы проблемы. Дальше не стал копать. Лень двигатель прогресса.

anonymous
()
Ответ на: комментарий от intelfx

Да если бы. В текущей ситуации с nixos как раз все так, как он сказал, и у меня, например, с этого пригорает.

t184256 ★★★★★
()
Ответ на: комментарий от Virtuos86

Так у тебя есть какой-то опыт или нет?

Вполне вероятно, что будет девайс схожей направленности, но только low cost, куда раст не втиснуть.
При использовании сишки оба девайса может поддерживать одна команда и шарить код между проектами.
При использовании раста имеем две отдельных кодовых базы, если не две команды.
Ну и кому нужен этот геморрой?

cherry_boy
()
Ответ на: комментарий от cherry_boy

Так у тебя есть какой-то опыт или нет?

Нет.

Вполне вероятно, что будет девайс схожей направленности, но только low cost, куда раст не втиснуть.

На этом можно муки выбора закончить, нет?

Вообще в Rust-сообществе сформирована отдельная рабочая группа, которая работает над внедрением Rust в embedded, но каковы их успехи и есть ли они в принципе, я не отслеживаю.

Virtuos86 ★★★★★
() автор топика
Ответ на: комментарий от Virtuos86

это как сделали microPython с компилятором для embedded?

sqq
()
Ответ на: комментарий от Virtuos86

На этом можно муки выбора закончить, нет?

Да.
Суть, однако, в том, что есть еще ряд причин не использовать раст, как, впрочем, и любой другой «крутой» язык - хаскель, ним etc, и такой выбор зачастую даже не встает.

Ты же взрослый человек, должен понимать, что принцип «почему бы и нет» здесь не работает.

cherry_boy
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.