Могут ли два разных модуля ядра получить доступ к одной и той же области памяти при вызове ioremap_nocache ()?
У меня есть беспроводной драйвер и отдельный модуль, я хотел бы, чтобы отдельный модуль профилировал значения шума на карте, пока драйвер все еще работает. Отсюда мой вопрос выше.
Одна из возможностей, которую я исследовал, состояла в том, чтобы запустить поток ядра из драйвера, затем я реализовал семафор, чтобы предотвратить любые состояния гонки, возникающие из-за одновременного чтения / записи в одно и то же адресное пространство. Я надеялся, что дочерний поток сможет получить доступ к той же области памяти.
К сожалению, это не сработало, как я ожидал. Буду признателен за любые предложения.
Ответы:
Я полагаю, вы намереваетесь внедрить другой модуль ядра, так как вы думаете, что легче обмениваться данными между модулями ядра. Но, возможно, это не хороший выбор. Если есть возможность «профилировать шум» в пространстве пользователя, я думаю, что лучшим решением будет внедрение «профилировщика» в пространстве пользователя.
В этом решении профилировщик пространства пользователя считывает данные, выполняет некоторые вычисления и затем передает результат.
Если это решение в порядке, реализация выглядит следующим образом.
В модуле ядра это просто регистрация устройства char в / proc и реализация примитивов read и write. В пользовательском пространстве, это просто реализовать профилировщик, чтение и запись на устройство char. Подробности и информация для этой реализации все здесь .
источник