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

Watchpoint-ы на Microblaze c MMU

Отлаживаю драйвер для Linux на Microblaze. Начал использовать аппаратные Watchpoints, включил поддержку 4 breakpoints и 2 Watchpoins. Для отладки использую XMD+GDB. При установке watchpoint срабатывания почему-то не происходит. Возможно кто-то сталкивался.

 

Изменено пользователем Олег Гаврильченко

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


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

2 Олег Гаврильченко

вы пробовали на простых conditions который 100% должны пройти ?

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


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

2 Олег Гаврильченко

вы пробовали на простых conditions который 100% должны пройти ?

Простите, я не понял, что значить простые conditions? Я ставлю watchpoint на адрес, (даже проверяю в xmd что она стоит на правильном адресе), и в программе программе происходит запись по этому адресу. Но Watchpoint почему-то не срабатывает. Если я затем пытаюсь остановить MCU в XMD командой stop, то выдаются сообщения об ошибках непонятных:

 

Error:

Microblaze stalled on a blocking instruction or invalid bus access <некий адрес>

 

Или один раз даже когда я ввел в XMD команду stop, MCU не остановился(!), но мне 3 раза было выдано такое сообщение(я точно сообщение не запомнил):

ERROR:

Exception TLB data EAR=<адрес на который я ставил Watchpoint>.

 

Может быть дело в каких-то неудовлетворенных времянных ограничениях? Формально они все проходят, но у меня на тактовом сигнале MCU минимальное Setup time 0,035 нс. Я на одном из форумов читал, что подобные ошибки могут происходить из за времянок. Но там была только первая ошибка.

Или может я не до конца понимаю, как работают Watchpoints при включенном MMU.

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


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

Вы учитываете что Addr должен быть virtual?

Да, если я правильно понимаю, то watchpoint ставиться именно на виртуальный адрес, не на физический?

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


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

2 Олег Гаврильченко

Именно {Microblaze c MMU} не пользовал, но исходя из того что видел у армов - breakpoint-ы идут по virtual.

Так же возможен вариант работы с cache.

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


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

2 Олег Гаврильченко

Именно {Microblaze c MMU} не пользовал, но исходя из того что видел у армов - breakpoint-ы идут по virtual.

Так же возможен вариант работы с cache.

Breakpoint-ы работают нормально, ставятся на виртуальный адрес и срабатывают. Проблемы именно с Watchpoints возникают.

Кэш 1-го уровня(внутри MCU) включен 32k, write-back и на иструкции и на данные. Проблемы могут быть как-то связаны с кэшем?

Изменено пользователем Олег Гаврильченко

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


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

Вот это

ERROR:

Exception TLB data EAR=<адрес на который я ставил Watchpoint>.

говорит что у вас проблемы именно с Addr -> EAR== Exception Address Register

Исходя из того что помню - если есть обращение к Addr но мы его не нашли в таблице, мы генерируем exception.

 

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


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

Вот это

 

говорит что у вас проблемы именно с Addr -> EAR== Exception Address Register

Исходя из того что помню - если есть обращение к Addr но мы его не нашли в таблице, мы генерируем exception.

А адрес страницы памяти в которой находиться адрес на которую я ставил Watchpoint обязательно должен быть в TLB?

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


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

2 Олег Гаврильченко

Обязательно должен быть TLB entry чтобы оттранслировать.

НО, я тут взглянул одним глазом в MicroBlaze Processor Reference Guide чтобы как то прояснить для себя ситуацию

({Microblaze c MMU}-зверюшка для меня новая):

Chapter 2: MicroBlaze Architecture, а именно Exception Address Register (EAR)

И думаю что ваш случай:

- A data TLB miss exception that specifies the (virtual) effective address accessed

Судя по первому сообщению.

Проверьте ещё Exception Status Register (ESR) и если это подтвердится, тогда у вас такой case:

..If the requested data is not found in TLB, a TLB miss (similar as cache miss) is generated, followed by the page table translation and TLB update operation.

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


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

2 Олег Гаврильченко

Обязательно должен быть TLB entry чтобы оттранслировать.

НО, я тут взглянул одним глазом в MicroBlaze Processor Reference Guide чтобы как то прояснить для себя ситуацию

({Microblaze c MMU}-зверюшка для меня новая):

Chapter 2: MicroBlaze Architecture, а именно Exception Address Register (EAR)

И думаю что ваш случай:

- A data TLB miss exception that specifies the (virtual) effective address accessed

Судя по первому сообщению.

Проверьте ещё Exception Status Register (ESR) и если это подтвердится, тогда у вас такой case:

Вы уверены, что адрес страницы с тем адресом на который я поставил Watchpoint должен быть в TLB? У меня ядро Linux, оно постоянно переписывает TLB, и исключение TLB miss exception обрабатывает сама. И зачем все таки необходимо иметь в TLB адрес этой страницы? Ведь нужно только остановить процессор при попытке записи туда.

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


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

2 Олег Гаврильченко

исходил из вот этого:

http://i.stack.imgur.com/MlEIQ.jpg

Глобально, я вам пытаюсь сказать что скорее всего проблема в том что он не может оттраслировать нормально ваш virtual Addr и потому всегда сваливается в exception и потому по факту тригирование события не происходит.

 

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


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

Но TLB полностью контролируется ОС Linux, я не могу заставить ее хранить адрес выбранной страницы данных в TLB. Получается, не могу пользоваться Watchpoints..

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


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

2 Олег Гаврильченко

в принципе вам и не надо её насиловать,

проверьте какой то case где где вы точно можете увидеть выходящий request..

 

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


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

2 Олег Гаврильченко

в принципе вам и не надо её насиловать,

проверьте какой то case где где вы точно можете увидеть выходящий request..

 

Простите, я не понял, что нужно проверить? Я отлаживаю очень тяжелый случай в драйвере Linux. Очень редко происходит ситуация, что кто-то перезависывает одну из переменных. Но кто это делает не понятно, поэтому мне и нужен watchpoint.

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


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

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

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

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

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

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

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

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

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

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