| Summary: | The QEMU compiled by Buildroot does not support alsa or pulseaudio drivers for soundcard forwarding | ||
|---|---|---|---|
| Product: | buildroot | Reporter: | WZab <wzab01> |
| Component: | Other | Assignee: | unassigned |
| Status: | RESOLVED MOVED | ||
| Severity: | normal | CC: | buildroot, yann.morin.1998 |
| Priority: | P5 | ||
| Version: | 2021.02.1 | ||
| Target Milestone: | --- | ||
| Hardware: | All | ||
| OS: | Linux | ||
| Host: | Target: | ||
| Build: | |||
| Attachments: |
The minimalistic Buildroot config that shows the reported problem
Patch with temporary work-around Patch with temporary work-around |
||
|
Description
WZab
2021-05-05 19:42:02 UTC
You have to add host-alsa-lib and host-pulseaudio to the QEMU_DEPENDENCIES for this to work. Buildroot does not want to depend on anything pre-installed on the host (if you're OK with stuff that is pre-installed on the host, you can just as well install qemu-system-arm, right?) Of course, currently there is no host package for alsa-lib or pulseaudio, so you'll have to add them first. And pulsaudio has dependencies for which no host package exits either, so this will take a bit of work... I have extracted the configuration of the libpulse and alsa from the system pkgconf:
$ pkgconf libpulse --libs
-L/usr/lib/x86_64-linux-gnu -lpulse
$ pkgconf libpulse --cflags
-D_REENTRANT
$ pkg-config alsa --libs
-L/usr/lib/x86_64-linux-gnu -lasound
$ pkg-config alsa --cflags
Then I have injected them by hand to the "configure" script in the output/build/host-qemu-5.2.0/ :
##########################################
# Sound support libraries probe
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
for drv in $audio_drv_list; do
case $drv in
alsa | try-alsa)
if true; then
alsa_libs="-L/usr/lib/x86_64-linux-gnu -lasound"
alsa_cflags=""
alsa=yes
if test "$drv" = "try-alsa"; then
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
fi
else
if test "$drv" = "try-alsa"; then
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
else
error_exit "$drv check failed" \
"Make sure to have the $drv libs and headers installed."
fi
fi
;;
pa | try-pa)
if true; then
libpulse=yes
pulse_libs="-L/usr/lib/x86_64-linux-gnu -lpulse"
pulse_cflags="-D_REENTRANT"
if test "$drv" = "try-pa"; then
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
fi
else
if test "$drv" = "try-pa"; then
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
else
error_exit "$drv check failed" \
"Make sure to have the $drv libs and headers installed."
fi
fi
;;
After that, and with the following:
# Override CPP, as it expects to be able to call it like it'd
# call the compiler.
define HOST_QEMU_CONFIGURE_CMDS
unset TARGET_DIR; \
cd $(@D); $(HOST_CONFIGURE_OPTS) CPP="$(HOSTCC) -E" \
./configure \
--target-list="$(HOST_QEMU_TARGETS)" \
--prefix="$(HOST_DIR)" \
--interp-prefix=$(STAGING_DIR) \
--cc="$(HOSTCC)" \
--host-cc="$(HOSTCC)" \
--extra-cflags="$(HOST_QEMU_CFLAGS)" \
--extra-ldflags="$(HOST_LDFLAGS)" \
--audio-drv-list="alsa,pa,oss" \
--meson=$(HOST_DIR)/bin/meson \
--ninja=$(HOST_DIR)/bin/ninja \
--disable-bzip2 \
--disable-containers \
--disable-curl \
--disable-libssh \
--disable-linux-io-uring \
--disable-sdl \
--disable-vhost-user-blk-server \
--disable-virtiofsd \
--disable-vnc-jpeg \
--disable-vnc-png \
--disable-vnc-sasl \
--disable-tests \
$(HOST_QEMU_OPTS)
endef
in the package/qemu/qemu.mk , I was able to compile QEMU with supported alsa and pa drivers:
./qemu-system-aarch64 --audio-help
Environment variable based configuration deprecated.
Please use the new -audiodev option.
Equivalent -audiodev to your current environment variables:
(Since you didn't specify QEMU_AUDIO_DRV, I'll list all possibilities)
-audiodev id=alsa,driver=alsa
-audiodev id=pa,driver=pa
-audiodev id=oss,driver=oss
-audiodev id=none,driver=none
It is an awful workaround, but at least it works...
(In reply to Arnout Vandecappelle from comment #1) Unfortunately we have to use the patched QEMU (to add the GUI-connected GPIO emulation for our students - http://koral.ise.pw.edu.pl/~wzab/artykuly/Teaching_electronics_disease_virtual_lab.pdf ). The version for BR 2021.02 is in https://github.com/wzab/BR_Internet_Radio/tree/gpio_simple_2021.02/QemuVirt64 Created attachment 8926 [details]
Patch with temporary work-around
Created attachment 8931 [details]
Patch with temporary work-around
This is a temporary work-around - a patch to the qemu package.
It simply switches to using the standard pkg-config, when the sound libraries are detected and configured. After that the original Buildroot-provided pkg-config is restored.
The correct operation is confirmed on Debian/testing.
The temporary workaround is also available in the BR_Internet_Radio: https://github.com/wzab/BR_Internet_Radio/commit/bdf7afed292ec0408fe908df42a4bc298031141a https://github.com/wzab/BR_Internet_Radio/commit/2117504dc040cdc679e379eee87cde3c498c694d Thank you for your report.
The issue tracker for the Buildroot project has been moved to
the Gitlab.com issue tracker:
https://gitlab.com/buildroot.org/buildroot/-/issues
We are taking this opportunity to close old issues in this old
tracker. If you believe your issue is still relevant, please
open one in the new issue tracker.
Thank you!
|