как получить доступ и изменить переменную пространства ядра из пространства пользователя - PullRequest
0 голосов
/ 08 апреля 2010

я

Я уже отправил запрос и повторяю то же самое. Я хочу изменить igmpv3 (Linux) который встроен в ядро ​​2.6 .-- таким образом, что он читает значение из файла и соответствующим образом решает зарезервированное (res 1) значение внутри пакета igmpv3, отправляемого хостом.

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

Заранее спасибо за помощь.

С уважением,

Bhavin

Ответы [ 2 ]

2 голосов
/ 08 апреля 2010

С точки зрения пользовательской наземной программы вы должны думать о драйвере как о «черном ящике» с четко определенными интерфейсами вместо кода с переменными, которые вы хотите изменить. Используя эту ментальную модель, существует четыре способа (т. Е. Интерфейсы) для передачи управляющей информации драйверу, который вы должны рассмотреть:

  • Параметры командной строки. Вы можете передать параметры модулю ядра, которые доступны ему во время инициализации.
  • IOCTLs. Это традиционный способ передачи управляющей информации драйверу, но этот механизм немного сложнее в использовании, чем sysfs.
  • proc информация о процессе псевдо-файловой системы. proc создает файлы в каталоге /proc, которые пользовательские программы могут читать и иногда записывать. В прошлом этот интерфейс был назначен также для связи с драйверами. Хотя proc выглядит аналогично sysfs, более новые драйверы (Linux 2.6) должны использовать sysfs вместо этого, поскольку цель proc состоит в том, чтобы сообщать о состоянии процессов.
  • sysfs - это псевдо-файловая система, используемая для экспорта информации о драйверах и устройствах. Смотрите документацию в ядре ( Documentation / filesystems / sysfs.txt ) для более подробной информации и примеров кода. В вашем конкретном случае обратите внимание на метод «store».

В зависимости от того, когда вам нужно связаться с драйвером (т.е. инициализация, время выполнения), вы должны добавить либо новую опцию командной строки, либо новую запись sysfs, чтобы изменить способ, которым драйвер обрабатывает значение зарезервированных полей в пакет.

Что касается filp_open, комментарий функции будет

/**
 * This is the helper to open a file from kernelspace if you really
 * have to.  But in generally you should not do this, so please move
 * along, nothing to see here..
 */

Это означает, что есть лучшие способы сделать то, что вы хотите. Также см. этот вопрос SO для получения дополнительной информации о том, почему драйверы обычно не должны открывать файлы.

1 голос
/ 08 апреля 2010

Вы обычно не можете.Только структуры, представленные в /proc и /sys или через параметр модуля, могут быть изменены из пространства пользователя.

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