|
|
  |
Бутлодырь на мх6 или любом кортекс А9, загрузка и передача управления проге |
|
|
|
Aug 4 2015, 11:20
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 20-11-13
Пользователь №: 79 278

|
извиняюсь , наврал я вам . это я так хотел сделать , но не получилось . в итоге выходной файл IAR в формате binary , и запуск с адреса загрузки , там reset vector __vector: ARM
LDR PC,Reset_Addr ; Reset
DATA
Reset_Addr: DCD __iar_program_start
map __vector 0x80000000 Code Gb cstartup.o
|
|
|
|
|
Aug 4 2015, 15:48
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 20-11-13
Пользователь №: 79 278

|
Вам собственный бутлоадер нужно перезапускать? я то понял что он у вас отработал и с запуском приложения проблема?
|
|
|
|
|
Aug 4 2015, 18:57
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(mantech @ Aug 4 2015, 19:29)  Нет, конечно  Я написал, что для теста...Ну хоть с чего-то надо начинать. Проверить, где искать точку входа, пусть пока в том, что уже запущено, а потом можно уже и к основной проге переходить, логично? вот вам архив: http://files.webfile.ru/ba7bcc6254723e13c3bc79d6647197f7внутри сделанный из юбутовского примера бинарник скомпиленный для стендалона голый мейн, войти и сразу выйти.. работа на холе: Код => tftpboot 10000000 hello_world.bin Using FEC device TFTP from server 192.168.0.2; our IP address is 192.168.0.136 Filename 'hello_world.bin'. Load address: 0x10000000 Loading: # 134.8 KiB/s done Bytes transferred = 276 (114 hex) => go 10000000 ## Starting application at 0x10000000 ... ## Application terminated, rc = 0x0 ## если добавить выхлоп printf("что угодно"); то вылет: CODE => tftpboot 12000000 hello_world.bin Using FEC device TFTP from server 192.168.0.2; our IP address is 192.168.0.136 Filename 'hello_world.bin'. Load address: 0x12000000 Loading: # 297.9 KiB/s done Bytes transferred = 305 (131 hex) => go 12000000 ## Starting application at 0x12000000 ... data abort
MAYBE you should read doc/README.arm-unaligned-accesses
pc : [<12000048>] lr : [<1200000c>] sp : 2f57be10 ip : 0000000f fp : 00000000 r10: 2ffbab2c r9 : 2f57bf38 r8 : 00000002 r7 : 2f706ae8 r6 : 12000000 r5 : 00000002 r4 : 2f706aec r3 : 12000000 r2 : 2f706aec r1 : 2f706aec r0 : 12000124 Flags: nZCv IRQs off FIQs off Mode SVC_32 Resetting CPU ... resetting ...
U-Boot 2013.10 (Jan 18 2015 - 22:05:09)
CPU: Freescale i.MX6SOLO rev1.1 at 792 MHz Reset cause: WDOG
при рассмотрение видно, что добавление функции printf увеличивает бинарник на ~100 байт, хотя по моим предположениям должно добавить не менее 10кБ. как версия, printf может использовать вызовы функций из юбута, но для сборки под фрискейл что-то не учли - мне разбираться лень.. берете мой *.bin и скармливаете своему "бутлодырю", а там поглядим.. зы примеры лежат в исходниках любого юбута examples/standalone
|
|
|
|
|
Aug 4 2015, 19:11
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(mantech @ Aug 4 2015, 22:07)  Т.к. он при запуске ничего вообще не делает, как я пойму, что он запустился, а не просто повис? у вас что, "бутлодырь" партизан? Цитата Бутлодырь запускается, инициализирует уарт1 пусть после запуска бинарника и успешного возвращения управления скажет "гав!" в uart1.. ну а если завис, то "гав!" пусть не говорит
|
|
|
|
|
Aug 4 2015, 19:49
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(mantech @ Aug 4 2015, 22:07)  Т.к. он при запуске ничего вообще не делает, как я пойму, что он запустился, а не просто повис? Через jtag. Если совсем ничего не работает придется подключать тяжелую артиллерию.
|
|
|
|
|
Aug 5 2015, 05:17
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 20-11-13
Пользователь №: 79 278

|
mantech , а как вы сейчас (ну до того как "бутлодырем" занялись) грузите и запускаете приложение?
|
|
|
|
|
Aug 5 2015, 07:27
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(mantech @ Aug 5 2015, 09:21)  А вы шутник, однако! Хоть на одной из плат на мх6 у стартера, вы жтаг видели? Я не использую платы стартеркит именно по причине их системной убогости. В первичных макетах всех изделий jtag закладываю в обязательном порядке именно на случай "когда ничего не работает". В последующих ревизиях его выкидываю. без jtag вам нужно * в бутолоадере осуществлять перехват всех исключений с выдачей диагностики * тестовый бинарник создавать в режиме позиционно-независимого кода.
|
|
|
|
|
Aug 5 2015, 14:32
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(_3m @ Aug 5 2015, 10:27)  В первичных макетах всех изделий jtag закладываю в обязательном порядке именно на случай "когда ничего не работает". В последующих ревизиях его выкидываю. Дело в том, что личности из стартеркита, принципиально признают только одну ось для этих процов - линукс, а там житаг нафиг не нужен. Я взял бы другую плату, но не за их кусачие цены, да и в проектах заложены платы от стартера, они хоть и убогие в плане диагностики, но для серийки - самое то по ценам. Цитата(AndrejM @ Aug 5 2015, 08:17)  mantech , а как вы сейчас (ну до того как "бутлодырем" занялись) грузите и запускаете приложение? Как и полагается, иару подсовываю dcd-записи, затем cfimager-ом прошиваю сд-карту и в путь
|
|
|
|
|
Aug 12 2015, 12:05
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(Jury093 @ Aug 4 2015, 22:11)  пусть после запуска бинарника и успешного возвращения управления скажет "гав!" в uart1.. ну а если завис, то "гав!" пусть не говорит  К сожалению висит, причем намертво CODE Debug port init as: UART1
DDR Checking... Done. SD/MMC1: Init... F: SD/MMC: Ok Filesystem: FAT32 Loading <F:hello_world.bin>...Read 276 bytes OK Dump at 0x10000000 in DDR [00]=0xE3A00000, [04]=0xE12FFF1E, [08]=0xE598C058, [0C]=0xE59CF000, [10]=0xE598C058, [14]=0xE59CF004, [18]=0xE598C058, [1C]=0xE59CF008, [20]=0xE598C058, [24]=0xE59CF00C, [28]=0xE598C058, [2C]=0xE59CF010, [30]=0xE598C058, [34]=0xE59CF014, [38]=0xE598C058, [3C]=0xE59CF018, [40]=0xE598C058, [44]=0xE59CF01C, [48]=0xE598C058, [4C]=0xE59CF020, [50]=0xE598C058, [54]=0xE59CF024, [58]=0xE598C058, [5C]=0xE59CF028, [60]=0xE598C058, [64]=0xE59CF02C, [68]=0xE598C058, [6C]=0xE59CF030, [70]=0xE598C058, [74]=0xE59CF034, [78]=0xE598C058, [7C]=0xE59CF038, [80]=0xE598C058, [84]=0xE59CF03C, [88]=0xE598C058, [8C]=0xE59CF040, [90]=0xE598C058, [94]=0xE59CF044, [98]=0xE598C058, [9C]=0xE59CF048, [A0]=0xE598C058, [A4]=0xE59CF04C, [A8]=0xE598C058, [AC]=0xE59CF050, [B0]=0xE598C058, [B4]=0xE59CF054, [B8]=0xE598C058, [BC]=0xE59CF058, [C0]=0xE598C058, [C4]=0xE59CF05C, [C8]=0xE598C058, [CC]=0xE59CF060, [D0]=0xE598C058, [D4]=0xE59CF064, [D8]=0xE598C058, [DC]=0xE59CF068, [E0]=0xE598C058, [E4]=0xE59CF06C, [E8]=0xE12FFF1E, [EC]=0xE59F3018, [F0]=0xE3A01000, [F4]=0xE59F2014, [F8]=0xEA000000, [FC]=0xE4C31001, [100]=0xE1530002, [104]=0x3AFFFFFC, [108]=0xE12FFF1E, [10C]=0x10008114, [110]=0x10008114, [114]=0x00, [118]=0x00, [11C]=0x00, Startup... Процедура запуска - CODE #define A5FW_BASE 0x10000000
typedef void (*pFunction)(void);
pFunction Jump_To_Application; uint32_t JumpAddress;
uint32_t _boot_addr;
void bootloader_boot(void) { _boot_addr=A5FW_BASE; __disable_interrupt(); /* Jump to user application */ JumpAddress = *( uint32_t*) (_boot_addr); Jump_To_Application = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ // __set_MSP(*(__IO uint32_t*) _boot_addr); Jump_To_Application(); } Что еще делать - пока без понятия...
|
|
|
|
|
Aug 13 2015, 05:50
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(mantech @ Aug 12 2015, 15:05)  К сожалению висит, причем намертво Ну я уже писал что надо перехватывать исключения. Цитата Процедура запуска - ... Что еще делать - пока без понятия... Давайте ассемблерный листинг процедуры запуска. Попробуйте так: запускаемый бинарник пусть ничего не делает а сразу возвращается. Бутлоадер переделайте чтобы после возврата из запускаемой функции он выдавал сообщение. Если и так не заработает - ищите плату с работающим jtag. Еще стоит вернуться к запуску из uboot. Он может грузить бинарник даже через уарт. Ну в крайнем случае набьете десяток байт с консоли.
|
|
|
|
|
  |
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|