Я выполняю упражнение, в котором хочу получить доступ к узлу /dev/snd/controlC0
звуковой карты из ядра, чтобы настроить элемент управления tinymix из пространства ядра вместо пространства пользователя с помощью утилиты tinymix. Теперь из потока утилиты tinymix я обнаружил, что при запуске ее выполнение вызовет функцию mixer_open()
из пользовательского пространства, которое внутренне вызывает функцию ядра ядра snd_ctl_open()
. Теперь, поскольку я должен делать то же самое из ядра моего модуля необходимо вызвать ту же функцию. Проблема, с которой я столкнулся, - это функция snd_ctl_open()
с аргументами struct inode *inode, struct file *file
. Итак, как я могу получить информацию об индексе узла в моем модуле?Как получить доступ к узлу, созданному в пространстве пользователя из ядра?
Файл mixer.c
находится в коде Android AOSP по адресу external/tinyalsa/mixer.c
. snd_ctl_open()
находится в ядре Linux по адресу sound/core/control.c
.
Я нашел один в API ядра ядра filp_open()
, который может выполнить задачу выше, но может быть использован только после монтирования файловой системы. Я хочу открыть узел до монтирования файловой системы.
Короче говоря, моя цель - понять, как я могу открыть или открыть узел устройства из ядра до того, как будет установлена файловая система.
Этот интерфейс не предназначен для использования в пространстве ядра. Почему, по-вашему, вам нужно переместить tinymix в ядро? –
Спасибо за ответ. Моя цель - включить звук на Pandaboard из ядра. Теперь для включения звука мне нужно установить некоторые настройки микшера, чтобы включить путь звука из модуля. Теперь, чтобы установить настройку микшера, мне нужно получить доступ к узлу устройства/dev/snd/controlC0 из ядра. Еще одна вещь: я не хочу использовать сам tinymix из ядра. Я просто хочу реплицировать задачу, выполняемую tinymix в моем модуле. – Hemant
Почему вы не можете сделать это в драйвере машины? –