All of lore.kernel.org
 help / color / mirror / Atom feed
* Inappropriate ioctl for device on alsalib with uclibc and arm platform
@ 2007-11-19 15:21 Federico Fuga
  2007-11-20 13:58 ` Takashi Iwai
  0 siblings, 1 reply; 5+ messages in thread
From: Federico Fuga @ 2007-11-19 15:21 UTC (permalink / raw)
  To: alsa-devel

Hi,

Maybe I am a little bit off-topic here, but I think this question may be related with a bug (maybe not in the alsa library, but I am a little confused now), so I apologize in advance.
I am building a uclibc-based system on arm board.
I have compiled the library 1.0.14a with uClibc 0.9.29 and kernel
2.6.23.1 / kernel headers 2.6.22.
Settings the config params of mixer with "alsactl restore" fails with
an "inappropriate ioctl for device" error:

# alsactl restore
alsactl: set_control:1159: Cannot write control '2:0:0:Speaker Playback
Volume:0' : Inappropriate ioctl for device

while traceing with strace I see that:

open("/usr/lib/libasound.so.2", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0755, st_size=716844, ...}) = 0
close(4)                                = 0
open("/dev/snd/controlC0", O_RDONLY)    = 4
close(4)                                = 0
open("/dev/snd/controlC0", O_RDWR)      = 4
ioctl(4, USBDEVFS_CONTROL, 0xbeab09ec)  = 0
ioctl(4, UI_DEV_CREATE, 0xbeab0ad0)     = 0
ioctl(4, USBDEVFS_CONNECTINFO, 0xbeab0654) = 0
ioctl(4, USBDEVFS_HUB_PORTINFO, 0xbeab0768) = -1 ENOTTY (Inappropriate
ioctl for device)
write(2, "alsactl", 7alsactl)                  = 7


but aplay see all the board and seems to work properly:

# aplay  -l
**** List of PLAYBACK Hardware Devices ****
card 0: EMX270 [EM-X270], device 0: AC97 HiFi AC97 HiFi-AC97-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: EMX270 [EM-X270], device 1: AC97 Aux AC97 Aux-AC97-1 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
# aplay -L
default:CARD=EMX270
    EM-X270,
    Default Audio Device
null
    Discard all samples (playback) or generate zero samples (capture)
# speaker-test

speaker-test 1.0.14

Playback device is default
Stream parameters are 48000Hz, S16_LE, 1 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 8 to 32768
Period size range from 8 to 2040
Using max buffer size 32768
Periods = 4
was set period_size = 1024
was set buffer_size = 32768
 0 - Front Left
Time per period = 2.528627
 0 - Front Left
Time per period = 2.999174

But I hear no sound (the levels are all off).
In a similar installation based on glibc (Armstrong linux) with the same
version of kernel, alsa and all other stuff works correctly.

root@em-x270:~$ cat /proc/asound/devices
  0: [ 0]   : control
 16: [ 0- 0]: digital audio playback
 17: [ 0- 1]: digital audio playback
 24: [ 0- 0]: digital audio capture
 33:        : timer


The device nodes in /dev/sound are created by udev, and major/minor codes and permissions seems ok.
Can you give me some hint on how to solve this issue?

Thank you in advance

ing. Federico Fuga

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Inappropriate ioctl for device on alsalib with uclibc and arm platform
  2007-11-19 15:21 Inappropriate ioctl for device on alsalib with uclibc and arm platform Federico Fuga
@ 2007-11-20 13:58 ` Takashi Iwai
  2007-11-20 16:51   ` Federico Fuga
  0 siblings, 1 reply; 5+ messages in thread
From: Takashi Iwai @ 2007-11-20 13:58 UTC (permalink / raw)
  To: Federico Fuga; +Cc: alsa-devel

At Mon, 19 Nov 2007 16:21:39 +0100,
Federico Fuga wrote:
> 
> Hi,
> 
> Maybe I am a little bit off-topic here, but I think this question may be related with a bug (maybe not in the alsa library, but I am a little confused now), so I apologize in advance.
> I am building a uclibc-based system on arm board.
> I have compiled the library 1.0.14a with uClibc 0.9.29 and kernel
> 2.6.23.1 / kernel headers 2.6.22.
> Settings the config params of mixer with "alsactl restore" fails with
> an "inappropriate ioctl for device" error:
> 
> # alsactl restore
> alsactl: set_control:1159: Cannot write control '2:0:0:Speaker Playback
> Volume:0' : Inappropriate ioctl for device
> 
> while traceing with strace I see that:
> 
> open("/usr/lib/libasound.so.2", O_RDONLY) = 4
> fstat(4, {st_mode=S_IFREG|0755, st_size=716844, ...}) = 0
> close(4)                                = 0
> open("/dev/snd/controlC0", O_RDONLY)    = 4
> close(4)                                = 0
> open("/dev/snd/controlC0", O_RDWR)      = 4
> ioctl(4, USBDEVFS_CONTROL, 0xbeab09ec)  = 0
> ioctl(4, UI_DEV_CREATE, 0xbeab0ad0)     = 0
> ioctl(4, USBDEVFS_CONNECTINFO, 0xbeab0654) = 0
> ioctl(4, USBDEVFS_HUB_PORTINFO, 0xbeab0768) = -1 ENOTTY (Inappropriate

Looks like the definition of SNDRV_CTL_ICOTL_ELEM_WRITE doesn't match
with the user-space and the kernel, most likely the size of struct
snd_ctl_elem_value.  This might be a word alignment issue.


Takashi

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Inappropriate ioctl for device on alsalib with uclibc and arm platform
  2007-11-20 13:58 ` Takashi Iwai
