Полная версия этой страницы:
remap s3c2440
valenok
Jun 5 2011, 20:15
Почитав форум понял, что традиционно для работы прерываний выделяют область памяти в RAM под вектора прерываний, переписывают туда таблицу, далее (чтобы отобразить адрес начала SDRAM в 0х0) делают ремап, конфигурируя соответствующий регистр процессора (в общем случае MC_BASE). В описании процессора s3c2440 я не нашел необходимого регистра, есть аналог, в котором конфигурируют кучу всего, типа разрядности шины, таймингов и пр., но только не remap. Таким образом, не понятно, как организовать ремап для указанного процессора. Может, есть другие местоды ремапа, помимо описанного?
AlexandrY
Jun 5 2011, 20:42
Цитата(valenok @ Jun 5 2011, 23:15)

Почитав форум понял, что традиционно для работы прерываний выделяют область памяти в RAM под вектора прерываний, переписывают туда таблицу, далее (чтобы отобразить адрес начала SDRAM в 0х0) делают ремап, конфигурируя соответствующий регистр процессора (в общем случае MC_BASE). В описании процессора s3c2440 я не нашел необходимого регистра, есть аналог, в котором конфигурируют кучу всего, типа разрядности шины, таймингов и пр., но только не remap. Таким образом, не понятно, как организовать ремап для указанного процессора. Может, есть другие местоды ремапа, помимо описанного?
У ARM-ов ремап может быть и в верхние адреса. Это устанавливается кажется в 14-ом сопроцессоре. Что там у вас в верхних адресах?
У 2440 имеется MMU, с его помощью можно расположить таблицу векторов из произвольной физической страницы на любой из двух возможных позиций - 0x00000000 и 0xffff0000 (последнее выбирается битом V регистра c1 cp15).
Отдельного механизма ремапинга может не существовать за ненадобностью.
valenok
Jun 6 2011, 18:07
Спасибо, господа, видимо, слона-то я и не приметил. Читал про MMU и 15-ый сопроцессор, сложилось впечатление, что эти штуки только для ОС актуальны, прочту более внимательно.
Чтобы не плодить тем, так-как вопрос похожий, собственно а как отлаживать приложение в RAM, ведь в рам заливаем по адресу 0x30000000
И по тому же адресу лежит таблица прерываний и соответственно как только у нас будет прерывание произойдет прыжок по 0 адресу а там например режит старая прошивка(или вобще другая прошивка) и получится фиг знает что.
Или я чегото не понимаю?
0 логический (с которым оперирует ядро) совсем не обязательно является 0 физическим.
Ну и куда копать чтобы ядро считало адрес 0x30000000 логическим 0?
Но вы же писали что спомощью MMU можно только замапить либо в 0x00000000 либо в 0xffff0000
Цитата
У 2440 имеется MMU, с его помощью можно расположить таблицу векторов из произвольной физической страницы на любой из двух возможных позиций - 0x00000000 и 0xffff0000 (последнее выбирается битом V регистра c1 cp15)
Нет, такого я не писал.
0x00000000 и 0xffff0000 - логические адреса, которые видит и по которым ходит ядро. С помощью MMU можно "замапить" тот же 0x30000000 в 0 или в 0xffff0000 или куда угодно еще.
Спасибо большое. Последний нубский вопрос.
Допустим стоит задача отлаживать u-boot который я гружу в рам. Я правильно понимаю что моя последовательность дествия такая(допустим использую OpenOCD хотя не принципиально что). То мои действия такие.
Я Инициализирую SDRAM и иницализирую MMU и ремаплю таблицу прерываний. Потом заливаю в оперативку u-boot и передаю ему управление.
И все должно быть ок.
С ядром линукса тоже все будет ок? Он же MMU сам настраивает, как тогда с ним быть?
Цитата(a1ien @ Mar 2 2012, 15:23)

Я Инициализирую SDRAM и иницализирую MMU и ремаплю таблицу прерываний. Потом заливаю в оперативку u-boot и передаю ему управление.
И все должно быть ок.
С ядром линукса тоже все будет ок? Он же MMU сам настраивает, как тогда с ним быть?
Можно не трогать MMU и не использовать прерывания в u-boot - он вполне спокойно обходится и без них.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.