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

 
 
> Опять про загрузчик..., Не получается передать управление.
EXeGLuMATOR
сообщение Apr 9 2008, 07:05
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



Перечитал все что нашел, по этой теме - так и не дошло в чем проблема.
Итак. Написан загрузчик - все пишется, все обновляется, но не получается передать управление на основную программу. Ремаплю-передаю вот так:
Код
    MEMMAP = 2;                    //Map vector table from RAM
        // Copy vectors table
    src = (unsigned long *)START_ADDR;
    dst = (unsigned long *)0x00000000;
        size = 0x40 / sizeof(*dst);
        do  { *dst++ = *src++; } while (--size);

    //Reset controller
    ((void(*)(void))(0x00000000))();


Смотрю в симуляторе, все ремапится, но после перехода на 0 получаю вот это:
*** error 65: access violation at 0x00000000 : no 'execute/read' permission

Загрузчик линкуется вот так:
Код
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x00000000 0x00020000  {   ; load region size_region
  ER_IROM1 0x00000000 0x00020000  { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x40000040 0x0000FFC0  { ; RW data
   .ANY (+RW +ZI)
  }
}


Основной модуль вот так:
Код
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x00006000 0x0001A000  {   ; load region size_region
  ER_IROM1 0x00006000 0x0001A000  { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x40000000 0x00010000  { ; RW data
   .ANY (+RW +ZI)
  }
}


В связи с этим вопросы:
1. Что не так делаю?
2. Как надо компилить-линковать основной модуль и загрузчик по расположению в памяти?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
EXeGLuMATOR
сообщение Apr 11 2008, 19:10
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



да, сорри забыл сказать. камень LPC2106. Память и вектора ремапятся нормально. А передача управления не происходит поскольку стоят неправильные адреса на векторах. Вопрос собсно как скомпилировать программу, чтобы вектора были рассчитаны на работу с 0 адреса, а сама прога с другого. Бьюсь уже сколько времени - все никак. Все компилится либо с 0 либо с адреса - соотв вектора все направлены в космос. Что-то я туплю походу где-то.
Go to the top of the page
 
+Quote Post
amw
сообщение Apr 11 2008, 19:51
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(EXeGLuMATOR @ Apr 11 2008, 22:10) *
да, сорри забыл сказать. камень LPC2106. Память и вектора ремапятся нормально. А передача управления не происходит поскольку стоят неправильные адреса на векторах. Вопрос собсно как скомпилировать программу, чтобы вектора были рассчитаны на работу с 0 адреса, а сама прога с другого. Бьюсь уже сколько времени - все никак. Все компилится либо с 0 либо с адреса - соотв вектора все направлены в космос. Что-то я туплю походу где-то.

Блин сколько уже сказано об этом.
1. Сделайте секцию с нулевого адреса.
2. Разместите в ней вектора.
3. Сделайте секцию с нужного Вам адреса.
4. Разместите в ней всю остальную программу.
5. Скомпилируйте.
6. Наслаждайтесь.
Пример для gcc см выше. С keil помочь не могу.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
EXeGLuMATOR
сообщение Apr 11 2008, 20:54
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



Цитата(amw @ Apr 11 2008, 23:51) *
Блин сколько уже сказано об этом.
1. Сделайте секцию с нулевого адреса.
2. Разместите в ней вектора.
3. Сделайте секцию с нужного Вам адреса.
4. Разместите в ней всю остальную программу.
5. Скомпилируйте.
6. Наслаждайтесь.
Пример для gcc см выше. С keil помочь не могу.


За пример спасибо. Только в кейле както все иначе выглядит совсем. Насколько я смог разобраться. В этом и проблема. Даже примеры на CARM и Real View - разные. синтаксис другой. Вот и мучаюсь.
Go to the top of the page
 
+Quote Post
amw
сообщение Apr 12 2008, 08:29
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(EXeGLuMATOR @ Apr 11 2008, 23:54) *
За пример спасибо. Только в кейле както все иначе выглядит совсем. Насколько я смог разобраться. В этом и проблема. Даже примеры на CARM и Real View - разные. синтаксис другой. Вот и мучаюсь.

Возмите простейшую програмку. Пусть она ничего не делает полезного, но маленькой проще разбираться.
И размещая функции и переменные в разных секциях, подвигайте эти секции в скрипте линкера по разным адресам. Смотрите на резуль дизассемблирования. Что и по каким адресам располагается уже после компиляции.

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


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
eml
сообщение Apr 17 2008, 09:44
Сообщение #6





Группа: Участник
Сообщений: 3
Регистрация: 21-07-07
Пользователь №: 29 278



Цитата(amw @ Apr 12 2008, 11:29) *
Возмите простейшую програмку. Пусть она ничего не делает полезного, но маленькой проще разбираться.
И размещая функции и переменные в разных секциях, подвигайте эти секции в скрипте линкера по разным адресам. Смотрите на резуль дизассемблирования. Что и по каким адресам располагается уже после компиляции.

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


Взял Ваш пример попытался скомпилить, вадало ошибку в скрипре линковшика
$ make
arm-elf-ld -Tboot-lpc2378.lds -nostdlib -o boot.elf crt0.o boot.o
arm-elf-ld:boot-lpc2378.lds:57: parse error
make: *** [boot.elf] Error 1
$ vi boot-lpc2378.lds
.ramvectors :
{
_ramvectors = .;
*(.ramvectors*)
. = _ramvectors + LENGTH(RAMVECTORS); // :57 ?
_eramvectors = .;
PROVIDE(eramvectors = .);
} > RAMVECTORS AT > FLASH

У вас собирался, что то не так сделал?
Go to the top of the page
 
+Quote Post
amw
сообщение Apr 17 2008, 16:54
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(eml @ Apr 17 2008, 12:44) *
У вас собирался, что то не так сделал?

Код
$ arm-elf-as -v
GNU assembler version 2.18 (arm-elf) using BFD version (GNU Binutils) 2.18
$ arm-elf-ld -v
GNU ld (GNU Binutils) 2.18
$ arm-elf-gcc -v
Using built-in specs.
Target: arm-elf
Configured with: /home/amw/devel/ARM/arm7tdmi/tools/src/gcc-4.2.2/configure --target=arm-elf --prefix=/usr/local/arm/arm-elf --enable-interwork --enable-multilib --with-newlib --with-headers=/usr/local/arm/arm-elf/arm-elf/include --with-gnu-ld --with-gnu-as --disable-nls --disable-shared --enable-languages=c
Thread model: single
gcc version 4.2.2

Может в этом?


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- EXeGLuMATOR   Опять про загрузчик...   Apr 9 2008, 07:05
- - aaarrr   Не знаю, как оформлены вектора в основной программ...   Apr 9 2008, 07:24
|- - EXeGLuMATOR   Цитата(aaarrr @ Apr 9 2008, 11:24) Не зна...   Apr 9 2008, 07:28
|- - aaarrr   Цитата(EXeGLuMATOR @ Apr 9 2008, 11:28) С...   Apr 9 2008, 07:41
|- - EXeGLuMATOR   Цитата(aaarrr @ Apr 9 2008, 11:41) После ...   Apr 9 2008, 07:51
|- - aaarrr   Цитата(EXeGLuMATOR @ Apr 9 2008, 11:51) С...   Apr 9 2008, 08:00
- - EXeGLuMATOR   То что лежит в 64 байтах от адреса 0х6000 переноси...   Apr 9 2008, 08:26
|- - aaarrr   Цитата(EXeGLuMATOR @ Apr 9 2008, 12:26) п...   Apr 9 2008, 08:32
- - EXeGLuMATOR   Может что не так скомпилировано? Не по тем адресам...   Apr 9 2008, 09:21
|- - aaarrr   Цитата(EXeGLuMATOR @ Apr 9 2008, 13:21) М...   Apr 9 2008, 09:28
- - EXeGLuMATOR   Тогда не понятно в чем проблема. Ладно-бы симуля...   Apr 9 2008, 10:01
- - EXeGLuMATOR   Глас вопиющего в пустыне. Все делают подобные про...   Apr 11 2008, 07:51
|- - Сергей Борщ   Цитата(EXeGLuMATOR @ Apr 11 2008, 10:51) ...   Apr 11 2008, 09:56
|- - amw   Цитата(EXeGLuMATOR @ Apr 11 2008, 10:51) ...   Apr 11 2008, 10:50
|- - Vitaliy_ARM   Цитата(eml @ Apr 17 2008, 13:44) У вас со...   May 2 2008, 12:33
|- - user234   Цитата(Vitaliy_ARM @ May 2 2008, 15:33) Т...   May 12 2008, 08:58
|- - amw   Цитата(user234 @ May 12 2008, 11:58) Здра...   May 12 2008, 09:24
|- - user234   Цитата(amw @ May 12 2008, 12:24) Вопрос с...   May 12 2008, 09:52
|- - amw   Цитата(user234 @ May 12 2008, 12:52) Спас...   May 12 2008, 09:57
|- - user234   Цитата(amw @ May 12 2008, 12:57) Возможно...   May 12 2008, 11:08
|- - amw   Цитата(user234 @ May 12 2008, 14:08) 1. ...   May 12 2008, 11:29
|- - user234   Цитата(amw @ May 12 2008, 14:29) А перед ...   May 12 2008, 12:48
- - aaarrr   Цитата(user234 @ May 12 2008, 16:48) Когд...   May 12 2008, 13:00
|- - user234   Спасибо.   May 12 2008, 13:39
|- - amw   Цитата(user234 @ May 12 2008, 16:39) Спас...   May 12 2008, 16:56
- - Altemir   Здравствуйте, уважаемые. Понимаю, что этот вопрос ...   May 24 2008, 11:50
|- - Сергей Борщ   Цитата(Altemir @ May 24 2008, 14:50) Но, ...   May 24 2008, 13:45
||- - Altemir   Всё это понятно. Вы с Argon-ом на: Сахаре обсужда...   May 24 2008, 14:01
|- - zltigo   Цитата(Altemir @ May 24 2008, 13:50) Есть...   May 24 2008, 14:10
|- - Altemir   Цитата(zltigo @ May 24 2008, 18:10) Ну за...   May 24 2008, 15:21
|- - zltigo   Цитата(Altemir @ May 24 2008, 17:21) 3. П...   May 24 2008, 16:21
|- - Altemir   ЦитатаНет. Читаем комментарий: IRQ "Jump dir...   May 24 2008, 17:01
|- - zltigo   Цитата(Altemir @ May 24 2008, 19:01) Везд...   May 24 2008, 17:51
|- - Altemir   Цитата(zltigo @ May 24 2008, 21:51) Что т...   May 24 2008, 18:06
|- - Сергей Борщ   Цитата(Altemir @ May 24 2008, 21:06) 3. О...   May 24 2008, 19:38
|- - Altemir   Цитата(Сергей Борщ @ May 24 2008, 23:38) ...   May 24 2008, 19:53
|- - Altemir   Кстати, порывшись в опциях XLINK, обнаружил возмож...   May 24 2008, 21:15
- - Altemir   Всё сделал. Всё работает. Никакой правки и копания...   May 26 2008, 19:06
|- - zltigo   Цитата(Altemir @ May 26 2008, 21:06) Всё ...   May 26 2008, 19:31
|- - Altemir   Цитата(zltigo @ May 26 2008, 23:31) Сдела...   May 26 2008, 19:36
- - vesago   Хочу разобраться с ремапом основного приложения в ...   Mar 23 2009, 12:03


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:04
Рейтинг@Mail.ru


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