Jump to content

    

Бутлодер для Кинетис

2 минуты назад, Integro сказал:

Кроме того нужно не забывать что приложение может быть собрано как PIC(Program Intended Code), в этом случае не нужна перелинковка, а загрузчик может положить его туда куда считает нужным.

Что такое "Intended"? Про "indepedent" - знаю. Если Вы имели в виду всё-таки последнее, то: 

А откуда загрузчик узнает о том, что оно так написано? А если оно не так написано, а он его куда-то зафигачит не туда?

 

Share this post


Link to post
Share on other sites
8 minutes ago, jcxz said:

Что такое "Intended"? Про "indepedent" - знаю.

Спасибо, поправил,  сложное слово, Вы так же в нем допустили ошибку :)
 

8 minutes ago, jcxz said:

А откуда загрузчик узнает о том, что оно так написано? А если оно не так написано, а он его куда-то зафигачит не туда? 

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

Share this post


Link to post
Share on other sites
Just now, jcxz said:

А откуда загрузчик знает где у загружаемой программы находится таблица векторов? Вобщем случае она может быть и не в начале образа. И их может быть несколько разных.

Всё-таки - VTOR лучше явно устанавливать в самой программе.

Хм... А верно ведь. Но, как правило, в своих проектах я изначально знаю, как будет построена архитектура загрузчика и приложения, а также их взаимодействие. С другой стороны, никто не мешает после настройки в загрузчике перенастроить смещение. Тут палка о двух концах - с какой стороны не ломай, исходов будет много, и возможности разные =)

Edited by Arlleex

Share this post


Link to post
Share on other sites
2 minutes ago, Arlleex said:

Хм... А верно ведь.

Адрес таблицы по умолчанию Вы знаете :), если приложение хочет переложить таблицу в RAM это уже проблемы приложения.
 

Share this post


Link to post
Share on other sites
20 минут назад, jcxz сказал:

А откуда загрузчик знает где у загружаемой программы находится таблица векторов? Вобщем случае она может быть и не в начале образа. И их может быть несколько разных.

Всё-таки - VTOR лучше явно устанавливать в самой программе.

Как и микроконтроллер, если такая хитрая прошивка будет слинкована без бутлоадера. Очевидно такие прошивки сами настроят что надо, иначе не будут работать совсем. Считать что таблица векторов в начале - размуное умолчание, которое будет работать с прошивками которые "ленятся" устанавливать vtor сами. А еще на младших кортексах нет vtor, но часто есть memremap, которым пускай рулит бутлоадер заточеный на конкретный камень.

Share this post


Link to post
Share on other sites
2 минуты назад, Integro сказал:

Адрес таблицы по умолчанию Вы знаете :), если приложение хочет переложить таблицу в RAM это уже проблемы приложения.

Причём тут RAM не RAM? Я говорил, что в приложении может быть несколько таблиц векторов. В образе прошивки, а не в RAM.

Share this post


Link to post
Share on other sites
3 minutes ago, jcxz said:

Причём тут RAM не RAM? Я говорил, что в приложении может быть несколько таблиц векторов. В образе прошивки, а не в RAM.

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

Share this post


Link to post
Share on other sites
7 минут назад, Kabdim сказал:

Как и микроконтроллер, если такая хитрая прошивка будет слинкована без бутлоадера.

Ещё раз повторю: Считаю, что если что-то слинковано (или ещё как-то сделано), неправильно, то правильный бутлоадер такое вообще не должен запускать или прошивать. Потому что он не может знать, что ещё внутри программы завязано на адреса, и попытавшись что-то скорректировать по своему разумению, приведёт к зависанию устройства или превращению его в кирпич.

Бутлоадер должен принимать только заранее предусмотренные форматы прошивок, жёстко проверять их и отвергать все, хоть чем-то неподходящие.

Share this post


Link to post
Share on other sites
2 minutes ago, jcxz said:

Ещё раз повторю: Считаю, что если что слинковано или ещё как-то сделано, неправильно, то правильный бутлоадер такое вообще не должен запускать или прошивать. Потому что он не может знать, что ещё внутри программы завязано на адреса, и попытавшись что-то скорректировать по своему разумению, приведёт к зависанию устройства или превращению его в кирпич.

Бутлоадер должен принимать только заранее предусмотренные форматы прошивок, жёстко проверять их и отвергать все, хоть чем-то неподходящие. 

Из хотя из это логики, бутлодер должен найти в коде приложения инcтрукцию установки верного VTOR?

Share this post


Link to post
Share on other sites
12 минут назад, Integro сказал:

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

У меня есть прошивки, где в начале лежит таблица своего формата. По которой загрузчик проверяет прошивку. И адрес старта указан в этой таблице. А приложение может быть вообще скомпилировано для работы в ОЗУ, и адрес старта указывать на точку сразу после таблицы. В этой точке находится небольшой код (он как раз - position independent), который просто копирует образ в ОЗУ. А таблица векторов находится где-то внутри образа, по такому адресу который будет выровнен на 256 после копирования в ОЗУ, но не выровнен в образе.

8 минут назад, Integro сказал:

Из хотя из это логики, бутлодер должен найти в коде приложения инcтрукцию установки верного VTOR?

Нет. Только точку старта. В общем случае конечно может быть таблица в начале и он может оттуда читать адрес старта, но не обязательно.

К тому же при такой компоновке бывают проблемы с генерацией CRC32 для всего образа прошивки для некоторых МК в IAR: для МК LPC невозможно охватить CRC начальную часть таблицы векторов находящейся в начале образа - CRC не сходится никак.

Share this post


Link to post
Share on other sites
22 minutes ago, jcxz said:

У меня есть прошивки, где в начале лежит таблица своего формата. По которой загрузчик проверяет прошивку. И адрес старта указан в этой таблице. А приложение может быть вообще скомпилировано для работы в ОЗУ, и адрес старта указывать на точку сразу после таблицы. В этой точке находится небольшой код (он как раз - position independent), который просто копирует образ в ОЗУ. А таблица векторов находится где-то внутри образа, по такому адресу который будет выровнен на 256 после копирования в ОЗУ, но не выровнен в образе.

Вот, о чем я и говорю!) Все зависит от целей и задачи! Для вашего примера кто-то мог реализовать распаковку приложения в ОЗУ из самого приложения(в этом случае система могла быть еще гибче), вы же это сделали в загрузчике.
В любом случае, сразу после входа в main Вы уверены в том что стек настроен, и вектор таблицы смотрит на вашу дефолтную таблицу (на ту где лежит ресет вектор). И было бы любезно :) с точки зрения бутлодера подготовить систему к такому состоянию. Вас ведь не смущает что загрузчик устанавливает стек поинтер?

Share this post


Link to post
Share on other sites
7 минут назад, Integro сказал:

В любом случае, сразу после входа в main Вы уверены в том что стек настроен, и вектор таблицы смотрит на вашу дефолтную таблицу (на ту где лежит ресет вектор). И было бы любезно :) с точки зрения бутлодера подготовить систему к такому состоянию.

Вообще-то программа начинается задолго до main(). И VTOR у меня устанавливается задолго до main().

 

Цитата

Вас ведь не смущает что загрузчик устанавливает стек поинтер?

Причём тут? загрузчик и основная программа многократно устанавливают оба SP. И SP у меня также устанавливается в самой запускаемой программе в самом её начале. Можно конечно его и в бутлоадере установить, но необязательно.

Share this post


Link to post
Share on other sites
1 hour ago, jcxz said:

Что такое "Intended"? Про "indepedent" - знаю. Если Вы имели в виду всё-таки последнее, то: 

 

Лингвисты, хех. Вообще-то "position-independent code" :-)))

 

И вообще, не путайте ТС, он и сам легко запутается :-)

Share this post


Link to post
Share on other sites
1 час назад, jcxz сказал:

Нет. Только точку старта. В общем случае конечно может быть таблица в начале и он может оттуда читать адрес старта, но не обязательно.

Ну хорошо начнем с истоков, в какой таблице по референс мануалу арма лежит адрес точки старта?

Share this post


Link to post
Share on other sites
8 минут назад, Kabdim сказал:

Ну хорошо начнем с истоков, в какой таблице по референс мануалу арма лежит адрес точки старта?

Точки старта чего? И при чём ту референс мануал ARM? Прочитайте мои сообщения.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this