Модули alsa не могут выгрузится, и система не выключается
SoiFong 6 апреля, 2009 - 19:47
Некоторое время назад при выключении или перезагрузке все стало останавливаться на следующих сообщениях:
* Unloading ALSA modules ... ...тут другие модули выгружаются... * Unloading: snd_hda_codec_idt ...
И вот на этом модуле затык, приходится выключать самому. С alsa я перед этим ничего не делал. В чем может быть проблема?
»
- Для комментирования войдите или зарегистрируйтесь
в файле /etc/conf.d/alsasound
в файле /etc/conf.d/alsasound сделай:
UNLOAD_ON_STOP="no"
--
Появилось на 29 ядре. Либо не используй 29 ядро, либо исправь конфиг alsa.
ПС. Сегодня после синка, появилось 2.6.29-r1 может в нем пофикшена бага. Хотя я конфиг поправил.
в 29-r1 не исправилось,
в 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 ядро размаскируют, я думаю уже поправят алсу.
Возможно, но кто возьмется?
Мой вариант с сортом не идеальное решение, т.к. надо после выгрузки еще проверять какие модули остались, некий обработчик событий. Т.к. при выгрузке основного модуля остальные вышибаются вместе и ним и когда в цикле до них доходит дело он пишет как бы ошибку на экране, которая не является ошибкой. В общем на баг тянет, а на репорт нет =). Ну и самое печальное - я па англицки не пишу =)), чукча читатель. Возьмешься - напиши.
https://bugs.gentoo.org/show_
https://bugs.gentoo.org/show_bug.cgi?id=268365#c3
Не грусти, товарищ! Всё хорошо, 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!