|
LPC23xx, firmware upgrade, Intel HEX, Keil, Как выловить EPT из HEX-файла? |
|
|
|
Jun 16 2011, 14:53
|

Местный
  
Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594

|
Здравствуйте, коллеги ARMатурщики. Пришла нужда, сделал я, было, LPC2368/78 firmware upgrade (IAP+UART/IPMI) методом заливки Intel HEX файла и интерпретации его на контроллере. По дороге заливщик/загрузчик вылавливает из HEX-потока стартовый адрес (EPT) и хранит его вместе с дескриптором "upgrade"-кода во flash для последующих boot up. Получаю HEX-файл с помощью IAR. Ладно было дело, пока не заставила жизнь получить тот же HEX-файл с помощью Keil. Всё хорошо кроме одного: не могу догадаться, где в полученном HEX-файле ловить EPT. Если кто использует Intel HEX файл, полученный Keil, для прошивки fw upgrade, поделитесь, пож., опытом. Спасибо.  --- В принципе можно чуть продолжить для порядка: форум я читал, следов ответа найти не удалось, знаю, что EPT попадает в HEX-файл из LPC2300.s, только попадает в "шифрованном" компилятором виде, а уж дизассемблер на контроллере делать - вовсе тухлое занятие. Потому и совет хочется. (Идеальный совет - "правильный" LPC2300.s,- только кто его даст...  )
|
|
|
|
|
 |
Ответов
|
Jun 16 2011, 15:27
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (svss @ Jun 16 2011, 17:53)  не могу догадаться, где в полученном HEX-файле ловить EPT. Возьмите описание Intel HEX формата и реализуйте его ПОЛНОСТЬЮ. И настанет Вам счастье и независимость. QUOTE попадает в "шифрованном" компилятором виде, Смешно
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 16 2011, 16:07
|

Местный
  
Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594

|
Цитата(zltigo @ Jun 16 2011, 22:27)  Возьмите описание Intel HEX формата и реализуйте его ПОЛНОСТЬЮ. И настанет Вам счастье и независимость. Смешно  Я знаю, что Вы любите больше давать советы, чем отвечать на вопросы. Спасибо, но тема не про то. Intel HEX формат я давно "взял", реализовал "полностью" и оно даже работает. Если у Вас есть сомнения или возражения (например, Вы знаете конструкцию HEX, описывающую EPT), не сочтите за труд ткнуть меня туда носом явно, а не намёком. Если Вы найдёте время и силы для написания совета без отсылки к "сделай сам", спасибо.
|
|
|
|
|
Jun 16 2011, 17:56
|

Местный
  
Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594

|
Цитата(scifi @ Jun 16 2011, 23:23)  Ну это уже просто неприлично. См. тут: Wikipedia: Intel HEXЯ понимаю, что тема про моветон вечна и потому приведу для Вас специально отрывок от HEX-файла имени Keil, о котором и тема (она - не про Википедию, как Вам показалось) Код :0400000500000000F7 :020000040000FA :0400000500020000F5 :020000040002F8 (секции с кодом "0" и "1" по понятным причинам опущены.) Всё, других секций нету. Так вот, Record Type 5 не имеет ничего общего с EPT, а Record Type 2 (и 3) в файле от Keil отсутствуют вовсе. Возможно, проблема с проектом. (для справки - огрызок от map-файла: "Image Entry point : 0x0000016c" - стартовый адрес factory code (Image Validation &bootstrap). - он нам не нужен, его контроллер найдёт сам. "main 0x00020035 Thumb Code" - очень похоже на то, что надо, но этот адрес есть только "зарытый" в виде индекса в инструкцию, напоминающую branch(R0). Прошу прощения, я мнемонику ассемблера ещё на память не выучил всю  )) Это я к тому, что Rec type 5 не описывает EPT, да и наличие двух стартовых точек комментировать таки просто неприлично. (PSPS) К предположению об ошибке в проекте - скриншот. Подскажите, если знаете, пож., что там плохо и где. Второй файл - тот самый HEX от Keil - для сомневающихся в моём утверждении. Rec Type 5 там не две, а примерно четыре. Цитата А вообще можно зафиксировать точку входа и не париться. Это я не понял. Разжуйте несчастному, как ея зафиксировать: возможно о том и плач.
Сообщение отредактировал svss - Jun 16 2011, 18:03
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 17 2011, 01:37
|

