Файл конфигурации для модуля ядра

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

Я хотел бы сохранить любое значение (список строк) в любом типе файла / системы конфигурации и в виде значения внутри файла / системы - изменить поведение модулей.

Я думал о procfs, я могу создать модуль, который создает /proc/file и реагирует на операции чтения / записи из пользовательского пространства.

Дело в том, как прочитать эту конфигурацию от другого, назовите его B, модуль в пространстве ядра?

Возможно, возможен другой тип конфигурации (я думал о sysctl, но вижу, что строки не хранятся, и мне нужно сохранить какой-то простой «список»).

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
514
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

1) Обычно, если это конфигурация и какой-то список параметров, ioctl более популярен и рекомендуют его использовать.

2) Вы спрашиваете, есть 2 модуля ядра - A и B, и вы хотите прочитать конфигурацию A на B. Верно? В этом случае, независимо от того, какой у вас proc или ioctl (помните, что proc - это не настоящая файловая система. Вы печатаете или читаете и возвращаете какое-то значение из некоторых переменных ядра ... вы можете читать содержимое из "fs" с помощью VFS в ядре и вернуть строку, но это очень глупо, поскольку у вас есть контроль над пользовательским пространством.), в конце концов, вам нужно сохранить конфигурацию модуля ядра в некоторых переменных. Если вы хотите прочитать их из другого модуля, ваша переменная должна быть представлена ​​с помощью ключевого слова EXPORT_SYMBOL (), но обычно мы этого не делаем.

Создайте некоторый API на вашем символе, который возвращает значение конфигурации, выставьте эти API и вызовите его из другого модуля. Из-за зависимости модуля вам может потребоваться соблюдать осторожность.

Самый простой способ сделать это - создать некоторую функцию обратного вызова и определить ее в исходном коде ядра. А затем, когда модуль A инициализирован, настройте ptr обратного вызова и вызовите его из модуля B. В этом случае вы избавитесь от зависимости модуля.

или создайте указатель обратного вызова на модуле B и сделайте модуль B встроенным модулем и предоставьте ptr обратного вызова.

Затем из модуля A вы можете инициализировать их, и всякий раз, когда вы вызываете его из B, вы можете проверять "null ptr" на этом ptr обратного вызова.

Надеюсь, это вам поможет.

Другие вопросы по теме