Вы здесь

Модули alsa не могут выгрузится, и система не выключается

Некоторое время назад при выключении или перезагрузке все стало останавливаться на следующих сообщениях:

* Unloading ALSA modules ...
...тут другие модули выгружаются...
*   Unloading: snd_hda_codec_idt ...

И вот на этом модуле затык, приходится выключать самому. С alsa я перед этим ничего не делал. В чем может быть проблема?

в файле /etc/conf.d/alsasound сделай:
UNLOAD_ON_STOP="no"

--
Появилось на 29 ядре. Либо не используй 29 ядро, либо исправь конфиг alsa.

ПС. Сегодня после синка, появилось 2.6.29-r1 может в нем пофикшена бага. Хотя я конфиг поправил.

в 29-r1 не исправилось, поэтому выключил выгрузку, спасибо.

SoiFong написал:
в 29-r1 не исправилось

О, спасибо, а то я уже хотел пробовать.

Я не претендую на истину в последней инстанции.
В 29 ядре модули alsa состоят из нескольких модулей =).

Для примера 27 ядро модуль snd-hda-intel

#lsmod
snd_hda_intel 211628 0
snd_hwdep 9988 1 snd_hda_intel

В 29 ядре snd-hda-intel

#lsmod
snd_hda_codec_realtek 177752 1
snd_hda_intel 21832 0
snd_hda_codec 45364 2 snd_hda_codec_realtek,snd_hda_intel
snd_hwdep 5912 1 snd_hda_codec

Скрипт остановки alsa /etc/init.d/alsasound
выгружает модули по порядку вывода команды lsmod, соответственно
первым он хочет выгрузить модуль snd_hda_codec_realtek, но это у него
не получается. Дело в том, что данный модуль занят другим модулем
о чем свидетельствует цифра 1 в 3 столбце вывода команды lsmod,
а выгрузка модуля делается командой rmmod --wait, которая будет
ждать пока модуль не освободится. Ну а дальше ясно, другие
звуковые модули не выгружаются и не освобождают для выгрузки
этот модуль. Ожидание бесконечно =).

Для себя я эту проблему решил маленькой правкой строки
отбора модулей для выгрузки. В оригинале, для ядер 2.6 она
выглядит так:

lsmod | sed -n -e 's/^\(snd[^ ]*\) .*0 $/\1/p'

Я добавил команду сортировки "sort -k3" по использованию модулей, что бы
первыми выгружались не занятые модули:

lsmod | sort -k3 | sed -n -e 's/^\(snd[^ ]*\) .*/\1/p'

После такой модернизации стартового скрипата, все заработало
как и положено.

Скрипт /etc/init.d/alsasound входит в пакет alsa-utils. В настоящее время
версия этого пакета 1.0.17. Дальнейшие исследования показали, что с этой
проблемой попытались разобраться в alsa-utils версии 1.0.19.

Гении модифицировали загрузочный скрипт и конфигурацонный файл.
- установили переменную UNLOAD_ON_STOP по умолчанию в "no"
- установили переменную KILLPROC_ON_STOP по умолчанию в "no"
- чуть чуть модифицировали сам загрузочный скрипт (сообщения об ошибках)

Фактически эти модификации не влияют на работу, но в элементарном случае
позволяют сказать, что проблема с выгрузкой модулей решена.

Спасибо, ваше решение действительно работает, в отличие от костыля разработчиков alsa.

сабж.
раз сами разобрались, пусть остальные не мучаются....
Хотя к тому времени как 29 ядро размаскируют, я думаю уже поправят алсу.

Мой вариант с сортом не идеальное решение, т.к. надо после выгрузки еще проверять какие модули остались, некий обработчик событий. Т.к. при выгрузке основного модуля остальные вышибаются вместе и ним и когда в цикле до них доходит дело он пишет как бы ошибку на экране, которая не является ошибкой. В общем на баг тянет, а на репорт нет =). Ну и самое печальное - я па англицки не пишу =)), чукча читатель. Возьмешься - напиши.

—

Не грусти, товарищ! Всё хорошо, beautiful good!

Попробовал добавить сортировку, но не помогло, Виснет при разборе строки и выгрузке зависимостей модуля snd
snd 44388 19 snd_emux_synth,snd_seq_virmidi,snd_pcm_oss,snd_mixer_oss,snd_seq_oss,snd_seq,snd_usb_audio,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_emu10k1,snd_rawmidi,snd_ac97_codec,snd_pcm,snd_seq_device,snd_timer,snd_hwdep

А для чего, вообще, модули выгружать?

Если речь идет именно о модулях alsa, то для компьютера на котором просто слушаешь музыку - незачем =), при этом, если речь идет о Gentoo, то логичнее гвоздями приколотить модуль внутрь ядра =))))).

У каждого свои мотивации. Для порядка =). Определи для себя зачем тебе вообще нужны модули. Тогда сможешь понять зачем тебе их выгружать.

Для переинициализации библиотеки alsa. Стоповые действия используются не только при остановке системы.

—

Не грусти, товарищ! Всё хорошо, beautiful good!