Физический адрес переменной Linux "jiffies" - PullRequest
0 голосов
/ 09 апреля 2011

Я хотел бы получить физический адрес переменной Linux "jiffies", чтобы я мог прочитать ее, просто прочитав содержимое этого адреса памяти.

Ответы [ 6 ]

4 голосов
/ 09 апреля 2011

Из кода режима ядра (например, загружаемого модуля ядра) вам необходимо включить заголовочный файл <linux/jiffies.h>.Он содержит определение переменной jiffies:

extern unsigned long volatile __jiffy_data jiffies;

Однако также содержит следующее предупреждение:

/*
 * The 64-bit value is not atomic - you MUST NOT read it
 * without sampling the sequence number in xtime_lock.
 * get_jiffies_64() will do this for you as appropriate.
 */

Т.е. вам не следует обращаться к этой переменной напрямую.Это 64-битная переменная, и доступ к ней не является атомарным в 32-битных системах, поэтому функция get_jiffies_64() из того же заголовочного файла.В 64-разрядных системах эта функция представляет собой очень простую встроенную функцию, которая возвращает значение переменной jiffies.

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

2 голосов
/ 19 сентября 2012

Это не напрямую связано с вашим вопросом, но все еще может быть актуальным. Я поддерживаю небольшой проект (devmem-rw) здесь: http://code.google.com/p/device-memory-readwrite/

Это весьма полезно для разработчиков / тестировщиков драйверов / ядра; он позволяет одной настройке иметь возможность чтения / записи любого допустимого местоположения памяти - это может быть ОЗУ (пространство пользователя / ядра), сопоставленные с памятью регистры, области общей памяти и т. д.

Pl см. Вики проекта (в частности, http://code.google.com/p/device-memory-readwrite/wiki/UsageWithExamples).

Более актуально для вашего вопроса. Я использую этот проект для демонстрации нескольких вариантов использования, один из которых повторяется при чтении значения jiffies. Видя, что это меняется, это доказывает ..

С http://code.google.com/p/device-memory-readwrite/wiki/UsageWithExamples:

»... Например. 2: Чтение значения jiffies на ПК x86 Модуль ядра 'vm_img', упомянутый ранее, также показывает нам местоположение глобальной переменной ядра 'jiffies_64' (которая содержит текущее значение jiffies); в приведенном выше примере его местоположение в ядре оказывается 0xc07c7a40. Итак:

# ./rdmem 0xc07c7a40 ; sleep 1; ./rdmem 0xc07c7a40 ; sleep 1; ./rdmem 0xc07c7a40
        +0          +4          +8          +c            0   4   8   c   
+0000   00 1a bc 20                                       ...             
        +0          +4          +8          +c            0   4   8   c   
+0000   00 1a bd 23                                       ...#            
        +0          +4          +8          +c            0   4   8   c   
+0000   00 1a be 1f                                       ....            
# 

Мы можем видеть, как оно обновляется ... (на самом деле, CONFIG_HZ = 250 в этой системе, а также ожидается некоторый + фактор ...). ... «

Pl см. Страницу проекта для деталей. Было обнаружено, что это весьма полезно для разработчиков драйверов - например, они могут проверять / изменять значения регистров без написания кода :) Сделай это!

2 голосов
/ 09 апреля 2011

Для кода ядра используйте функции, определенные в include/linux/jiffies.h.(Например, get_jiffies_64).

Команда ядра с использованием системных вызовов Linux иллюстрирует обработку системных вызовов в Linux с помощью системного вызова пользовательского пространства, который читает jiffies.Это может быть то, что вам нужно.

Linux получает текущие ошибки, поскольку перезагрузка в суперпользователе также содержит некоторую информацию, которая может вас заинтересовать.jiffies to mili секунд - это тоже что-то, что нужно иметь в виду.

0 голосов
/ 09 апреля 2011

Я думаю, что вы хотите получить доступ к значениям jiffies из пространства пользователя.

Вы можете написать небольшой модуль, который представляет переменную jiffies в файле proc.

0 голосов
/ 09 апреля 2011

Когда вы ссылаетесь на jiffies из кода ядра, это именно то, что происходит.Как вы думаете, что нужно улучшить при нормальном использовании?Если вам нужен адрес, просто используйте &jiffies.

0 голосов
/ 09 апреля 2011

Если у вас установлены источники,

locate jiffies

должен раскрыть файлы .c и .h, например:

/usr/src/linux-headers-$(uname -r)/include/linux/jiffies.h
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...