Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Эльф, есть пара вопросов...
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
z768
Прога режет эльф по секциям.
Находит программную секцию.
Выдергивает прошивку из программной секции.
Это не проблема.
В эльфе есть секция .data
Как я понял там адресация к виртуальной памяти.
Сам вопрос...
Реально ли пересчитать адреса при подмене разделов в программной секции ?
Не имея исходников...
Чип амбарелла.
Сорри перед сообществом, если чего по-детски написал.
Сергей Борщ
QUOTE (z768 @ Jul 6 2016, 09:27) *
Реально ли пересчитать адреса при подмене разделов в программной секции ?
Не имея исходников...
Думаю да, запустить линкер, указав ему ваш файл в качестве входного и новый адрес секции .data в командной строке через -Tdata=адрес

QUOTE
-Tbss=org
-Tdata=org
-Ttext=org
Same as --section-start, with .bss, .data or .text as the sectionname.

z768
Прогу написал я сам, линкер смогу и упрятать в ресурсы проги.
Это не проблема.

Я линкер не смог запустить. Понимаю ... командная строка...
Матерится в ответ biggrin.gif
С этим разбираться буду отдельно.

Если я правильно понял из доки, ему еще и скрипт нужен...
Может кто чего-то подобное совершал, поделитесь плиз.
В Си не силен но разберусь, пусть на это уйдет и масса времени.
Сергей Борщ
QUOTE (z768 @ Jul 6 2016, 16:45) *
Если я правильно понял из доки, ему еще и скрипт нужен...
Если хотите - можете указать и скрипт. У меня получилось вот так:
CODE
arm-none-eabi-ld -Tdata=0x120000 input.elf -o output.elf
Вместо arm-none-eabi-ld подставьте имя своего линкера, с остальным, думаю, разберетесь.
z768
Спасибо.
Если чего не получится задам вопросы.
Надеюсь никакие бля-бля-теки не нужно подключать.
rolleyes.gif
У меня в системе даже среда арм не установлена.
А эльф вскрыть не составило большого труда, почти как работа с текстовым файлом.
При этом без всяких сторонних утилит.
Правда моя программа заточена только для амбы.
Сергей Борщ
QUOTE (z768 @ Jul 7 2016, 18:27) *
Если чего не получится задам вопросы.
Это всегда пожалуйста (см. мою подпись) wink.gif

QUOTE (z768 @ Jul 7 2016, 18:27) *
У меня в системе даже среда арм не установлена.
Честно говоря, гугля по запросу "umbrella mcu" выдал кучу ерунды и ни одной ссылки на процессор или контроллер. Так что я даже и не знаю - а ARM ли он. Может вам нужен gcc и не для ARM вовсе....
mantech
Цитата(Сергей Борщ @ Jul 7 2016, 23:45) *
Это всегда пожалуйста (см. мою подпись) wink.gif

Честно говоря, гугля по запросу "umbrella mcu" выдал кучу ерунды и ни одной ссылки на процессор или контроллер. Так что я даже и не знаю - а ARM ли он. Может вам нужен gcc и не для ARM вовсе....


Это узкоспециализированная SOC для видеосистем на основе Cortex A9. Доки по этому чипу нет.

CPU – ARM Cortex-A9 processor with 32KB/32KB I/D and 128 KB L2 Cache, NEON and FPU,
Crypto Engine – AES/3/DES/SHA-1/MD5
DSP / VPU – Ambarella Image and Video DSPs
Sensor and Video I/O
RGB Bayer sensor port: 8-lane SLVS/MIPI/HiSPI
BT.601/656/1120 video in and BT.656/1120 out
PAL/NTSC composite SD video out


Read more: http://www.cnx-software.com/tag/ambarella/#ixzz4Dl6qnZjl
z768
Это арм архитектура.
Часть материала для чипа а2 у меня есть.
Повторяю, вскрыть эльф, зная его строение не составило проблем.
При этом не применял никаких сторонних утилит.
Выдернуть из секции .техт все програмные разделы, которые входят в прошивку... тоже нет проблем.
В эльфе даже нет пересчета контрольных сумм, только смещения и длины.
В секцию .техт вложены разделы прошивки, там в каждом разделе есть пересчет crc32.
Моя прога все это разложит и при редактировании все правильно пересчитает.
Но это так сказать отступление от вопроса, что бы вы были в теме.
Меня больше всего интересует сборка эльфа, при подмене разделов в секции .техт.
Сорри, пока не занимался и задаю вопросы, пока просто времени не хватает.

Почему так всегда происходит, садишься за свою работу, у посторонних тоже проблемы, вот и получается сапожник без сапог...
wink.gif
z768
Сергей, спасибо за помощь.
LD запустил. Уже радует.
Но меня интересует немного иной вопрос.
Возможно я сам неправильно его задал, либо вы неправильно поняли.
Мне не нужно преобразование из эльфа в эльф.
При разборке эльфа у меня получается условно говоря, ну 9 секций.
Типа sec0.bin, sec1.bin, ... sec8.bin
Одну из них я модифицирую, т.е. программную, которая как .техт....
...
мне нужно собрать эльф с новой секцией.
Это и есть основной вопрос.
Матчасть пока изучаю.
z768
В общем поразбирался с утилитками из комплекта АРМ.
Моя прога выполняет полностью функции arm-elf-objcopy.ехе.
Т.е.
Код
arm-elf-objcopy.exe -O binary -j .text 1.elf Sec.bin

Ну возможно с не большими извращениями в названиях файлов.
Как эти бинарники слинковать, я так и не понял.
Попытался запустить arm-elf-objdump, натравить на секцию - выдает неизвестный формат.
По эльфу - все окей.
Сергей Борщ
QUOTE (z768 @ Jul 12 2016, 11:55) *
Как эти бинарники слинковать, я так и не понял.
Ой, как-то можно было, даже тут на форуме примеры проскакивали. Вот, например. Как-то можно было сразу двоичный файл линковщику давать, но не могу найти те сообщения. Вот еще.
z768
Сергей, в принципе могу и программу отправить.
В личку конечно, ну что б не думал что я чего-то нереальное спрашиваю.
Я и сам инет активно читаю... но пока ответов не нахожу.

Возможно программа и другие эльфы разложит, но она заточена под определенный чип.
Т.е. амбарелла.
Сергей Борщ
Спасибо, конечно, но зачем? Мне хватает тех программ, которые идут в комплекте с гцц.
z768
Сергей, извини, почему на связь не выходил.
У нас природа чудес натворила.
Как только исправлю последствия, обязательно отпишу.
Фото выкладывать не буду, потому как есть оффтоп, сорри.
z768
Сергей, спасибо за помощь.
Кстати больше всего полезной инфы нашел на этом форуме.
В общем, просто так прилинковать голый бинарник у меня не получилось с помощью arm-elf-ld.
Но при помощи утилитки objcopy я конвертировал бинарник в объектный файл и процесс пошел.
z768
Не могу понять в чем баг.
Скрипт для линковщика простейший.
Код
arm-elf-ld -T Linker.ld Sec1.o Sec4.o -o elf.elf


Код
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)

SECTIONS
{
    . = 0xC0100000;

    .text : {
        * (.text)
        . = ALIGN(4);
    }

    .data : {
        * (.data*)
        . = ALIGN(4);
    }
  
}

на выходе получаю ельф.ельф.
Проверяю параметр по секциям Addralign...
... в секциях стоит 1.

Это проблема линковщика, либо objcopy, либо моя ???
Исправляю в хекс редакторе на 4 по секциям для линковки.
На выходе получаю нормальный параметр Addralign.
Почему не работает строка ". = ALIGN(4);"
?????
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.