[alsa-devel] alsa-lib failing at runtime
Hi All,
I have found a problem with alsa-lib 1.0.19 running on an embedded arm board. It all compiles ok but aplay fails to play a .wav file and the kernel reports this error:
ALSA sound/core/pcm_native.c:2587: unknown ioctl = 0x80184132
Decoding this ioctl it is SNDRV_PCM_IOCTL_CHANNEL_INFO defined in asound.h.
The reason it is not working is that the kernel and alsa-lib think that the sndrv_pcm_channel_info struct is different sizes.
The definition in asound.h is:
struct sndrv_pcm_channel_info { unsigned int channel; off_t offset; /* mmap offset */ unsigned int first; /* offset to first sample in bits */ unsigned int step; /* samples distance in bits */ };
The problem is that when compiling linux it thinks off_t is 4 bytes but when compiling alsa-lib it thought it was 8 bytes.
After discussion on the buildroot mailing list (see http://lists.busybox.net/pipermail/buildroot/2009-January/025458.html) it seems like for the kernel off_t is always 4 bytes but for user space it can be either 4 or 8 bytes depending on whether large file support is enabled.
It appears that the fix is that the type of offset should be changed to long.
Hope this all makes sense.
Thanks,
Will.
At Wed, 28 Jan 2009 13:43:51 +0000, Will Wagner wrote:
Hi All,
I have found a problem with alsa-lib 1.0.19 running on an embedded arm board. It all compiles ok but aplay fails to play a .wav file and the kernel reports this error:
ALSA sound/core/pcm_native.c:2587: unknown ioctl = 0x80184132
Decoding this ioctl it is SNDRV_PCM_IOCTL_CHANNEL_INFO defined in asound.h.
The reason it is not working is that the kernel and alsa-lib think that the sndrv_pcm_channel_info struct is different sizes.
The definition in asound.h is:
struct sndrv_pcm_channel_info { unsigned int channel; off_t offset; /* mmap offset */ unsigned int first; /* offset to first sample in bits */ unsigned int step; /* samples distance in bits */ };
The problem is that when compiling linux it thinks off_t is 4 bytes but when compiling alsa-lib it thought it was 8 bytes.
After discussion on the buildroot mailing list (see http://lists.busybox.net/pipermail/buildroot/2009-January/025458.html) it seems like for the kernel off_t is always 4 bytes but for user space it can be either 4 or 8 bytes depending on whether large file support is enabled.
It appears that the fix is that the type of offset should be changed to long.
Hope this all makes sense.
Yes, you're right. I thought I've already fixed this, but it seems it didn't go out from my local tree and forgot since then.
Now fixed on GIT tree.
Thanks!
Takashi
participants (2)
-
Takashi Iwai
-
Will Wagner