Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

ELF файл и trace
http://mcu-bg.com/mcu_site/viewtopic.php?f=14&t=14472
Страница 1 от 1

Автор:  [ Вто Мар 29, 2016 7:56 pm ]
Заглавие:  ELF файл и trace

Как мога да направя листинг на всички променливи на един ELF файл ?
Успях да го докарам до прост листинг с адресите на променливите, но ми трябват
още типовете и размера в байтове. Всъщност размера ми го дава нулев за
всички променливи от листинга (това за dsPICxxx)

По принцип искам да мога да се закача за работещо приложение на произволен микроконтролер
(Microchip, AVR, ARM) и от ПК да му давам кои променливи да ми изпраща по произволен интерфейс
(Eth, USB, UART, SPI, I2C, CAN и т.н.) Вътре в микроконтролера си има debug код, който чака ПК да
му изпрати списък с адрес и размер, след което започва да ги чете и изпраща на определено време
към ПК. Един вид trace, само че софтуерен.

От страната на ПК (Windows/Linux/Mac) програмата прави от ELF файла списък с всички променливи,
техния тип и размер (затова ми трябва листинга на ELF файла), а юзера си избира кои променливи да
следи или да логва, след което програмата праща списъка на микроконтролера (във формат:
адрес-размер) и започва да слухти за данните.

Microchip имаха подобен сорт "trace", но от страната на ПК е отвратителна работа, така и не можах
да му свикна. Та искам да си направя нещо такова, което да мога когато си пожелая да го закача
към работещо приложение (стига вътре да е програмиран trace кода и да знам кой му е интерфейса) :-)

Автор:  TheWizard [ Вто Мар 29, 2016 9:13 pm ]
Заглавие:  Re: ELF файл и trace

адресите ги имаш в MAP файла
проект\dist\default\production
или линкер, диагностика --cref --print-map > MyMapFile.txt

ама дължината им.......

PS: разбрах те ама късно

Автор:  [ Вто Мар 29, 2016 10:11 pm ]
Заглавие:  Re: ELF файл и trace

То и аз малко го обясних по-сложния начин :-) , Microchip му казват RTDM(Real Time Data Monitor) , но
не ми харесва User интерфейса, освен това е лимитирано само до UART, и само до техните професори.
Пък ако мога да извадя от ELF файла имената на променливите, техния тип и размер тогава става
универсално помагало за всякакви професори.

pic30-objdump -D -EL -f -h -omf=elf v18_5.X.production.elf
ми дава следното:

Код:
Symbol table '.symtab' contains 7389 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000000     0 FILE    LOCAL  DEFAULT  ABS C:\MyFile\Projects\S703(D
     2: 00000001     0 NOTYPE  LOCAL  DEFAULT  ABS __30F5015
     3: 00000001     0 NOTYPE  LOCAL  DEFAULT  ABS __dsPIC30F
     4: 00000001     0 NOTYPE  LOCAL  DEFAULT  ABS __HAS_DSP
     5: 00000001     0 NOTYPE  LOCAL  DEFAULT  ABS __HAS_EEDATA
     6: 00000001     0 NOTYPE  LOCAL  DEFAULT  ABS __C30ELF
     7: 00005172     0 SECTION LOCAL  DEFAULT   29
     8: 00000000     0 SECTION LOCAL  DEFAULT PRC[0xff00]
     9: 00000000     0 NOTYPE  LOCAL  DEFAULT  ABS ___PA___


Като колоната Size е нула за абсолютно всички променливи. Сега не знам дали това
е типично за objdump за целия GNU binary utilities или Microchip-ския е усран. Пробвах
на C30 и XC16 с различни версии, няма разлика.

Автор:  TheWizard [ Сря Мар 30, 2016 7:26 am ]
Заглавие:  Re: ELF файл и trace

Няма ли да бави приложението в пика, а и все пак повечето дебъгерски операции са хардуерни и не е предвидено софтуерни breakpoints на 24/30/33 серията
мисля че е 32-ките има разширен дебъг, но не съм сигурен...

Преди време правих подробен "клиентски" дебъг за GSM с PIC24:

един u16 с дефинирани битове като нива за разделно разрешаване - какво да принтва на дебъг кома
а в приложенито бях натурял
LOG(LEVEL_SYS, "изречение %d %d,......", params....)
LOG(LEVEL_GSM, "изречение %d %d,......", params....)

ако LEVEL_XXX е разрешен - принтва само тази периферия

Автор:  ДедоБоре [ Сря Мар 30, 2016 2:51 pm ]
Заглавие:  Re: ELF файл и trace

elf-формата все пак не е краен .bin за наливане в микроконтролер. изисква лоудер, да му намести секциите в паметта, дори и да е чисто статично линкнат.

от друга страна, информацията, която можеш да извлечеш ще касае само статични глобални променливи. няма да са ясни локални променливи (във функции), параметри на функции, променливи в стековия фрейм, да не говорим за регистрови променливи. в този смисъл, упражнението дори не е половинчато, по-добре се насочи към смислено ползване на вградения тейс модул.

на нормално gcc с objdump -t се вижда големината на променливите, нямам идея на мокрочипското какво са орязали.
виж какво ти връща readelf -s

първата колонка 'value' е някакъв виртуален номер, не е адрес.
и променливите са винаги от тип 'object'

Автор:  TheWizard [ Сря Мар 30, 2016 6:16 pm ]
Заглавие:  Re: ELF файл и trace

на GSM модулите ( повечето ) като се конекнеш по сътветния начин (UART или TCP) бълват ВСИЧКО, а с ELF(мап) само филтрират

PS: .... може да филтрират и при конекция ?!

Автор:  [ Сря Мар 30, 2016 7:22 pm ]
Заглавие:  Re: ELF файл и trace

Пълно щастие няма. За глобалните променливи, използвайки стандартните инструменти от GNU bin utilities
мога да получа адрес и размер. При Microchip се оказа, че нещо са осрали, затова размера им е винаги 0
(каквито и опции да задавам на objdump и readelf)

Вградения трейс, хубаво нещо, но неприложимо в много ситуации. На мен ми трябва просто решение, което да работи
на всякави контролери, с рейс, без тРейс, както дойде. RTDM на Microchip съм го изполвал и работи добре, но
User интерфейса ми е трън в очите. Същевременно не искам да копам в структурата на ELF файла, щото утре ще променят
нещо и трябва да копам наново. Затова си мислех, ако може чрез съществуващите функции на GNU Bin utilities да извличам
три неща: адрес, размер и тип. Да, адреса (втората колонка, Value) може и да не е реалния в паметта,
но все пак може сравнително лесно да са намери.. Ако обаче променливите са винаги от тип 'object', то тогава начинанието си губи смисъла, т.е.
ще трябва да се чете и анализира ELF файла. Някой да има подходящо четиво за ELF структурата, ако може да е
за ниво на полу-идиоти :-)

Автор:  ДедоБоре [ Чет Мар 31, 2016 1:12 pm ]
Заглавие:  Re: ELF файл и trace

ми четива за elf - колкото искаш в нета. ако се почустваш пълен идиот, прочети документа до половината, и така ще стане за полу-идиоти :D
проблема е, че за всяка архитектура си има национални особености - 32/64, ABI, EABI, no-EABI и каквото там са натворили в маркото и основното gnu. в този смисъл ми се вижда малко невъзможна задачката ти, особено ако намесиш малки пикльовци, AVR и подобни.

типовете на променливите ги няма в символната таблица (там са object, function и подобни). можеш да ги извадиш от дебъг секцията, но трябва да я има -> да можеш да вкараш elf-а в gdb и да видиш променливите (ptype име_на_променлива).
виж на твоя мокрочипски elf дали работи
readelf --debug-dump=info

Автор:  bobihot [ Съб Апр 02, 2016 6:07 pm ]
Заглавие:  Re: ELF файл и trace

Как и с какво правите от elf, Apk за Андроид?

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/