Доступ к памяти модуля ядра

9

Могут ли два разных модуля ядра получить доступ к одной и той же области памяти при вызове ioremap_nocache ()?

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

Одна из возможностей, которую я исследовал, состояла в том, чтобы запустить поток ядра из драйвера, затем я реализовал семафор, чтобы предотвратить любые состояния гонки, возникающие из-за одновременного чтения / записи в одно и то же адресное пространство. Я надеялся, что дочерний поток сможет получить доступ к той же области памяти.

К сожалению, это не сработало, как я ожидал. Буду признателен за любые предложения.

Radagasp
источник
Зачем вам нужен модуль ядра для профилирования значений шума?
gertvdijk
Спасибо за вопрос, беспроводной драйвер очень сложен, и изменение периодичности его калибровки может привести к непредвиденным результатам. Я должен был бы сделать это, так как он только делает свои калибровки для интервалов, которые являются слишком длинными для моих потребностей. Поскольку я точно знаю, как профилировать устройство в отдельном модуле, мне просто интересно узнать, могу ли я получить доступ к той же области памяти, с которой работает драйвер.
Радагасп
2
Пожалуйста, измените ваш вопрос, чтобы включить все детали ваших предыдущих попыток / подходов. Вот как работает этот сайт. Это не дискуссионный форум, а сайт вопросов и ответов, понимаете?
gertvdijk
Обсуждение может включать вопросы и ответы, некоторые правильные, а другие неправильные - кажется, что интерпретация правил для администраторов находится в области семантики. Я, конечно, обновил свой вопрос.
Радагасп

Ответы:

7

Я полагаю, вы намереваетесь внедрить другой модуль ядра, так как вы думаете, что легче обмениваться данными между модулями ядра. Но, возможно, это не хороший выбор. Если есть возможность «профилировать шум» в пространстве пользователя, я думаю, что лучшим решением будет внедрение «профилировщика» в пространстве пользователя.

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

Если это решение в порядке, реализация выглядит следующим образом.

В модуле ядра это просто регистрация устройства char в / proc и реализация примитивов read и write. В пользовательском пространстве, это просто реализовать профилировщик, чтение и запись на устройство char. Подробности и информация для этой реализации все здесь .

vitorafsr
источник
Я не думаю, что я вполне понимаю ваш ответ ... как я понимаю, мне все равно нужно написать модуль, и этот модуль будет пытаться получить доступ к той же области памяти из вызова ioremap_nocache (), что другой Модуль использует. Или вы говорите, что я регистрирую символ устройства в беспроводном модуле
Radagasp
1
Правильно, вам придется реализовать программное обеспечение, но не модуль. Вам придется написать обычную программу пользовательского пространства, более простую, чем модуль, которая читает из / dev / nameofdevice и записывает в нее. Нет необходимости использовать ioremap_nocache (), просто вызовите системные вызовы как «open», «read», «write», «close». И да, беспроводной модуль должен зарегистрировать внутри устройства символьное устройство '/ dev / nameofdevice', чтобы предоставить данные пользователю.
vitorafsr