Как читать / записывать из / в файл linux /proc из пространства ядра?

Я пишу программу, состоящую из пользовательской программы и модуля ядра. Модуль ядра должен собрать данные, которые он затем "отправит" в пользовательскую программу. Это должно быть сделано через файл /proc. Теперь я создаю файл, все хорошо, и целую вечность читал Интернет для ответа и до сих пор не могу найти его. Как вы читаете / записываете файл /proc из пространства ядра? Write_proc и read_proc, предоставляемые в procfile, используются для чтения и записи данных из пространства USER, тогда как мне нужен модуль, чтобы иметь возможность писать сам файл /proc.

2 ответа

Решение

Это не так, как это работает. Когда пользовательская программа открывает файлы, они создаются на лету в индивидуальном порядке. Большинство из них доступны только для чтения и генерируются с помощью общего механизма:

  • Зарегистрировать запись с помощью create_proc_read_entry
  • Предоставить функцию обратного вызова (называемую read_proc по соглашению), которая вызывается при чтении файла
  • Эта функция обратного вызова должна заполнять предоставленный буфер и (обычно) вызывать proc_calc_metrics, чтобы обновить указатель файла и т. Д., Предоставленные в пространство пользователя.

Вы (из ядра) не "пишете" в файлы procfs, вы предоставляете результаты динамически, когда пользовательское пространство запрашивает их.

Один из подходов для передачи данных в пользовательское пространство - seq_files. Чтобы настроить (записать) параметры ядра, вы можете рассмотреть узлы sys-fs.

Спасибо Виджай

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