Шолом, православные.
Здесь я впервые, пришел за советом. В этих ваших линуксах плыву, так что не ругайтесь сильно. Вопросов будет много и охватывать они будут много чего, если tl;dr - уж извиняйте.
Не могли бы вы пояснить, что представляет из себя алса, как это чудо работает, как работает и опознается драйвер звуковой карты, как с ним работает алса? Подробностей особо не надо, просто поправьте меня, где ошибаюсь, да помогите склеить отдельно понятые части.
В моем понимании, есть звуковая карта, находящаяся на шине pci.
1) К ее регистрам можно получить доступ как к диапазону памяти, задав соответствующие бар-регистры (=смещение диапазона регистров контроллера) в конфигурационном пространстве pci.
2) При старте системы биос проверяет наличие абонентов на шине (Кстати, как? Перебор всех возможных адресов в конфигспейсе на наличие в них записей? Перечитывание спецификации pci мне в этом поможет - сто лет назад с ней ознакамливался), считывает все vid, did, и какие там еще информационные поля есть. На основе этих полей и каких-то предустановленных в биос таблиц определяются устройства, их формальные названия, задаются смещения для адресации регистров, выставляются режимы работы базового оборудования (контроллеры южного моста: диски гибкие и не очень, старинная видеокарточка; северного моста: контроллер памяти, управление питанием/частотой, графическая подсистема).
3) На настроенном оборудовании выполняется загрузка ядра в память - раскрутка системы. Ядро выполняет донастройку, все работает.
Сильно ошибся? Примерно так для меня выглядит раскрутка системы с нуля.
Хотелось бы заострить внимание на пункте 3). Сразу скажу изначальную проблему: после замены материнской платы (и камня) система завелась, но звуковая карта не подтянулась, и, насколько я могу видеть, все остальные устройства определены как-то тоже не так, за исключением сети. Тот аудио девайс, что есть - какой-то наворот видеокарточки, раньше он тоже был.
Сейчас я ожидал увидеть
00:1f.3 Realtek ALC887
или что-нибудь вроде того - исходя из доки на материнскую плату.
pewpew# cat /proc/asound/cards
1 [HDMI ]: HDA-Intel - HDA ATI HDMI
HDA ATI HDMI at 0xdfe60000 irq 125
pewpew# lspci
00:00.0 Host bridge: Intel Corporation Device 190f (rev 07)
00:01.0 PCI bridge: Intel Corporation Device 1901 (rev 07)
00:14.0 USB controller: Intel Corporation Device a12f (rev 31)
00:16.0 Communication controller: Intel Corporation Device a13a (rev 31)
00:17.0 SATA controller: Intel Corporation Device a102 (rev 31)
00:1c.0 PCI bridge: Intel Corporation Device a114 (rev f1)
00:1d.0 PCI bridge: Intel Corporation Device a118 (rev f1)
00:1d.1 PCI bridge: Intel Corporation Device a119 (rev f1)
00:1d.2 PCI bridge: Intel Corporation Device a11a (rev f1)
00:1f.0 ISA bridge: Intel Corporation Device a148 (rev 31)
00:1f.2 Memory controller: Intel Corporation Device a121 (rev 31)
00:1f.3 Audio device: Intel Corporation Device a170 (rev 31)
00:1f.4 SMBus: Intel Corporation Device a123 (rev 31)
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Pitcairn PRO [Radeon HD 7850]
01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cape Verde/Pitcairn HDMI Audio [Radeon HD 7700/7800 Series]
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 09)
05:00.0 PCI bridge: ASMedia Technology Inc. ASM1083/1085 PCIe to PCI Bridge (rev 04)
pewpew# lsmod | grep snd_hda
snd_hda_codec_hdmi 53248 1
snd_hda_intel 36864 5 snd_hda_codec_hdmi
snd_hda_controller 32768 1 snd_hda_intel
snd_hda_codec 143360 3 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_controller
snd_hwdep 20480 1 snd_hda_codec
snd_pcm 106496 4 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel,snd_hda_controller
snd 86016 17 snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_pcm,snd_seq,snd_rawmidi,snd_hda_codec,snd_hda_intel,snd_seq_device
soundcore 16384 2 snd,snd_hda_codec
Соответственно, пытаюсь разобраться, почему в интернете советуют переустанавливать/конфигурировать alsa (второе по жиденьким мануалам для моего случая, кстати, не помогло, а первое я что-то пока не могу понять, как сделать).
Итак, теперь самое для меня тумманое - подробный пункт 3). Для простоты буду говорить только о подсистеме аудио.
На определенном этапе в память будет загружен определенный набор драйверов (linux/drivers/ ??? почему-то
pewpew# grep snd_hda . -R
./gpu/drm/i915/intel_audio.c: * will bind dynamically to the snd_hda_intel driver's corresponding master
./gpu/drm/i915/intel_audio.c: * corresponding snd_hda_intel driver's master component.
интеловские драйвера, похоже, лежат в гпу. Где находятся риалтековские - я так и не нашел. Насколько могу судить по их сайту, драйвера они включают в alsa).
Если драйвера, как в моем случае, включены в состав alsa, а он, в свою очередь, включен в состав ядра - то они тоже окажутся в памяти. Далее, ядро каким-то образом (кстати, каким?) определяет, какой драйвер должен использоваться для имеющегося оборудования, использует в дальнейшем только его. При запуске драйвера выполняется инициализация, вторичная настройка оборудования в соответствии с возможностями драйвера и звуковой подсистемы (а значит, она должна быть загружена раньше, чем драйвер?). Не очень понимаю, какую роль во всем этом играет файловая операция probe (ldd3 и интернет ясности не внесли, я что-то фундаментальное для этого никак не могу уловить, видимо).
Дальше alsa предоставляет какой-то унифицированный интерфейс для звуковой системы надлежащего уровня, или самодостаточно обрабатывает вызовы от приложений, если они работают с alsa напрямую.
Вот тут у меня много непонимания и косяков, подскажите/поправьте, пожалуйста, очень нужно для выстроения стройной картинки в голове.
Как же так тогда получается, что устройство у меня определяется неверно? Неужели драйверов для него нету в имеющейся сборке alsa? Хотя в моей текущей системе - Ubuntu 14.04 LTS - все должно работать из коробки, согласно англоязычном форумам. Могла ли замена материнской платы сбить какую-то конфигурацию alsa?
Что еще не очень понятно, почему-то realtek отсутствует в списке поддерживаемых alsa'ой, хотя это, наверное, один из самых распространенных вендоров интегрированных звуковух:
http://www.alsa-project.org/main/index.php/Matrix:Main
Буду благодарен за любые советы, ответы, замечания и исправления.
PS. В конечном итоге мне бы хотелось заставить звук работать как можно меньшими телодвижениями благодаря появлению понимания, как это все работает. В идеале - поправить какой-нибудь конфиг. Чуть хуже - пересобрать всю alsa. Совсем ужас - всю систему (лол)
PPS. linux device drivers 3rd ed пролистан n лет назад. Мозги не вправил.
PPPS. Что-то тэг (br) работает как-то не так