ASoC — ALSA System on Chip — это программная система, построенная на стандартном уровне драйверов ALSA для лучшей поддержки аудиокодеков во встроенных процессорах и мобильных устройствах. До появления ASoc ядро уже имело частичную поддержку звука в SoC, но были некоторые ограничения:
ASoC был предложен для решения вышеуказанных проблем и был интегрирован в дерево кода ядра: sound/soc. ASoC не может существовать отдельно. Он основан только на стандартном драйвере ALSA. Для работы его необходимо объединить со стандартной структурой драйверов ALSA.
Обычно, как и абстракция и повторное использование в области программного обеспечения, аудиосистему встроенных устройств можно разделить на три части: встроенное оборудование (машина), Soc (платформа) и кодек, как показано на следующем рисунке:
На уровне программного обеспечения ASoC также разделяет аудиосистему встроенных устройств на три части: машина, платформа и кодек.
Драйвер кодека Важным принципом проектирования ASoC является то, что драйвер кодека не зависит от платформы. Он содержит некоторые элементы управления звуком (элементы управления), аудиоинтерфейсы, определения DAMP (динамическое управление питанием звука) и определенные функции ввода-вывода кодека. Чтобы обеспечить независимость оборудования, любой код, специфичный для платформы и машины, необходимо переместить в драйверы платформы и машины. Все драйверы кодеков должны обеспечивать следующие функции:
При необходимости также могут быть предусмотрены следующие функции:
Весь ASoC состоит из ряда структур данных. Чтобы понять механизм работы ASoC, вы должны понять взаимосвязь и роль этой серии структур данных. Следующая диаграмма отношений показывает взаимосвязь между важными структурами данных в ASoC:
Рисунок 4.1 Статическая связь между различными структурами в Kernel-2.6.35-ASoC
ASoC реализует звуковую карту как платформенное устройство, а затем использует поле dev в структуре Platform_device: dev.drvdata, которое фактически указывает на структуру snd_soc_device. Можно считать, что snd_soc_device является основой всей структуры данных ASoC. Начиная с него, выводится ряд структур данных для выражения различных характеристик и функций звука. Структура snd_soc_device ведет к двум структурам snd_soc_card и soc_codec_device, а затем snd_soc_card ведет к структурам snd_soc_platform, snd_soc_dai_link и snd_soc_codec. Как упоминалось выше, ASoC разделен на три части: Машина, Платформа и Кодек. Из этих структур данных snd_codec_device и snd_soc_card представляют драйвер машины, snd_soc_platform представляет драйвер платформы, snd_soc_codec и soc_codec_device представляют драйвер кодека, а snd_soc_dai_link отвечает за подключение. Платформа и кодек.
Версия ядра, на которую первоначально ссылались при написании этой статьи, была 2.6.35, но друг CSDN предположил, что ASoC внесла серьезные изменения в версию ядра 3.0. Поэтому я намеренно скачал код 3.0 и обнаружил, что изменения действительно есть. Вот статическая диаграмма отношений структуры данных:
Рисунок 5.1 Структура данных ASoC в ядре 3.0
На рисунке выше мы видим, что структура данных в версии 3.0 более разумна и понятна. Структура snd_soc_device была отменена и заменена непосредственно на snd_soc_card, а роль snd_soc_pcm_runtime была усилена. также были добавлены , используемые для четкого представления драйвера кодека и драйвера платформы.
Ссылка на статью: https://blog.csdn.net/DroidPhone/article/details/7165482.