Здравствуйте!
Как в Linux прочитать регистр процессора?
Только через ассемблерную вставку или есть утилиты?
Пётр.
прочитать регистр
Как в Linux прочитать регистр процессора?
Только через ассемблерную вставку или есть утилиты?
зачем вообще такие утилиты могут понадобится о_О?
насчет утилит не знаю, но я бы начал с поиска в /proc и /sys
насчет утилит не знаю, но я бы начал с поиска в /proc и /sys
Уже пробовал, но как-то с ходу не нашёл.
Пётр.
Будет больше пользы, если вы скажете какую информацию вы хотите получить. Потому что тем способом, что вы собираетесь ииспользовать, вы ничего интересного не получите.
Будет больше пользы, если вы скажете какую информацию вы хотите получить. Потому что тем способом, что вы собираетесь ииспользовать, вы ничего интересного не получите.
Сейчас не могу сказать, для этого мне надо подробнее посмотреть описание
к процессорному модулю с шиной Compact PCI, содержащему этот процессор.
Это компьютер в форме модуля, он вставляется в стойку.
Но только что я полистал его описание в pdf, кажется, мне надо будет считать регистры
этого модуля, а не асмого процессора, я это уточню.
А с помощью команды asm пользовательская программа может считать
регистр процессора?
Пётр.
В этом блоке есть специфичные для него регистры, их адреса отображаются на
0x80-0x85 и 0x280-0x293.
Пётр.
В этом блоке есть специфичные для него регистры, их адреса отображаются на
0x80-0x85 и 0x280-0x293.
Пётр.
Так регистры или адреса на шине? Это не одно и то же.
Адреса можно отобразить в память программы с помощью mmap(), если, конечно, есть права и ядро разрешит. Есть ещё /dev/mem, /dev/kmem и /dev/port, правда я не знаю, что туда нынче отображается.
[quote=Peter]В этом блоке есть специфичные для него регистры, их адреса отображаются на
0x80-0x85 и 0x280-0x293.
Пётр.
Так регистры или адреса на шине? Это не одно и то же.
Адреса можно отобразить в память программы с помощью mmap(), если, конечно, есть права и ядро разрешит. Есть ещё /dev/mem, /dev/kmem и /dev/port, правда я не знаю, что туда нынче отображается.[/quote]
Это адреса, из таблицы "I/O Address Map".
Пётр.
почеу нет?через ассемблерную вставку
зачем тут утилиты, если можно просто выполнить команду?или есть утилиты?
да. GNU GCC умеет вставки в C/C++ коде. Только синтаксис уродский.А с помощью команды asm пользовательская программа может считать
регистр процессора?
зачем тут утилиты, если можно просто выполнить команду?
[quote="Peter"]или есть утилиты?
[/quote]
Так для этого надо ещё читать её описание. Я, например, никогда ею не пользовался.
да. GNU GCC умеет вставки в C/C++ коде. Только синтаксис уродский.А с помощью команды asm пользовательская программа может считать
регистр процессора?
Я имел в виду, что есть ли у пользовательской программы права на чтение регистров.
М.б., для этого требуется root.
Пётр.
Это адреса, из таблицы "I/O Address Map"
Тогда и ассемблер не нужен. Открываете /dev/port, позиционируете на нужное смещение и читаете с помощью read()
Для прямого обращения надо сначала разрешить себе доступ к портам с помощью ioperm()
[quote=Peter]Это адреса, из таблицы "I/O Address Map"
Тогда и ассемблер не нужен. Открываете /dev/port, позиционируете на нужное смещение и читаете с помощью read()
Для прямого обращения надо сначала разрешить себе доступ к портам с помощью ioperm()[/quote]
Попробовал, работает, от root'а. Но пробовал не на этом модуле, а на обычном IBM PC.
А inb() не даст ли то же самое?
Пётр.
Действительно, /dev/port читают и read() и inb().
Пётр.