|
Опять про загрузчик..., Не получается передать управление. |
|
|
|
Apr 9 2008, 07:05
|
Частый гость
 
Группа: Свой
Сообщений: 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. Как надо компилить-линковать основной модуль и загрузчик по расположению в памяти?
|
|
|
|
|
 |
Ответов
|
Apr 11 2008, 19:51
|
Знающий
   
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Apr 11 2008, 20:54
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Цитата(amw @ Apr 11 2008, 23:51)  Блин сколько уже сказано об этом. 1. Сделайте секцию с нулевого адреса. 2. Разместите в ней вектора. 3. Сделайте секцию с нужного Вам адреса. 4. Разместите в ней всю остальную программу. 5. Скомпилируйте. 6. Наслаждайтесь. Пример для gcc см выше. С keil помочь не могу. За пример спасибо. Только в кейле както все иначе выглядит совсем. Насколько я смог разобраться. В этом и проблема. Даже примеры на CARM и Real View - разные. синтаксис другой. Вот и мучаюсь.
|
|
|
|
|
Apr 12 2008, 08:29
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(EXeGLuMATOR @ Apr 11 2008, 23:54)  За пример спасибо. Только в кейле както все иначе выглядит совсем. Насколько я смог разобраться. В этом и проблема. Даже примеры на CARM и Real View - разные. синтаксис другой. Вот и мучаюсь. Возмите простейшую програмку. Пусть она ничего не делает полезного, но маленькой проще разбираться. И размещая функции и переменные в разных секциях, подвигайте эти секции в скрипте линкера по разным адресам. Смотрите на резуль дизассемблирования. Что и по каким адресам располагается уже после компиляции. Стартап придется переписывать. По крайней мере для второй программы, которую должен запускать бутлоадер. И переписать так, чтоб не было конфликтующих действий в разных стартапах.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Apr 17 2008, 09:44
|
Группа: Участник
Сообщений: 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 У вас собирался, что то не так сделал?
|
|
|
|
|
Apr 17 2008, 16:54
|
Знающий
   
Группа: Свой
Сообщений: 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.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|