Доступ к переменной в пространстве ядра из пространства уровня пользователя - PullRequest
1 голос
/ 04 февраля 2010

Итак, давайте создадим структуру, которую я хочу прочитать из пространства уровня пользователя, которое определено в пространстве ядра, но пространство уровня пользователя имеет несколько процессов.

Пример:

В модуле ядра у меня есть глобальная структура. struct { int a; int b; } test;

В модуле пользовательского уровня я "извлек" эту глобальную структуру

extern struct { int a; int b; } test;

Компилятор не жалуется, и редактор ссылок не жалуется. Однако, если у пользователя несколько процессов, то клонируется ли эта структура для каждого процесса? Если я использую разделяемую память вместе с extern, то я могу получить доступ к структуре ядра, и если у меня есть n процессов, то существует только 1 структура с момента ее общего доступа. Я могу получить доступ к переменной уровня ядра с помощью 1 процесса на уровне пользователя, но если у меня будет больше процессов, я получу клоны для каждой структуры, которая "externed"

Мой вопрос таков: могут ли процессы на уровне пользователя читать переменную уровня ядра?

Ответы [ 3 ]

2 голосов
/ 18 февраля 2010

Пользовательское пространство не может видеть ram ядра напрямую в любом случае - и mmap'ing / dev / kmem также не является хорошим решением (на мой взгляд, оно очень уродливо и должно использоваться только для отладки ядра).

Я думаю, что самый хороший способ - это показать его через файл в / proc (что довольно легко) или с помощью символьного устройства с IOCTL (что немного сложнее).

(Примечание: это специфично для Linux / Unix)

1 голос
/ 17 февраля 2010

В Unix это обычно делается с помощью mmap -ing какого-то специального файла устройства, например /dev/kmem.

1 голос
/ 05 февраля 2010

В большинстве операционных систем вы не можете получить доступ к переменным пространства ядра из пространства пользователя.
Вам нужно будет предоставить свои данные с помощью механизмов, которые предоставляет ваша ОС. Это может быть пользовательский системный вызов, файл, предоставляемый через vfs, или любая другая форма IPC.

...