mantech 53 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба а к чему эти искания? IAR (если его об ином не просить) сгородит вам в elf формате , при загрузке image прочитали в заголовке адрес точки входа (e_entry) от туда и запускайте. или в чем то другом вопрос? Никогда не имел дел с этим форматом, поэтому ничего сказать не могу, когда-то он мне показался сильно навороченным... Соотв, где там брать точки входа - без понятия... Мне все-таки интересно, почему встроенный бут не пускается? Стек и вектора прерываний, если не изменяет память, настраиваются уже после запуска проги по точке входа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndrejM 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба извиняюсь , наврал я вам . это я так хотел сделать , но не получилось . в итоге выходной файл 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба там reset vector Т.е. я правильно понимаю, чтоб мне перезапустить собственный бутлодырь, который уже запущен (для проверки, конечно), я должен перейти в нем-же на адрес "__iar_program_start"?? Я пробовал, не стартует, причем перед этим блокировал прерывания, на всякий... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndrejM 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба Вам собственный бутлоадер нужно перезапускать? я то понял что он у вас отработал и с запуском приложения проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба Вам собственный бутлоадер нужно перезапускать? Нет, конечно Я написал, что для теста...Ну хоть с чего-то надо начинать. Проверить, где искать точку входа, пусть пока в том, что уже запущено, а потом можно уже и к основной проге переходить, логично? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба Нет, конечно Я написал, что для теста...Ну хоть с чего-то надо начинать. Проверить, где искать точку входа, пусть пока в том, что уже запущено, а потом можно уже и к основной проге переходить, логично? вот вам архив: 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("что угодно"); то вылет: => 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба берете мой *.bin и скармливаете своему "бутлодырю", а там поглядим.. Т.к. он при запуске ничего вообще не делает, как я пойму, что он запустился, а не просто повис? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба Т.к. он при запуске ничего вообще не делает, как я пойму, что он запустился, а не просто повис? у вас что, "бутлодырь" партизан? Бутлодырь запускается, инициализирует уарт1 пусть после запуска бинарника и успешного возвращения управления скажет "гав!" в uart1.. ну а если завис, то "гав!" пусть не говорит :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 9 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба Т.к. он при запуске ничего вообще не делает, как я пойму, что он запустился, а не просто повис? Через jtag. Если совсем ничего не работает придется подключать тяжелую артиллерию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndrejM 0 5 августа, 2015 Опубликовано 5 августа, 2015 · Жалоба mantech , а как вы сейчас (ну до того как "бутлодырем" занялись) грузите и запускаете приложение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 5 августа, 2015 Опубликовано 5 августа, 2015 · Жалоба Через jtag. Если совсем ничего не работает придется подключать тяжелую артиллерию. А вы шутник, однако! Хоть на одной из плат на мх6 у стартера, вы жтаг видели? у вас что, "бутлодырь" партизан? пусть после запуска бинарника и успешного возвращения управления скажет "гав!" в uart1.. ну а если завис, то "гав!" пусть не говорит :) А вот это дельное замечание, че-то не додумался об этом, спасибо! B) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 9 5 августа, 2015 Опубликовано 5 августа, 2015 · Жалоба А вы шутник, однако! Хоть на одной из плат на мх6 у стартера, вы жтаг видели? Я не использую платы стартеркит именно по причине их системной убогости. В первичных макетах всех изделий jtag закладываю в обязательном порядке именно на случай "когда ничего не работает". В последующих ревизиях его выкидываю. без jtag вам нужно * в бутолоадере осуществлять перехват всех исключений с выдачей диагностики * тестовый бинарник создавать в режиме позиционно-независимого кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 5 августа, 2015 Опубликовано 5 августа, 2015 · Жалоба В первичных макетах всех изделий jtag закладываю в обязательном порядке именно на случай "когда ничего не работает". В последующих ревизиях его выкидываю. Дело в том, что личности из стартеркита, принципиально признают только одну ось для этих процов - линукс, а там житаг нафиг не нужен. Я взял бы другую плату, но не за их кусачие цены, да и в проектах заложены платы от стартера, они хоть и убогие в плане диагностики, но для серийки - самое то по ценам. mantech , а как вы сейчас (ну до того как "бутлодырем" занялись) грузите и запускаете приложение? Как и полагается, иару подсовываю dcd-записи, затем cfimager-ом прошиваю сд-карту и в путь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 12 августа, 2015 Опубликовано 12 августа, 2015 · Жалоба пусть после запуска бинарника и успешного возвращения управления скажет "гав!" в uart1.. ну а если завис, то "гав!" пусть не говорит :) К сожалению висит, причем намертво 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... Процедура запуска - #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(); } Что еще делать - пока без понятия... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 9 13 августа, 2015 Опубликовано 13 августа, 2015 · Жалоба К сожалению висит, причем намертво Ну я уже писал что надо перехватывать исключения. Процедура запуска - ... Что еще делать - пока без понятия... Давайте ассемблерный листинг процедуры запуска. Попробуйте так: запускаемый бинарник пусть ничего не делает а сразу возвращается. Бутлоадер переделайте чтобы после возврата из запускаемой функции он выдавал сообщение. Если и так не заработает - ищите плату с работающим jtag. Еще стоит вернуться к запуску из uboot. Он может грузить бинарник даже через уарт. Ну в крайнем случае набьете десяток байт с консоли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться