Перейти к содержанию
    

Бутлодырь на мх6 или любом кортекс А9

а к чему эти искания? IAR (если его об ином не просить) сгородит вам в elf формате , при загрузке image прочитали в заголовке адрес точки входа (e_entry) от туда и запускайте. или в чем то другом вопрос?

 

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

Мне все-таки интересно, почему встроенный бут не пускается? Стек и вектора прерываний, если не изменяет память, настраиваются уже после запуска проги по точке входа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

извиняюсь , наврал я вам . это я так хотел сделать , но не получилось . в итоге выходной файл 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

там reset vector

 

Т.е. я правильно понимаю, чтоб мне перезапустить собственный бутлодырь, который уже запущен (для проверки, конечно), я должен перейти в нем-же на адрес "__iar_program_start"?? Я пробовал, не стартует, причем перед этим блокировал прерывания, на всякий...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам собственный бутлоадер нужно перезапускать? я то понял что он у вас отработал и с запуском приложения проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам собственный бутлоадер нужно перезапускать?

 

Нет, конечно :biggrin: Я написал, что для теста...Ну хоть с чего-то надо начинать. Проверить, где искать точку входа, пусть пока в том, что уже запущено, а потом можно уже и к основной проге переходить, логично?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, конечно :biggrin: Я написал, что для теста...Ну хоть с чего-то надо начинать. Проверить, где искать точку входа, пусть пока в том, что уже запущено, а потом можно уже и к основной проге переходить, логично?

вот вам архив:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

берете мой *.bin и скармливаете своему "бутлодырю", а там поглядим..

Т.к. он при запуске ничего вообще не делает, как я пойму, что он запустился, а не просто повис?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.к. он при запуске ничего вообще не делает, как я пойму, что он запустился, а не просто повис?

у вас что, "бутлодырь" партизан?

Бутлодырь запускается, инициализирует уарт1

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

ну а если завис, то "гав!" пусть не говорит :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.к. он при запуске ничего вообще не делает, как я пойму, что он запустился, а не просто повис?

Через jtag.

Если совсем ничего не работает придется подключать тяжелую артиллерию.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

mantech , а как вы сейчас (ну до того как "бутлодырем" занялись) грузите и запускаете приложение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Через jtag.

Если совсем ничего не работает придется подключать тяжелую артиллерию.

 

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

 

у вас что, "бутлодырь" партизан?

 

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

ну а если завис, то "гав!" пусть не говорит :)

 

А вот это дельное замечание, че-то не додумался об этом, спасибо! B)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Я не использую платы стартеркит именно по причине их системной убогости.

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

 

без jtag вам нужно

* в бутолоадере осуществлять перехват всех исключений с выдачей диагностики

* тестовый бинарник создавать в режиме позиционно-независимого кода.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

 

mantech , а как вы сейчас (ну до того как "бутлодырем" занялись) грузите и запускаете приложение?

 

Как и полагается, иару подсовываю dcd-записи, затем cfimager-ом прошиваю сд-карту и в путь :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пусть после запуска бинарника и успешного возвращения управления скажет "гав!" в 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();
}

 

 

Что еще делать - пока без понятия...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

 

Процедура запуска -

...

Что еще делать - пока без понятия...

Давайте ассемблерный листинг процедуры запуска.

Попробуйте так: запускаемый бинарник пусть ничего не делает а сразу возвращается.

Бутлоадер переделайте чтобы после возврата из запускаемой функции он выдавал сообщение.

Если и так не заработает - ищите плату с работающим jtag.

 

Еще стоит вернуться к запуску из uboot.

Он может грузить бинарник даже через уарт. Ну в крайнем случае набьете десяток байт с консоли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...