The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Redbean 2.0 - платформа для web-приложений, упакованных в универсальный исполняемый ZIP-архив"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Доступны два режима работы форума: "Раскрыть нити" и "Свернуть нити".
. "Redbean 2.0 - платформа для web-приложений, упакованных в ун..." +/
Сообщение от Аноним (-), 28-Июн-22, 15:53 
> Ну вот там есть некоторые противоречия, отчего я и предположил, что на
> деле может оказаться больше одного человека.

Вот и я не понимаю как они настолько разные. Хотя может им там просто вебмакачить надоело и они познали что есть менее мерзотные и более приятные занятия вокруг цифровых систем?

Так бывает. Yan Colett который LZ4 сделал так то изанчально учился на маркетолога. И был бы унылой офисной планктохой впаривающей лохам булшит. Но его угораздило подсесть на интимные особенности цифровых систем, алгоритмы, сжатие, детали архитетур, все такое. Он послал всех в сад и резко сменил курс, став мировой известностью на первом же всерьез сделаном алгоритме с серьезным применением тех знаний. И вот он уже известный всему миру специалист по сжатию.

Не то чтобы LZ4 хорошо жал, но скорость его декомпрессии может заспорить с memcpy() а иногда и сделать его, что странно, но при сжатии read bandwidth меньше -> больше шинам на write. Что интересно, он даже не сишечке в память упирается - переписывать на асме смысла ноль.

...ну а когда кто-то выкатыает анпакер оного на 103 байта, полстранички, это как-то так: можно замарать дофига бумаги CV с булшитом рассказывающим как вы круты, обложиться дипломами, сертификатами, что там еще. А можно вывалить 103 байта в полстранички. Они скажут тем кто в теме больше.

> Ну да. Потому что мне это было не надо.

А у меня была мечта. Я хотел научиться писать фирмвари микроконтроллеров. Не хуже тех кого я считал крутыми. А еще я не уважал подходы вебмакак с черными ящиками. Люблю понимать как и что работает и почему я это делаю так. А шаманские ритуалы с камланиями без понимания происходящего - терпеть не могу. Однажды наступил день когда я поднял cortex M моим кодом с ноля. С своим линкерскриптом. Заодно и стартап сделал, прям на си, посмотреть может ли си поднять сам себя за уши. Оказалось что там - может. Ну а потом скилл доразвился и я смог в лэйауты отличные от типичных. Это дало мне кой-каких бонусов. Если у тойоты при стэковерфлоу фирмвари убивали водил, я учел их ошибки и у меня это немедленно ловится да еще при помощи железа, хоть оно и не для этого.

> детали, если на практике не использовать.

А я это все практикую. Для компила типового ELF в линуксе это конечно не надо. Но кто сказал что я этим ограничиваюсь?

> Это не единственный вариант. Допустим, есть некий транслятор в набор команд Кортекса,
> но на выходе даёт PE.exe, который для фирмвари не подходит.

Я изначально ELF получаю, он для фирмвари кортекса не подходит. Нету в чипе лоадера способного прожевать довольно продвинутый формат и все его опции. К тому же там много мусора который для работы кода на самом деле не требуется. Когда у меня 16 кил флехи на все, включая какой-нибудь продвинутый алгоритм, меня это почему-то парит. Да, 32-бит система где 16 кил памяти это забавно, но флеш и рам площадь кристала жрет и влияет на выход чипов с вафли и их цену.

Но есть такая чудная штука как objcopy. Я не помню как гнутый тулчейн для PE EXE работает в деталях, сто лет PE EXE не билдил, но вероятно что номер и с ним пройдет. А линкерскрипт... ну... он описывает фактическое размещение секций. И можно выбирать как именно лэйаут по факту будет. Но ELF должен все же содержать правильные секции с правильной структурой. Линкер может сам по себе provide'ить некоторые переменные на основе параметров секций и т.п. и поэтому например стартап может знать например начало и конец (rw) data и куда надо копировать из флеша в раму и все такое. Да, только стандартным си сделать совсем кастомный лэйаут нельзя. Но с небольшими стероидами можно не сильно хуже чем на асме.

> Тогда вместо скрипта можно навилосипедить загрузчик,

