griabig 0 23 апреля, 2013 Опубликовано 23 апреля, 2013 · Жалоба Добрый день. Имеется отладочная плата на базе AM3517 (Cortex-A8) с запущенным Linux на базе ядра 2.6.32. Пытаюсь разобраться с отладкой ядра с помощью встроенного отладчика kgdb. Ядро собрано с отладочной информацией и поддержкой отладчика KGDB. С компьютера по последовательному порту подключаюсь к плате с помощью gdb. Установка точек останова, просмотр глобальных переменных ядра работают без проблем. Однако столнулся с тем, что никак не удается прочитать значения регистров UART. Допустим, пытаемся прочитать регистр MCR UART3. В ядре информация о UART3 находится в следующей структуре. static struct plat_serial8250_port serial_platform_data2[] = { { .mapbase = OMAP_UART3_BASE, .irq = 74, .iotype = UPIO_MEM, .regshift = 2, mapbase - это физический адрес из Technical Reference Manual, для UART3 он будет 0x49020000. Через gdb можем проверить содержимое этой структуры и попробовать обратиться к регистру MCR, находящемся по смещению 0x10. (gdb) p/x serial_platform_data2.mapbase $34 = 0x49020000 (gdb) p/x serial_platform_data2.membase $35 = 0xfb020000 (gdb) x serial_platform_data2.membase+0x10 0xfb020000: Cannot access memory at address 0xfb020000 (gdb) x serial_platform_data2.mapbase+0x10 0x49020000: Cannot access memory at address 0x49020000 Поле membase содержит виртуальный базовый адрес получаемый после вызова ioremap(). Насколько я понимаю, что "рабочими" адресами для ядра являются все-таки виртуальные. Однако ни по физическому, ни по виртуальному адресу прочитать не удалось. В чем проблема? Заранее спасибо за помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться