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