LINUX.ORG.RU

падает alsa?


0

0

Система — OpenSUSE 11.3

Аудиокарта — встроенная: 00:1b.0 Audio device: Intel Corporation N10/ICH 7 Family High Definition Audio Controller (rev 01)

так же есть вебкамера со встроенным микрофоном: a4tech pk-730mj

вебка определяется алсой как аудиокарта и видит лишь один канал — микрофон (здесь все верно) и всё прекрасно работает за исключением одного: периодически что-то падает — пропадает звук в амароке, при этом со скайпа звук нормально выводится на динамики. делаю sudo /etc/init.d/alsasound restart и всё поднимается за исключением микрофона. как можно это вылечить? по логам ничего вменяемого найти не удалось


Ответ на: комментарий от AITap
[    5.019345] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    5.019383]   alloc irq_desc for 28 on node -1
[    5.019385]   alloc kstat_irqs on node -1
[    5.019395] HDA Intel 0000:00:1b.0: irq 28 for MSI/MSI-X
[    5.019419] HDA Intel 0000:00:1b.0: setting latency timer to 64
[    5.031592] usbcore: registered new interface driver snd-usb-audio
[    5.031597] uvcvideo: Found UVC 1.00 device A4 TECH USB2.0 PC Camera J (0ac8:c40a)
[    5.033049] input: A4 TECH USB2.0 PC Camera J as /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/input/input5
[    5.033089] usbcore: registered new interface driver uvcvideo
[    5.033091] USB Video Class driver (v0.1.0)
[    5.099689] ppdev: user-space parallel port driver
[    5.132721] ALSA hda_codec.c:4358: autoconfig: line_outs=4 (0x1c/0x19/0x22/0x23/0x0)
[    5.132725] ALSA hda_codec.c:4362:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[    5.132727] ALSA hda_codec.c:4366:    hp_outs=1 (0x1d/0x0/0x0/0x0/0x0)
[    5.132730] ALSA hda_codec.c:4367:    mono: mono_out=0x0
[    5.132732] ALSA hda_codec.c:4370:    dig-out=0x20/0x0
[    5.132734] ALSA hda_codec.c:4378:    inputs: mic=0x1a, fmic=0x1e, line=0x1b, fline=0x0, cd=0x1f, aux=0x0
[    6.126865] Adding 2000024k swap on /dev/sda6.  Priority:-1 extents:1 across:2000024k 
[    6.694754] device-mapper: uevent: version 1.0.3
[    6.695152] device-mapper: ioctl: 4.17.0-ioctl (2010-03-05) initialised: dm-devel@redhat.com

неа. это то, что после рестарта алсы. до этого ничего по теме

Odin
() автор топика
Ответ на: комментарий от Odin

> это то, что после рестарта алсы
Вместе с ядром? Эти сообщения случились на 5-6 секундах аптайма.

Можно посмотреть на init-скрипт?

AITap ★★★★★
()
Ответ на: комментарий от AITap

>>Эти сообщения случились на 5-6 секундах аптайма.

пардон, протупил (=

Можно посмотреть на init-скрипт?

а что именно нужно?

Odin
() автор топика
Ответ на: комментарий от Odin

Дело в том, что ALSA - модуль ядра. Может быть, init-скрипт просто сбрасывает настройки микшера (как в debian), может быть - перегружает модули.

AITap ★★★★★
()
Ответ на: комментарий от AITap
. /etc/rc.status
. /etc/sysconfig/sound

# Shell functions sourced from /etc/rc.status:
#      rc_check         check and set local and overall rc status
#      rc_status        check and set local and overall rc status
#      rc_status -v     ditto but be verbose in local rc status
#      rc_status -v -r  ditto and clear the local rc status
#      rc_failed        set local and overall rc status to failed
#      rc_reset         clear local rc status (overall remains)
#      rc_exit          exit appropriate to overall rc status

# First reset status of this service
rc_reset

alsactl=/usr/sbin/alsactl
asoundcfg=/etc/asound.state
aconnect=/usr/bin/aconnect

#
# insert sequencer modules
#
load_sequencer() {
  test "$LOAD_SEQUENCER" = "yes" && modprobe -q snd-seq
  if [ x"$LOAD_SEQUENCER" = xyes -a -r /proc/asound/seq/drivers ]; then
    OLDIFS="$IFS"
    IFS=","
    while read t x c; do
      /sbin/modprobe $t
    done < /proc/asound/seq/drivers
    IFS="$OLDIFS"
  fi
}

get_drivers() {
  /sbin/modprobe -c | \
    grep -E "^[[:space:]]*alias[[:space:]]+snd-card-[[:digit:]]" | sort | \
    while read a b card; do
	echo $card
    done
}

#
# insert all sound modules
#
load_modules() {
  module_loaded=0
  c=""
  drivers=`get_drivers`
  for i in $drivers; do
    if [ $i != off ]; then
      if [ x$c = x ]; then
        echo -n ": "
	c=1
      fi
      echo -n " ${i##snd-}"
      /sbin/modprobe $i && module_loaded=1
    fi
  done
  rc_status -v -r
  test $module_loaded -eq 0 && return 1
  return 0
}

#
# rest of start action
#
start_rest() {
  load_sequencer
  if [ x"$LOAD_OSS_EMUL_MODULES" = xyes ]; then
    /sbin/modprobe snd-pcm-oss
    test x"$LOAD_OSS_SEQ_MODULE" = xyes && /sbin/modprobe snd-seq-oss
  fi
}

# manual load and force to store the status
start_all() {
    echo -n "Starting sound driver"
    load_modules && start_rest
    # hack - in case the mixer isn't restored
    # this shouldn't be needed anymore since udev cares
    # (sleep 1; $alsactl -F -f $asoundcfg restore >/dev/null 2>&1)
    rc_status
}

do_kill() {
  fuser $* /dev/admmidi* /dev/adsp* /dev/amidi* /dev/audio* /dev/dmfm* \
     /dev/dmmidi* /dev/dsp* /dev/dspW* /dev/midi* /dev/mixer* /dev/music \
     /dev/patmgr* /dev/sequencer* /dev/sndstat >/dev/null 2>&1
  if [ -d /dev/snd ]; then
    fuser $* /dev/snd/* >/dev/null 2>&1
  fi
}

terminate() {
  #
  # Kill processes holding open sound devices
  #
  do_kill -TERM -k
  sleep 1
  do_kill -k

  #
  # remove all sequencer connections if any
  #
  if [ -f /proc/asound/seq/clients -a -x $aconnect ]; then
    $aconnect --removeall
  fi
}

# mute master to avoid clicks at unload/shutdown
mute_system() {
  /usr/bin/amixer set Master mute >/dev/null 2>&1
}

#
# remove all sound modules
#
unload_modules() {
  mute_system
  mod=$(grep -m1 -E '^(snd[^ ]*|ac97_bus) [0-9]+ 0' /proc/modules)
  while [ -n "$mod" ]; do
      mod=${mod%% *}
      /sbin/modprobe -r $mod
      mod=$(grep -m1 -E '^(snd[^ ]*|ac97_bus) [0-9]+ 0' /proc/modules)
  done
  rc_failed 0
}

unload_all() {
    echo -n "Shutting down sound driver"
    terminate
    unload_modules
    rc_status -v
}

stop_all() {
    if [ -d /proc/asound ]; then
	$alsactl -g -f $asoundcfg store
        unload_all
    fi
}

# See how we were called.
case "$1" in
  start)
	if [ "$PREVLEVEL" = "N" ]; then
	    test -d /proc/asound && start_rest
	else
	    start_all
	fi
        ;;
  stop)
	if [ "$RUNLEVEL" = "6" -o "$RUNLEVEL" = "0" ]; then
	    if [ -d /proc/asound ]; then
		$alsactl -f $asoundcfg store
		# kill pulseaudio before muting the system (bnc#499445)
		if killall -q -TERM pulseaudio; then
		    usleep 200
		fi
		mute_system
	    fi
	else
	    stop_all
	fi
        ;;
  unload)
	test -d /proc/asound && unload_all
	;;
  reload|restart)
	stop_all
	start_all
	;;
  status)
        if [ -d /proc/asound ]; then
          echo -n "ALSA sound driver loaded."
          rc_status -v
        else
          echo -n "ALSA sound driver not loaded."
	  rc_status -u
        fi
        ;;
  *)
	echo "Usage: $0 {start|stop|restart|reload|unload|status}"
        exit 1
	;;
esac

rc_exit
Odin
() автор топика
Ответ на: комментарий от Odin

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

Odin
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.