我正在处理一个嵌入式系统,运行着精简版的Ubuntu 22.04。我们最近更新了一些嵌入式系统的硬件,并且我正在努力让我们的Ubuntu镜像在新的硬件上正常工作。
在旧的硬件上,pulseaudio服务总是能够正常运行,但在新的硬件上,我遇到了一个问题:当服务在启动过程中启动时,pulseaudio无法检测到Alsa卡0。如果我通过
我怀疑的是,pulseaudio在
为了验证我的猜想,我试图在启动过程中对该服务运行strace。我已经更新了/usr/lib/systemd/user/pulseaudio.service文件,并将ExecStart行更改如下:
运行
似乎它正在引发一个SIGSYS信号,根据
我不太确定为什么会出现这个问题。我可以手动运行ExecStart命令而不引发SIGSYS信号,所以只有在作为systemd服务运行时才会出现这个问题。
那么,我应该如何在作为systemd服务运行时让strace正常工作呢?
在旧的硬件上,pulseaudio服务总是能够正常运行,但在新的硬件上,我遇到了一个问题:当服务在启动过程中启动时,pulseaudio无法检测到Alsa卡0。如果我通过
systemctl --user restart pulseaudio.service
重新启动服务,它就能够检测到Alsa卡0,并且一切正常。我怀疑的是,pulseaudio在
/dev/snd/
目录下检查字符设备的存在,或者在/proc/asound/
目录下检查文件/文件夹的存在,但它所寻找的设备或文件尚不存在,并且稍后由加载的内核模块创建。为了验证我的猜想,我试图在启动过程中对该服务运行strace。我已经更新了/usr/lib/systemd/user/pulseaudio.service文件,并将ExecStart行更改如下:
ExecStart=strace -e trace=file -o /home/user/trace_erronly_fail.log -Z -f -tt /usr/bin/pulseaudio --daemonize=no --log-target=journal --log-level=debug
运行
systemctl --user daemon-reload
之后,我尝试启动服务测试strace是否能正常工作,但是服务启动失败。服务状态报告如下:x pulseaudio.service - Sound Service
Loaded: loaded (/usr/lib/systemd/user/pulseaudio.service; enabled; vendor preset: enabled)
Active: failed (Result: core-dump) since Wed 2023-04-19 12:33:21 UTC; 2s ago
TriggeredBy: x pulseaudio.socket
Process: 1673 ExecStart=strace -e trace=file -o /home/user/trace_erronly_fail.log -Z -f -tt /usr/bin/pulseaudio --daemonize=no --log-target=journal --log-level=debug (code=dumped, signal=SYS)
Main PID: 1673 (code=dumped, signal=SYS)
CPU: 49ms
Apr 19 12:33:21 Ubuntu-V8 systemd[780]: pulseaudio.service: Scheduled restart job, restart counter is at 5.
Apr 19 12:33:21 Ubuntu-V8 systemd[780]: Stopped Sound Service.
Apr 19 12:33:21 Ubuntu-V8 systemd[780]: pulseaudio.service: Start request repeated too quickly.
Apr 19 12:33:21 Ubuntu-V8 systemd[780]: pulseaudio.service: Failed with result 'core-dump'.
Apr 19 12:33:21 Ubuntu-V8 systemd[780]: Failed to start Sound Service.
似乎它正在引发一个SIGSYS信号,根据
man 7 signal
的说明,当出现错误的系统调用时会引发该信号。我不太确定为什么会出现这个问题。我可以手动运行ExecStart命令而不引发SIGSYS信号,所以只有在作为systemd服务运行时才会出现这个问题。
那么,我应该如何在作为systemd服务运行时让strace正常工作呢?