LinuxForum.Fans
Тема

прочитать регистр

Автор: Peter 14 сообщений 2152 просмотров
17.12.2014 17:16 #405615

Здравствуйте!

Как в Linux прочитать регистр процессора?
Только через ассемблерную вставку или есть утилиты?

Пётр.

17.12.2014 21:40 #405651
"Peter" написал:
Как в Linux прочитать регистр процессора?
Только через ассемблерную вставку или есть утилиты?

зачем вообще такие утилиты могут понадобится о_О?

17.12.2014 22:07 #405657

насчет утилит не знаю, но я бы начал с поиска в /proc и /sys

17.12.2014 23:02 #405661
dyasny написал:
насчет утилит не знаю, но я бы начал с поиска в /proc и /sys

Уже пробовал, но как-то с ходу не нашёл.

Пётр.

17.12.2014 23:07 #405662

Будет больше пользы, если вы скажете какую информацию вы хотите получить. Потому что тем способом, что вы собираетесь ииспользовать, вы ничего интересного не получите.

18.12.2014 00:01 #405666
s.xbatob написал:
Будет больше пользы, если вы скажете какую информацию вы хотите получить. Потому что тем способом, что вы собираетесь ииспользовать, вы ничего интересного не получите.

Сейчас не могу сказать, для этого мне надо подробнее посмотреть описание
к процессорному модулю с шиной Compact PCI, содержащему этот процессор.
Это компьютер в форме модуля, он вставляется в стойку.
Но только что я полистал его описание в pdf, кажется, мне надо будет считать регистры
этого модуля, а не асмого процессора, я это уточню.

А с помощью команды asm пользовательская программа может считать
регистр процессора?

Пётр.

18.12.2014 10:37 #405695

В этом блоке есть специфичные для него регистры, их адреса отображаются на
0x80-0x85 и 0x280-0x293.

Пётр.

18.12.2014 12:09 #405705
Peter написал:
В этом блоке есть специфичные для него регистры, их адреса отображаются на
0x80-0x85 и 0x280-0x293.

Пётр.

Так регистры или адреса на шине? Это не одно и то же.
Адреса можно отобразить в память программы с помощью mmap(), если, конечно, есть права и ядро разрешит. Есть ещё /dev/mem, /dev/kmem и /dev/port, правда я не знаю, что туда нынче отображается.

18.12.2014 14:02 #405719
s.xbatob написал:
[quote=Peter]В этом блоке есть специфичные для него регистры, их адреса отображаются на
0x80-0x85 и 0x280-0x293.

Пётр.

Так регистры или адреса на шине? Это не одно и то же.
Адреса можно отобразить в память программы с помощью mmap(), если, конечно, есть права и ядро разрешит. Есть ещё /dev/mem, /dev/kmem и /dev/port, правда я не знаю, что туда нынче отображается.[/quote]
Это адреса, из таблицы "I/O Address Map".

Пётр.

18.12.2014 14:54 #405731

"Peter" написал:
через ассемблерную вставку
почеу нет?

"Peter" написал:
или есть утилиты?
зачем тут утилиты, если можно просто выполнить команду?

"Peter" написал:
А с помощью команды asm пользовательская программа может считать
регистр процессора?
да. GNU GCC умеет вставки в C/C++ коде. Только синтаксис уродский.
18.12.2014 15:07 #405734
drBatty написал:

[quote="Peter"]или есть утилиты?
зачем тут утилиты, если можно просто выполнить команду?
[/quote]
Так для этого надо ещё читать её описание. Я, например, никогда ею не пользовался.

"Peter" написал:
А с помощью команды asm пользовательская программа может считать
регистр процессора?
да. GNU GCC умеет вставки в C/C++ коде. Только синтаксис уродский.

Я имел в виду, что есть ли у пользовательской программы права на чтение регистров.
М.б., для этого требуется root.

Пётр.

18.12.2014 15:35 #405736
Peter написал:
Это адреса, из таблицы "I/O Address Map"

Тогда и ассемблер не нужен. Открываете /dev/port, позиционируете на нужное смещение и читаете с помощью read()
Для прямого обращения надо сначала разрешить себе доступ к портам с помощью ioperm()

18.12.2014 16:54 · отредактировано #405740
s.xbatob написал:
[quote=Peter]Это адреса, из таблицы "I/O Address Map"

Тогда и ассемблер не нужен. Открываете /dev/port, позиционируете на нужное смещение и читаете с помощью read()
Для прямого обращения надо сначала разрешить себе доступ к портам с помощью ioperm()[/quote]
Попробовал, работает, от root'а. Но пробовал не на этом модуле, а на обычном IBM PC.
А inb() не даст ли то же самое?

Пётр.

19.12.2014 10:25 · отредактировано #405782

Действительно, /dev/port читают и read() и inb().

Пётр.

Войдите или зарегистрируйтесь, чтобы ответить.