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

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

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

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

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

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

 

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


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

8 minutes ago, jcxz said:

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

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

8 minutes ago, jcxz said:

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

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

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


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

Just now, jcxz said:

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

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

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

Изменено пользователем Arlleex

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


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

2 minutes ago, Arlleex said:

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

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

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


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

20 минут назад, jcxz сказал:

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

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

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

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


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

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

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

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

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


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

3 minutes ago, jcxz said:

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

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

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


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

7 минут назад, Kabdim сказал:

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

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

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

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


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

2 minutes ago, jcxz said:

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

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

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

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


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

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

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

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

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

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

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

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

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


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

22 minutes ago, jcxz said:

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

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

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


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

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

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

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

 

Цитата

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

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

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


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

1 hour ago, jcxz said:

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

 

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

 

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

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


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

1 час назад, jcxz сказал:

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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