@ 2007-11-20 16:51   ` Federico Fuga
  2007-11-21 10:11     ` Takashi Iwai
  0 siblings, 1 reply; 5+ messages in thread
From: Federico Fuga @ 2007-11-20 16:51 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel

Takashi Iwai ha scritto:
> At Mon, 19 Nov 2007 16:21:39 +0100,
> Federico Fuga wrote:
> # alsactl restore
> alsactl: set_control:1159: Cannot write control '2:0:0:Speaker Playback
> Volume:0' : Inappropriate ioctl for device
>
> while traceing with strace I see that:
>
> open("/usr/lib/libasound.so.2", O_RDONLY) = 4
> fstat(4, {st_mode=S_IFREG|0755, st_size=716844, ...}) = 0
> close(4)                                = 0
> open("/dev/snd/controlC0", O_RDONLY)    = 4
> close(4)                                = 0
> open("/dev/snd/controlC0", O_RDWR)      = 4
> ioctl(4, USBDEVFS_CONTROL, 0xbeab09ec)  = 0
> ioctl(4, UI_DEV_CREATE, 0xbeab0ad0)     = 0
> ioctl(4, USBDEVFS_CONNECTINFO, 0xbeab0654) = 0
> ioctl(4, USBDEVFS_HUB_PORTINFO, 0xbeab0768) = -1 ENOTTY (Inappropriate
>   
>
> Looks like the definition of SNDRV_CTL_ICOTL_ELEM_WRITE doesn't match
> with the user-space and the kernel, most likely the size of struct
> snd_ctl_elem_value.  This might be a word alignment issue.
>
>   

Hi Takashi,

thank you for your response. I have tracked the problem to the kernel
space and found exactly what you say (structure size). I didn't think
about word alignment, I will try by changeing the gcc options.
Do you think I should look at the cross compiler or at the parameters
passed to gcc while compiling the alsa library?
Thank you very much.

Federico

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Inappropriate ioctl for device on alsalib with uclibc and arm platform
  2007-11-20 16:51   ` Federico Fuga
@ 2007-11-21 10:11     ` Takashi Iwai
  2007-11-23 17:49       ` Federico Fuga
  0 siblings, 1 reply; 5+ messages in thread
From: Takashi Iwai @ 2007-11-21 10:11 UTC (permalink / raw)
  To: Federico Fuga; +Cc: alsa-devel

At Tue, 20 Nov 2007 17:51:22 +0100,
Federico Fuga wrote:
> 
> Takashi Iwai ha scritto:
> > At Mon, 19 Nov 2007 16:21:39 +0100,
> > Federico Fuga wrote:
> > # alsactl restore
> > alsactl: set_control:1159: Cannot write control '2:0:0:Speaker Playback
> > Volume:0' : Inappropriate ioctl for device
> >
> > while traceing with strace I see that:
> >
> > open("/usr/lib/libasound.so.2", O_RDONLY) = 4
> > fstat(4, {st_mode=S_IFREG|0755, st_size=716844, ...}) = 0
> > close(4)                                = 0
> > open("/dev/snd/controlC0", O_RDONLY)    = 4
> > close(4)                                = 0
> > open("/dev/snd/controlC0", O_RDWR)      = 4
> > ioctl(4, USBDEVFS_CONTROL, 0xbeab09ec)  = 0
> > ioctl(4, UI_DEV_CREATE, 0xbeab0ad0)     = 0
> > ioctl(4, USBDEVFS_CONNECTINFO, 0xbeab0654) = 0
> > ioctl(4, USBDEVFS_HUB_PORTINFO, 0xbeab0768) = -1 ENOTTY (Inappropriate
> >   
> >
> > Looks like the definition of SNDRV_CTL_ICOTL_ELEM_WRITE doesn't match
> > with the user-space and the kernel, most likely the size of struct
> > snd_ctl_elem_value.  This might be a word alignment issue.
> >
> >   
> 
> Hi Takashi,
> 
> thank you for your response. I have tracked the problem to the kernel
> space and found exactly what you say (structure size). I didn't think
> about word alignment, I will try by changeing the gcc options.
> Do you think I should look at the cross compiler or at the parameters
> passed to gcc while compiling the alsa library?

Well, I vaguely remember about the ARM cross-compiling problem.
Checking the mail archive might help...


Takashi

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Inappropriate ioctl for device on alsalib with uclibc and arm platform
  2007-11-21 10:11     ` Takashi Iwai
@ 2007-11-23 17:49       ` Federico Fuga
  0 siblings, 0 replies; 5+ messages in thread
From: Federico Fuga @ 2007-11-23 17:49 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel

Takashi Iwai ha scritto:
>>> ioctl(4, USBDEVFS_HUB_PORTINFO, 0xbeab0768) = -1 ENOTTY (Inappropriate
>>>   
>>>
>>> Looks like the definition of SNDRV_CTL_ICOTL_ELEM_WRITE doesn't match
>>> with the user-space and the kernel, most likely the size of struct
>>> snd_ctl_elem_value.  This might be a word alignment issue.
>>>       
> Well, I vaguely remember about the ARM cross-compiling problem.
> Checking the mail archive might help...
>   

Hi,

I have solved that problem.
While compiling the kernel, the alsa modules (not the alsa-driver, but
that one included in the "vanilla" sources) are compiled with the option
-mabi=aapcs-linux.
When compiling the library, that option is missing, using, as default,
another abi and, evidently, another data alignment => another struct
size => another ioctl.
I send you that for reference, but I think that a more general solution
should be nice.
Best regards, ant thank you for your interest.

ing. Federico Fuga

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2007-11-23 17:48 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-19 15:21 Inappropriate ioctl for device on alsalib with uclibc and arm platform Federico Fuga
2007-11-20 13:58 ` Takashi Iwai
2007-11-20 16:51   ` Federico Fuga
2007-11-21 10:11     ` Takashi Iwai
2007-11-23 17:49       ` Federico Fuga

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.