Reffum2 0 24 октября, 2016 Опубликовано 24 октября, 2016 (изменено) · Жалоба Отлаживаю драйвер для Linux на Microblaze. Начал использовать аппаратные Watchpoints, включил поддержку 4 breakpoints и 2 Watchpoins. Для отладки использую XMD+GDB. При установке watchpoint срабатывания почему-то не происходит. Возможно кто-то сталкивался. Изменено 24 октября, 2016 пользователем Олег Гаврильченко Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба 2 Олег Гаврильченко вы пробовали на простых conditions который 100% должны пройти ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reffum2 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Вы учитываете что Addr должен быть virtual? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reffum2 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Вы учитываете что Addr должен быть virtual? Да, если я правильно понимаю, то watchpoint ставиться именно на виртуальный адрес, не на физический? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба 2 Олег Гаврильченко Именно {Microblaze c MMU} не пользовал, но исходя из того что видел у армов - breakpoint-ы идут по virtual. Так же возможен вариант работы с cache. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reffum2 0 25 октября, 2016 Опубликовано 25 октября, 2016 (изменено) · Жалоба 2 Олег Гаврильченко Именно {Microblaze c MMU} не пользовал, но исходя из того что видел у армов - breakpoint-ы идут по virtual. Так же возможен вариант работы с cache. Breakpoint-ы работают нормально, ставятся на виртуальный адрес и срабатывают. Проблемы именно с Watchpoints возникают. Кэш 1-го уровня(внутри MCU) включен 32k, write-back и на иструкции и на данные. Проблемы могут быть как-то связаны с кэшем? Изменено 25 октября, 2016 пользователем Олег Гаврильченко Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Вот это ERROR: Exception TLB data EAR=<адрес на который я ставил Watchpoint>. говорит что у вас проблемы именно с Addr -> EAR== Exception Address Register Исходя из того что помню - если есть обращение к Addr но мы его не нашли в таблице, мы генерируем exception. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reffum2 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Вот это говорит что у вас проблемы именно с Addr -> EAR== Exception Address Register Исходя из того что помню - если есть обращение к Addr но мы его не нашли в таблице, мы генерируем exception. А адрес страницы памяти в которой находиться адрес на которую я ставил Watchpoint обязательно должен быть в TLB? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reffum2 0 26 октября, 2016 Опубликовано 26 октября, 2016 · Жалоба 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 адрес этой страницы? Ведь нужно только остановить процессор при попытке записи туда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 26 октября, 2016 Опубликовано 26 октября, 2016 · Жалоба 2 Олег Гаврильченко исходил из вот этого: http://i.stack.imgur.com/MlEIQ.jpg Глобально, я вам пытаюсь сказать что скорее всего проблема в том что он не может оттраслировать нормально ваш virtual Addr и потому всегда сваливается в exception и потому по факту тригирование события не происходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reffum2 0 27 октября, 2016 Опубликовано 27 октября, 2016 · Жалоба Но TLB полностью контролируется ОС Linux, я не могу заставить ее хранить адрес выбранной страницы данных в TLB. Получается, не могу пользоваться Watchpoints.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 27 октября, 2016 Опубликовано 27 октября, 2016 · Жалоба 2 Олег Гаврильченко в принципе вам и не надо её насиловать, проверьте какой то case где где вы точно можете увидеть выходящий request.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reffum2 0 27 октября, 2016 Опубликовано 27 октября, 2016 · Жалоба 2 Олег Гаврильченко в принципе вам и не надо её насиловать, проверьте какой то case где где вы точно можете увидеть выходящий request.. Простите, я не понял, что нужно проверить? Я отлаживаю очень тяжелый случай в драйвере Linux. Очень редко происходит ситуация, что кто-то перезависывает одну из переменных. Но кто это делает не понятно, поэтому мне и нужен watchpoint. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться