Василий
чтобы не пересобирать, иначе будет меняться в области инфа в зависимости отверсии IDF и оптимизации
Dr Zlo
в целом да, но хотелось бы отдельным бинарником
Я про это и говорю. То есть второй бинарник держит скажем в смещении 0 структуру которая ссылается на его функции. Первый бинарник просто ходит в адрес второго, и вычитывая адреса по смещению 0 дергает нужные функции.
Василий
нужен просто ELF и всё)
Andy
Звучит довольно просто, размещением таблицы адресов функций по заранее известному смещению вроде все решается
Так это и есть раздел partition table. Но самое главное это никаких обращений к ОЗУ мимо основной прошивки :)
Dr Zlo
можно даже линкануть статически без GOT
Да, но это вообще убивает любую совместимость ABI
Dr Zlo
Нене, pic тут не нужен, у тебя же всегда одно и то же смещение
Василий
врукопашку просто наделать ссылок?
Dr Zlo
тебе просто нужна эрзац-GOT в виде структуры по оффсету
Василий
хммм
Василий
подумаем)
Denis
по одному адрессу сидят только функции обьявленные ка статик
Andy
Оно конечно для сертификации может и прокатит, но это напоминает ROM на esp32, там ведь то же basic зашит и много чего еще. Но че-то все больше от этих функций отказывается вендор :)
Dr Zlo
по одному адресу можно прибить только ручками через скрипт линковки
Dr Zlo
возможно еще через атрибуты, не помню, но тоже ручками
Василий
Denis
бейсик загружается в рам потом стартует из рам
Василий
чтобы например вынести изменнения в вебапп и делать их когдаугодно, ибо оно не влияет на основной функционал
Denis
но он заблокирован
Dr Zlo
я делал что-то подобное на stm32, но с загрузкой приложения в RAM по неизвестному адресу и полноценной динамической линковкой
Dr Zlo
fPIC )
без
Василий
опять врукопашку?
Василий
ну ты зверь)
Dr Zlo
PIC это боль с GOT и PLT
Dr Zlo
полноценной релокацией и линковкой
Andy
та понятно что костыль, но есть цель доказать что воттут юзаем неизменяемый софт, он всегда делает то же самое
Хе хе, тогда уж просто таскать с собой этот раздел, но к нему не обращатся, :) как те 20 кг. резисторов в импортозамещенном изделии
Василий
полноценной релокацией и линковкой
а, это была именно самостоятельная прога
Dr Zlo
https://github.com/flipperdevices/flipperzero-firmware/tree/zlo/external-apps/applications/elf-loader вот тут можно поглядеть код
Василий
тобишь ты адрес старта давал из рамы и пускал прогу?
Dr Zlo
я грузил секции в адреса которые мне отдал malloc и правил смещения
Dr Zlo
твой зверек?
да, в том числе и мой
Василий
крутяк)
Василий
как тесен телеграмм)
Василий
нашли разраба флиппера)
Василий
ну всеравно спасибо, я пока поизучаю азы чипа, потом поделюсь что получилось
Andy
я грузил секции в адреса которые мне отдал malloc и правил смещения
https://ru.wikipedia.org/wiki/Overlay_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)#:~:text=Overlay%20(%D0%BE%D0%B2%D0%B5%D1%80%D0%BB%D0%B5%D0%B9)%20%E2%80%94%20%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F,%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8%2C%20%D1%87%D0%B5%D0%BC%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%BE%20%D0%B2%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5.&text=%D0%92%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D1%8B%20%D1%87%D0%B0%D1%81%D1%82%D0%BE%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8E%D1%82%20%D0%BE%D0%B2%D0%B5%D1%80%D0%BB%D0%B5%D0%B8,%D0%B8%20%D0%BD%D0%B5%20%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D0%B5%D1%82%20%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E%20%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C.
Василий
Хе хе, тогда уж просто таскать с собой этот раздел, но к нему не обращатся, :) как те 20 кг. резисторов в импортозамещенном изделии
не, там реально будет показано что вызовы идут в ту область памяти, и если ее почистить - неработает)
Василий
просто хочется гибкости устройства и сертификацию пройти)
Василий
и волки сыты, и овцы целы)
Василий
например захотел ты поменять вебапп - взял и поменял, на сертифицированный функционал это не влияет
Andy
просто хочется гибкости устройства и сертификацию пройти)
А точно кусок бинарника можно сертифицировать? Вроде как в этом случае сертифицируют исходный код. Могу конечно ошибатся :(
Василий
я просто хочу засертить часть бинарника
Василий
типа в той области всегда лежит одинаковое, мона считать и сверить
Василий
и оно участвует в основном функционале
Andy
я просто хочу засертить часть бинарника
Вот я про этот ньюанс и спрашиваю. Именно из-за сертификации FCC espressif не публикует код работы с модемами
Andy
в gcc нет никакой поддержки оверлеев
Угу, т.е. вам пришлось это делать "вручню" :)
Dr Zlo
Угу, т.е. вам пришлось это делать "вручню" :)
как и любым людям которые хотят загружать elf
Василий
как и любым людям которые хотят загружать elf
ну да, elf грузить на лету в мк то еще приключение)
Dr Zlo
ну да, elf грузить на лету в мк то еще приключение)
Ну не только в мк, в старших процах убирается только этап с релокацией, он переходит на сторону MMU
Василий
приятно что нашёл шарящих в теме, может и меня подтяните
Dr Zlo
Линковать так или иначе придется вручную, через GOT\PLT или через переписывание адресов
Василий
Василий
фполне выход из ситуации
Dr Zlo
Да, в вашем случае я не вижу минусов этого подхода
Василий
я так понимаю эта структурка описана в хидере к бинарнику либо заранее согласована по API?
Dr Zlo
я так понимаю эта структурка описана в хидере к бинарнику либо заранее согласована по API?
Хидер с ней должен быть общим для первого и второго бинарника
Василий
ок
Dr Zlo
Все верно понимаете
Василий
под API подразумевал например заранее согласованную структурку ссылок в начале программы, неизменяемую
Василий
типа положите воттут ссылку на ..., вот тут положите основную функцию, я ее положу в таску итд)
Dr Zlo
да
Василий
@Dr_Zlo13 спасибо за наставничество, рад знакомству с разрабом флипера)
Vladislav
Ситуация: idf-esp, взял пример ethernet, подцепил lan8720, инициализируется нормально, пингуется, работает UDP протокол. Есть код UDP ответчика (обнаружение ESP в сети), после обнаружения подключаюсь по TCP к сокету, который слушает порт. Вариант с wifi работает, код сервера точно рабочий. С эзернетом же после того как принимаю подключение (accept) ethernet отваливается. Точнее, принимать он принимает, но никаких пакетов он больше не высылает. Смотрел wireshark, пакетов нет.
Vladislav
send ошибок не выдает, говорит что все отправлено
Vladislav
не понимаю куда копать
Serjio
ethernet? кабелем? напрямую/через шлюз? смотрение wireshark, кстати, может только на ложный след навести. ну или в порядке эксперимента подключаться точно таким же образом к другому устройству и видеть трафик
Serjio
какой-нибудь размер кадра попробовать уменьшить?
Serjio
попробовать устанавливать соединение от esp? увидеть исходящий трафик в wireshark с него?