пространство пользователя к пространству ядра и sysfs и как использовать sysfs для изменения одного зарезервированного значения в igmpv3 pkt - PullRequest
1 голос
/ 09 апреля 2010

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

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

На что один ctuffli ответил:

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

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

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

Спасибо Ctuffli за ваш ответ. У меня нет никаких знаний о sysfs. Можете ли вы предоставить более подробную информацию об этом? Я хочу изменить одно из резервных значений igmpv3 pkt на 0, 1 или 2. Это единственное, что мне нужно изменить. Не могли бы вы дать мне больше деталей для этой конкретной проблемы?

1 Ответ

1 голос
/ 22 мая 2014

В этом SO ответе :

есть описание интерфейса sysfs (то есть / sys / ...)

В нем конкретно описано, что добавить в драйвер, а именно:

static ssize_t mydrvr_version_show(struct device *dev,
        struct device_attribute *attr, char *buf)
{
    return sprintf(buf, "%s\n", DRIVER_RELEASE);
}

static DEVICE_ATTR(version, S_IRUGO, mydrvr_version_show, NULL);

А при настройке драйвера:

device_create_file(dev, &dev_attr_version);
...