Доступ до пам'яті модуля ядра


9

Чи можуть два різні модулі ядра отримати доступ до однієї області пам’яті від виклику до ioremap_nocache ()?

У мене є драйвер бездротового зв’язку та окремий модуль, я хотів би, щоб окремий модуль профілював значення шуму на карті, поки драйвер все ще працює. Звідси моє запитання вище.

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

На жаль, це не спрацювало так, як я очікував. Буду вдячний за будь-які пропозиції.


Для чого вам потрібен модуль ядра для профілю значень шуму?
gertvdijk

Дякую за запитання, бездротовий драйвер дуже складний, а для зміни періодичності його калібрування може призвести до деяких непередбачуваних результатів. Я повинен був би зробити це, оскільки він робить лише калібрування для інтервалів, занадто довгих для моїх потреб. Оскільки я точно знаю, як профілювати пристрій в окремому модулі, мені просто цікаво дізнатися, чи можу я отримати доступ до тієї ж області пам’яті, з якою працює драйвер.
Радагасп

2
Будь ласка , змініть своє питання , щоб включити всі подробиці про попередні спроби / підходи. Саме так працює цей сайт. Це не форум для обговорень, а веб-сайт із запитаннями, бачите?
gertvdijk

Обговорення може включати в себе запитання та відповіді, деякі правильні, а інші неправильні - схоже, тлумачення правил у адміністраторів є в провінції семантики. Я, звичайно, оновив своє запитання.
Радагасп

Відповіді:


7

Я вважаю, що ви маєте намір реалізувати інший модуль ядра, оскільки ви вважаєте, що простіше обмінюватися даними між модулями ядра. Але, можливо, це не вдалий вибір. Якщо є можливість «профілювати шум» у просторі користувача, я вважаю, що кращим рішенням є реалізація «профілера» в просторі користувача.

У цьому рішенні профайлер користувальницького простору зчитує дані, виконує деякі обчислення і потім подає результат.

Якщо це рішення нормально, реалізація полягає в наступному.

У модулі ядра потрібно просто зареєструвати пристрій char у програмі '/ proc' та застосувати примітиви 'read' та 'write'. У користувальницькому просторі - це просто реалізувати профайлер, читання та запис на пристрої char. Деталі та інформація для цього впровадження - тут .


Я не думаю, що я цілком отримую вашу відповідь ... як я це розумію, мені все одно потрібно було б написати модуль, і цей модуль намагався би отримати доступ до тієї ж області пам’яті від дзвінка до ioremap_nocache (), що інший модуль використовується. Або ти кажеш, що я зареєстрував
зарядний

1
Правильно, вам доведеться реалізувати програмне забезпечення, але не модуль. Вам доведеться написати звичайну програму для користувальницького простору, простішу за модуль, яка читає з '/ dev / nameofdevice' і записує до неї. Не потрібно використовувати "ioremap_nocache ()", просто систематизує як "відкрити", "прочитати", "написати", "закрити". І так, бездротовий модуль повинен буде зареєструвати зарядний пристрій '/ dev / nameofdevice' всередині, щоб відкрити дані користувачеві.
vitorafsr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.