В случае МК дилемма в том кто будет загружать загрузчика :). В том случае при power up я довольно быстро получаю неинициализированный чип в свое распоряжение и в этот момент нет никаких загрузчиков. В системе есть пустая RAM, мой код в Flash. И более - нифига. И мой код делает все остальное. Имеет ли это практическое применение? О, более чем. Скажем фирмвар апдейт "in situ" делается штуками известными как boot loader. Это первое что стартует, а потом либо пускает основную фирмвару, либо апдейтит ее (либо догружает модуль апдейта по некоему интерфейсу). Во первых, народ периодически хочет чтобы им такое кто-то накодил. Во вторых, знание этого позволяет странные вещи. Так можно накодить "сервистулы" для всякой мелочи. Флешеры, конфигураторы и проч. Такого под Linux не так уж много. Но сейчас ситуция несколько исправляется. В чем мой личный интерес? Я могу в полный цикл создания микроконтроллерной железки, используя только Linux. Я даже на RISCV на десктопе смогу делать все это. Накодив себе все потребные тулзы если их вдруг до меня еще нет.

> который считает в память секции как надо для той фирмвари,

В гнутом тулчейне есть objcopy который это умеет штатно.

> обработает релокации,

Фирмвари обычно собирают под конкретные физические адреса Flash и RAM. Там нет VM а физические адреса прибиты на гвозди. Position independent код жирней и если проц всегда стартует с конкретной локации, и код гарантировано там, смысл канители с его релокацией? В другие адреса его технически не получится в многих случаях, за отсутствием там памяти. Но если очень хочется, реализуемо. Просто сделает код фирмвари жирнее и потребует добавочного сетапа окружения, у GCC есть некие мелкие улучшайки на тему. В нормальных архитектурах (это не про x86-32, тот не умеет в настоящую относительную адресацию на уровне архитектуры) gcc может танцевать вокруг 1 регистра как "базы". В этом же месте желаюшие так делать узнают кто такие GOT и PLT, если оно им правда надо.

> а потом выгрузит дамп в нужном формате. Понятно, что такое решение с написанным
> на коленке "линкером" мало кто захочет поддерживать, но это уже вопрос организационный.)

Гнутые тулчейны видите ли построены на основе либы форматов BFD и кроме всего прочего штатно предоставляют инструменты для работы с форматами файлов, их секциями и всем таким. И вот так вызовом objcopy какого можно сделать из ELF-а "RAW BIN". Корректность результата разумеется на том кто дергает objcopy и пишет линкерскрипт.

> Мне во всей этой безусловно крутой технической заморочке не понятно одно, а
> зачем вообще универсальность

JUST BECAUSE WE CAN :D. Иногда хочется позажигать и посмотреть можно ли и правда сбить автомобилем вертолет, или это миф. Тем более что если да, результат выглядит забавно. А иногда народ еще и решает что им это надо. Заранее узнать что пропрет планету а что нет - малореально. Cyan вон собирался маркетологом быть, а стал экспертом по сжатию.

> и какова её цена?

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

> Неторопливый загрузчик в Виндосе не будет занимать память лишними страницами,

Говоря за себя я понятия не имею как писать загрузчик кастомного исполняемого в винде, и мне это честно говоря совсем не интересно. На x86-32 - вдвойне.

> а с ELF помимо лишней памяти ещё и дополнительные накладные расходы
>в виде шелскрипта. Она хочет, что бы оно запускалось везде одинаково... долго?))

Да там скрипт вроде достаточно скромный - эхает хидер эльфа на его законное место, добавляет тушку и запускает уже как нормальный ELF то что только что было PE EXE как бы. Но сама либа забавна еще и тем что может даже с лысого BIOS как бутсектор стартовать, притащив ВЕСЬ рантайм с собой. При том за бутсектор прокатыает MZ часть файла. MZ и что за ним дают достаточно валидные x86-команды для того чтобы не мешать остальному :))

И даже если оно вот прямо так скорее курьез, выглядит довольно ценным источником запчастей. А какие запчасти можно у вебмакаки на электроне натырить? :)

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Redbean 2.0 - платформа для web-приложений, упакованных в универсальный исполняемый ZIP-архив, opennews, 25-Июн-22, 16:12  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру