реклама на сайте
подробности

 
 
> Бутлодырь на мх6 или любом кортекс А9, загрузка и передача управления проге
mantech
сообщение Aug 2 2015, 15:17
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Приветствую.

Собственно, решился таки на написание собственного бутлоадера для проектов на мх6
До этого обновление программы делала сама программа, переписывая себя саму, но это не айс, как говорится, при неудачной прошивке получается кирпич и без cifmager-а и плясок с бубном работоспособность не вернуть...

Собственно вопрос, бутлодырь я гружу в статическую память, благо он не больше 128кило весом biggrin.gif
Затем поднимаю ФС, которая загружает в память бинарник прошивки с адреса 0х10000000, и как-бы его и запускать надо, да только не запускается, гад crying.gif

Может кто подскажет, какие нюансы там, у стмок просто прибавлял к адресу загрузки 4 и все норм...
ЗЫ. "Запускальщик" позаимствовал из проекта на стм.

Сообщение отредактировал mantech - Aug 2 2015, 15:18
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
mantech
сообщение Aug 4 2015, 11:05
Сообщение #16


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(AndrejM @ Aug 4 2015, 10:55) *
а к чему эти искания? IAR (если его об ином не просить) сгородит вам в elf формате , при загрузке image прочитали в заголовке адрес точки входа (e_entry) от туда и запускайте. или в чем то другом вопрос?


Никогда не имел дел с этим форматом, поэтому ничего сказать не могу, когда-то он мне показался сильно навороченным... Соотв, где там брать точки входа - без понятия...
Мне все-таки интересно, почему встроенный бут не пускается? Стек и вектора прерываний, если не изменяет память, настраиваются уже после запуска проги по точке входа.
Go to the top of the page
 
+Quote Post
AndrejM
сообщение Aug 4 2015, 11:20
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 4 2015, 14:09
Сообщение #18


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(AndrejM @ Aug 4 2015, 14:20) *
там reset vector


Т.е. я правильно понимаю, чтоб мне перезапустить собственный бутлодырь, который уже запущен (для проверки, конечно), я должен перейти в нем-же на адрес "__iar_program_start"?? Я пробовал, не стартует, причем перед этим блокировал прерывания, на всякий...
Go to the top of the page
 
+Quote Post
AndrejM
сообщение Aug 4 2015, 15:48
Сообщение #19


Участник
*

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



Вам собственный бутлоадер нужно перезапускать? я то понял что он у вас отработал и с запуском приложения проблема?
Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 4 2015, 16:29
Сообщение #20


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(AndrejM @ Aug 4 2015, 18:48) *
Вам собственный бутлоадер нужно перезапускать?


Нет, конечно biggrin.gif Я написал, что для теста...Ну хоть с чего-то надо начинать. Проверить, где искать точку входа, пусть пока в том, что уже запущено, а потом можно уже и к основной проге переходить, логично?
Go to the top of the page
 
+Quote Post
Jury093
сообщение Aug 4 2015, 18:57
Сообщение #21


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(mantech @ Aug 4 2015, 19:29) *
Нет, конечно biggrin.gif Я написал, что для теста...Ну хоть с чего-то надо начинать. Проверить, где искать точку входа, пусть пока в том, что уже запущено, а потом можно уже и к основной проге переходить, логично?

вот вам архив:
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
Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 4 2015, 19:07
Сообщение #22


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Jury093 @ Aug 4 2015, 21:57) *
берете мой *.bin и скармливаете своему "бутлодырю", а там поглядим..

Т.к. он при запуске ничего вообще не делает, как я пойму, что он запустился, а не просто повис?
Go to the top of the page
 
+Quote Post
Jury093
сообщение Aug 4 2015, 19:11
Сообщение #23


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(mantech @ Aug 4 2015, 22:07) *
Т.к. он при запуске ничего вообще не делает, как я пойму, что он запустился, а не просто повис?

у вас что, "бутлодырь" партизан?
Цитата
Бутлодырь запускается, инициализирует уарт1

пусть после запуска бинарника и успешного возвращения управления скажет "гав!" в uart1..
ну а если завис, то "гав!" пусть не говорит sm.gif
Go to the top of the page
 