Местный
  
Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594

|
Цитата(aaarrr @ Jun 17 2011, 04:25)  Приложите лучше получившиеся scat и map. Галки и визарды - это всегда плохо. Да-да, выведите меня, пожалуйста, на чистую воду поскорее. Скучно тонуть в болоте.  Цитата(KRS @ Jun 17 2011, 04:35)  так отладка стартует все равно по Reset вектору.
ну main то уж точно точкой входа не может быть! точка входа обычно в библиотеке находится, там стек инитится, сегменты и т.п. Да, причём этот вектор указывает на boot loader. Он, boot loader, всё "инитит", что может, проверяет валидность "настоящей" области векторов и передаёт туда управление. IAR генерирует первую инструкцию, исполняемую после ResetVector, - "B __iar_program_start" - переход в область update кода - то, что нужно. Keil - делает что-то другое, там участвует выше упомянутый ("от Бога" даденный) файл lpc2300.s На этом глубина моего познания Keil заканчивается и начинается мель проблем. Внутренний голос мне уже подсказывает, что вы (команда уделивших внимание теме) сказали достаточно полезных слов, чтоб я "дожал" проблему до внятного результата. Тема, однако, пока не закрыта и если кто (например, aaarrr) сможет/захочет чего добавить, упростить мне задачу - заранее спасибо.
|
|
|
|
|
Jun 17 2011, 09:26
|

Местный
  
Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594

|
Цитата(aaarrr @ Jun 17 2011, 13:46)  Ваш проект имеет два load region'а, с адресами 0x00 и 0x20000. HEX получился совершенно корректный - двумя кусками с этими адресами. Так какие претензии к Keil'у? Это-то (то, что код корректный и работает) меня, похоже и сбило с толку, как я начинаю догадываться. Региона - да- два, а вот кусков в HEX-файле три. (правда, между вторым и третьим нет дырки) Претензия к Кейлу - в том, что *каждый* из трёх HEX-кусков сопровождается RecType5. Нужны только RecType4. RecType5 должен быть единственным - описывающим адрес старта. А пепел сыплю голова потому, что моё предположение о том, что код должен *работать* было, похоже, ошибочным. Нужно генерировать Update код целиком в Update сегменте, тогда стартовый адрес совпадёт с базовым адресом сегмента и один из трёх RecType5 имени Keil укажет на него. (Как бы ещё гуманно выбрать из трёх наилучший? По наибольшей похожести на "ноль"?) Однако такой код запустить из-под uVision IDE и пройти "по шагам" едва ли получится. Пожелание к Кейлу есть. Указать бы как-то стартовый адрес, отличный от базового адреса сегмента. Тогда описанное неудобство исчезнет. Спасибо, Ваш комментарий добавил уверенности в том, что нет грубого промаха в проекте.
Сообщение отредактировал svss - Jun 17 2011, 09:27
|
|
|
|
|
Jun 17 2011, 10:18
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(svss @ Jun 17 2011, 13:26)  тогда стартовый адрес совпадёт с базовым адресом сегмента и один из трёх RecType5 имени Keil укажет на него. Если базовый адрес сегмента (и, следовательно, точка входа) заранее известны, то зачем искать RecType5, который его сообщит? Цитата(svss @ Jun 17 2011, 13:26)  Однако такой код запустить из-под uVision IDE и пройти "по шагам" едва ли получится. Получится. Отладчик uVision умеет много такого, о чём вы и не догадываетесь. Посказка: см. тут.
|
|
|
|
|
Jun 18 2011, 04:46
|

Местный
  
Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594

|
Цитата(scifi @ Jun 17 2011, 17:18)  Если базовый адрес сегмента (и, следовательно, точка входа) заранее известны, то зачем искать RecType5, который его сообщит? Хороший вопрос. (Правда я на него неявно ответил выше) Действительно искать не нужно, если код отлажен и его не нужно ходить по шагам. Иначе стартовый адрес, как известно, всегда равен нулю, а точку входа нужно искать самому, либо уговорить Keil поместить нужное в RecType5. (Спасиб за ссылк.) Цитата(scifi @ Jun 17 2011, 21:19)  Спасибо, у меня уже давно всё работает :-) Это я топикстартеру забот накидываю, чтобы не расслаблялся :-) Да, это дело. Правда и у меня уже всё работает. Тему можно было бы считать закрытой, но остался один вопрос, заданный в самом начале темы относительно "правильного" lpc2300.s файла для Update кода. В случае его применения Update код можно отлаживать по шагам. Следуем правилу: "спросил-не ответили-ответь сам" lpc2300_update.sКод ;/*****************************************************************************/ ;/* LPC2300_upd.S: Startup file for NXP LPC23xx/LPC24xx devices (update area) */ ;/*****************************************************************************/ ; Author: svss ; Note: this file was created using LPC2300.s (c)Philips/NXP/Keil as a sample. ; All copyrights are recognized.
; Area Definition and Entry Point ; Startup Code must be linked first at Address at which it expects to run.
AREA RESET, CODE, READONLY ARM Vectors LDR PC, __main ; LDR PC, Undef_Addr ; LDR PC, SWI_Addr ; LDR PC, PAbt_Addr ; LDR PC, DAbt_Addr END
|
|
|
|
|
Jun 18 2011, 11:17
|

Местный
  
Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594

|
Цитата(aaarrr @ Jun 18 2011, 16:37)  Правильно будет настроить стек и кучу, а затем перейти на __main. То что вы привели не есть правильно, хотя при определенных условиях работоспособно. Спасибо. Я здесь же отвечу и zltigo. Правильно ли, нет ли писать максимум кода на C, оставляя ассемблера не более, чем обойтись нельзя, наверное, спорить смысла нет. Нельзя обойтись числом ассемблерных инструкций, меньшим одной. То, что код из одной ассемблерной инструкции уродлив я предлагаю считать частным мнением автора высказывания, зато он позволяет с помощью Keil получать результат эквивалентный IAR. Тут нелишне пожаловаться на судьбу и на рок в лице заказывающего музЫку и объяснить, что я всюду имел в виду Keil 3.0. Я это умалчивал, чтоб не исчез интерес пишущих к теме и избежать совета потребовать от свышестоящих заменить среду разработки. Такие дела.
|
|
|
|
Сообщений в этой теме
svss LPC23xx, firmware upgrade, Intel HEX, Keil Jun 16 2011, 14:53   zltigo QUOTE (scifi @ Jun 16 2011, 19:23) Внимат... Jun 16 2011, 16:28    zltigo QUOTE (svss @ Jun 16 2011, 20:56) Так вот... Jun 16 2011, 18:08     svss Цитата(zltigo @ Jun 17 2011, 01:08) Не зн... Jun 16 2011, 18:34      zltigo QUOTE (svss @ Jun 16 2011, 21:34) Что кас... Jun 16 2011, 18:44       svss Цитата(zltigo @ Jun 17 2011, 01:44) Может... Jun 16 2011, 18:59        zltigo QUOTE (svss @ Jun 16 2011, 21:59) Ммм... ... Jun 16 2011, 19:09         svss Цитата(zltigo @ Jun 17 2011, 02:09) Не ве... Jun 16 2011, 19:28         zltigo QUOTE (scifi @ Jun 17 2011, 13:18) Если б... Jun 17 2011, 11:08          scifi Цитата(zltigo @ Jun 17 2011, 15:08) Речь ... Jun 17 2011, 11:35           zltigo QUOTE (scifi @ Jun 17 2011, 14:35) Ну так... Jun 17 2011, 12:20            scifi Цитата(zltigo @ Jun 17 2011, 16:20) Ну и ... Jun 17 2011, 14:19          zltigo QUOTE (svss @ Jun 18 2011, 07:46) Следуем... Jun 18 2011, 08:48            zltigo QUOTE (svss @ Jun 18 2011, 14:17) Я здесь... Jun 18 2011, 15:24 KRS я тоже первый раз слышу про EPT в данном контексте... Jun 16 2011, 20:32 svss Цитата(KRS @ Jun 17 2011, 03:32) я тоже п... Jun 16 2011, 21:09  KRS Цитата(svss @ Jun 17 2011, 01:09) Table -... Jun 16 2011, 21:35
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|