一、基本信息
1.CPU详情:Intel(R) Core(TM) i3-8100 CPU @ 3.60GHz 2.PCH详情:h310 3.系统信息:Linux buildroot 5.4.77 #4 SMP Sun Aug 29 19:39:59 PDT 2021 x86_64 GNU/Linux 二、背景 1.使用程序完成视频播放(也可以在文件系统构建中勾选vlc,使用vlc命令直接播放视频文件),VGA和HDMI视频播放画面正常,但是HDMI和耳机都没有声音。 三、调试过程 1.由于板子未接入存储设备,采用pxe启动 启动参数如下图所示 内核文件:bzImage 文件系统文件:rootfs.cpio.gz 2.检查声卡信息 3.检查声卡相关设备信息 缺少HDMI相关音频设备。 4.上一步中发现缺少HDMI相关音频设备,检查是否为驱动问题 根据驱动的打印信息可以看出,audio bind失败了。 查看内核源码,找到该错误信息打印的位置,发现驱动确实存在问题,尝试修改驱动源码等方式,经历了很多过程,这里不再赘述,但最终没能很好地解决该问题。 5.尝试另外一个方向 由于驱动中提到【i915】,因此联想到pxe启动参数【i915.modeset=0】。 由于该启动参数决定了后续内核中【i915】相关驱动的走向,因此尝试【i915.modeset】的另一个值【1】,这里不赘述这个参数值的具体含义和区别,有兴趣的可以自行百度一下。 采用【i915.modeset=1】pxe启动,如图所示。 启动后检查驱动打印信息 这样来看,没有报错,那就继续检查其它项目。 6.检查声卡信息 7.检查声卡相关设备信息 没有什么异常。 8.根据上一步中的设备信息,使用【aplay】命令(使用其它可以指定声卡及设备的命令也可以),验证具体声音输出设备是其中的哪一个 【aplay -D plughw:0,0 /media/sda1/8ch.1k2k.wav】命令的意思是,使用【card 0】【device 0】播放【/media/sda1/8ch.1k2k.wav】。 9.经过上一步中一轮验证后,发现所有设备都不发声,因此使用【alsamixer -c 0】命令检查音频配置 【alsamixer -c 0】的意思是查看【card 0】的音频配置。 【alsamixer -c 0】命令后发现都是【MM】的状态,【MM】代表静音,因此改变该状态,如果不知道每个配置怎样修改才正确的话,可以考虑使用【alsactl init】命令直接将alsa配置初始化。 使用【alsactl init】初始化后,【alsamixer -c 0】的配置如下图所示 10.音频配置修改后再次验证【步骤8】中内容,使用【aplay】命令(使用其它可以指定声卡及设备的命令也可以),验证具体声音输出设备是其中的哪一个 最终验证发现: 耳机输出设备:card 0,device 0 HDMI输出设备:card 0,device 7 11.设定HDMI为默认音频输出设备 文件系统中,【/etc】目录下创建一个文件【asound.conf】,在文件中写入如下内容 内容的意思是将HDMI音频输出设备【card 0,device 7】指定为默认音频输出设备。 12.此时再次使用程序播放视频 视频播放有画面,有声音,因此声音方面问题解决了。 但是同时查看【VGA】和【HDMI】可以发现,两者显示不同,并且同时接入时【VGA】会出现只显示画面的一部分的现象,如果只接入【VGA】,画面似乎是正常的。 13.根据上一步中发现的问题,正式开始从解决声音问题转向解决视频问题 对于上一步的现象,经过研究发现 同时接入【VGA】和【HDMI】时,使用的显示模式为【克隆模式】。 【i915.modeset=1】时,如果将【VGA】和【HDMI】同时接入的话,分辨率会以【HDMI】的分辨率为准,但是如果只接入【VGA】自己的话,就以【VGA】的为准。 【i915.modeset=0】时,如果将【VGA】和【HDMI】同时接入的话,【VGA】和【HDMI】各自以自己的分辨率为准,互不影响。 14.在与Intel技术支持沟通的途中得到启发,尝试修改X(Xorg)服务的分辨率 执行命令【xrandr --output HDMI1 --mode "1024x768"】。 命令很好理解,分辨率修改为【1024*768】。 最终【VGA】和【HDMI】显示均正常。 四、结语 其实这里记录的很多东西都做了一定的简化,实际探索过程比这里描述的要复杂的多太多,现在将探索过程留在这里,希望以后遇到类似问题时可以更快地解决,毕竟探索过程很多时候真的很让人绝望。记录一次Linux音视频调试过程
2022-11-20 13:37:09