+Quote Post
_3m
сообщение Aug 4 2015, 19:49
Сообщение #24


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(mantech @ Aug 4 2015, 22:07) *
Т.к. он при запуске ничего вообще не делает, как я пойму, что он запустился, а не просто повис?

Через jtag.
Если совсем ничего не работает придется подключать тяжелую артиллерию.
Go to the top of the page
 
+Quote Post
AndrejM
сообщение Aug 5 2015, 05:17
Сообщение #25


Участник
*

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



mantech , а как вы сейчас (ну до того как "бутлодырем" занялись) грузите и запускаете приложение?
Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 5 2015, 06:21
Сообщение #26


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(_3m @ Aug 4 2015, 22:49) *
Через jtag.
Если совсем ничего не работает придется подключать тяжелую артиллерию.


А вы шутник, однако! Хоть на одной из плат на мх6 у стартера, вы жтаг видели? biggrin.gif

Цитата(Jury093 @ Aug 4 2015, 22:11) *
у вас что, "бутлодырь" партизан?

пусть после запуска бинарника и успешного возвращения управления скажет "гав!" в uart1..
ну а если завис, то "гав!" пусть не говорит sm.gif


А вот это дельное замечание, че-то не додумался об этом, спасибо! cool.gif
Go to the top of the page
 
+Quote Post
_3m
сообщение Aug 5 2015, 07:27
Сообщение #27


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(mantech @ Aug 5 2015, 09:21) *
А вы шутник, однако! Хоть на одной из плат на мх6 у стартера, вы жтаг видели?

Я не использую платы стартеркит именно по причине их системной убогости.
В первичных макетах всех изделий jtag закладываю в обязательном порядке именно на случай "когда ничего не работает". В последующих ревизиях его выкидываю.

без jtag вам нужно
* в бутолоадере осуществлять перехват всех исключений с выдачей диагностики
* тестовый бинарник создавать в режиме позиционно-независимого кода.

Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 5 2015, 14:32
Сообщение #28


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(_3m @ Aug 5 2015, 10:27) *
В первичных макетах всех изделий jtag закладываю в обязательном порядке именно на случай "когда ничего не работает". В последующих ревизиях его выкидываю.


Дело в том, что личности из стартеркита, принципиально признают только одну ось для этих процов - линукс, а там житаг нафиг не нужен.
Я взял бы другую плату, но не за их кусачие цены, да и в проектах заложены платы от стартера, они хоть и убогие в плане диагностики, но для серийки - самое то по ценам.

Цитата(AndrejM @ Aug 5 2015, 08:17) *
mantech , а как вы сейчас (ну до того как "бутлодырем" занялись) грузите и запускаете приложение?


Как и полагается, иару подсовываю dcd-записи, затем cfimager-ом прошиваю сд-карту и в путь biggrin.gif
Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 12 2015, 12:05
Сообщение #29


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Jury093 @ Aug 4 2015, 22:11) *
пусть после запуска бинарника и успешного возвращения управления скажет "гав!" в uart1..
ну а если завис, то "гав!" пусть не говорит sm.gif


К сожалению висит, причем намертво

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();
}



Что еще делать - пока без понятия...
Go to the top of the page
 
+Quote Post
_3m
сообщение Aug 13 2015, 05:50
Сообщение #30


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(mantech @ Aug 12 2015, 15:05) *
К сожалению висит, причем намертво

Ну я уже писал что надо перехватывать исключения.


Цитата
Процедура запуска -
...
Что еще делать - пока без понятия...

Давайте ассемблерный листинг процедуры запуска.
Попробуйте так: запускаемый бинарник пусть ничего не делает а сразу возвращается.
Бутлоадер переделайте чтобы после возврата из запускаемой функции он выдавал сообщение.
Если и так не заработает - ищите плату с работающим jtag.

Еще стоит вернуться к запуску из uboot.
Он может грузить бинарник даже через уарт. Ну в крайнем случае набьете десяток байт с консоли.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01514 секунд с 7
ELECTRONIX ©2004-2016