OrangePiPC2升级Armbian后无法发声的解决方案
症状
某一次在对OrangePiPC2进行系统升级后,提示内核已更新,需要进行重启。
然而在重启后发现播放音乐不再有声音了。
排查过程
怀疑是不是音量被调成0了,因此运行
alsamixer
,发现提示This sound device does not have any controls.
注意到现在这张声卡是hdmi的,按下
F6
选择其他声卡,可以发现还有一张H3 Audio Codec
声卡而选择
H3 Audio Codec
声卡可以看到熟悉的音量控制界面- 大致可以推测出,由于我的音响是接到
H3 Audio Codec
上的,而alsa默认声卡变成了hdmi
从而导致了播放音乐没有声音 将ALSA默认声卡修改为
H3 Audio Codec
, 步骤为:查看声卡极其对应的编号
cat /proc/asound/cards echo 或者 aplay -l | awk -F \: '/,/{print $2}' | awk '{print $1}' | uniq
0 [allwinnerhdmi ]: allwinner_hdmi - allwinner,hdmi allwinner,hdmi 1 [Codec ]: H3_Audio_Codec - H3 Audio Codec H3 Audio Codec 或者 allwinnerhdmi Codec
可以看到我想要的默认声卡名为
Codec
,其编号为1,那么创建文件/etc/asound.conf
填入下面内容pcm.!default { type hw card 1 } ctl.!default { type hw card 1 }
其中的
1
就是声卡对应的编号- 再次播放音乐,就可以正常发声了。
另一种解决方法
其实还有另一种解决方法就是控制声卡module的载入顺序,让 H3 Audio Codec
声卡成为第一顺位的声卡就行了. 方法如下:
查看加载的声卡驱动
lsmod |grep snd
snd_soc_hdmi_codec 16384 1 snd_soc_simple_card 16384 0 snd_soc_simple_card_utils 16384 1 snd_soc_simple_card snd_soc_core 155648 6 sun4i_i2s,sun8i_codec_analog,snd_soc_hdmi_codec,sun4i_codec,snd_soc_simple_card_utils,snd_soc_simple_card snd_pcm_dmaengine 16384 1 snd_soc_core snd_pcm 106496 4 sun4i_i2s,snd_soc_hdmi_codec,snd_soc_core,snd_pcm_dmaengine snd_timer 32768 1 snd_pcm
你会发现查出来了好多module,但只有两个module是不被别人引用的:
snd_soc_hdmi_codec
和snd_soc_simple_card
.可以推测出
snd_soc_hdmi_codec
对应的是hdmi
声卡,snd_soc_simple_card
对应的是H3 Audio Codec
声卡创建
/etc/modprobe.d/alsa-base.conf
文件,填入下面内容options snd_soc_hdmi_codec index=-1 options snd_soc_simple_card index=-2