Re: [alsa-devel] Using aplay and arecord on an ARM
On 6/20/07, Paul Kavan pkavan@gmail.com wrote:
Okay:
Here is where I ran into troubles yesterday. I am working on configuring alsa-utils. When I do:
CC=arm-linux-gcc ./configure --target=arm-linux --with-versioned=no --prefix=/usr --host=i686-pc-linux-gnu
I get the error:
grhuser@pcL7:$ CC=arm-linux-gcc ./configure --target=arm-linux --with-versioned=no --prefix=/usr --host=i686-pc-linux-gnu configure: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used. checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking for i686-pc-linux-gnu-strip... no checking for strip... strip checking whether NLS is requested... yes checking for msgfmt... /usr/bin/msgfmt checking for gmsgfmt... /usr/bin/msgfmt checking for xgettext... /usr/bin/xgettext checking for msgmerge... /usr/bin/msgmerge checking for style of include used by make... GNU checking for i686-pc-linux-gnu-gcc... arm-linux-gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... yes checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether arm-linux-gcc accepts -g... yes checking for arm-linux-gcc option to accept ISO C89... none needed checking dependency style of arm-linux-gcc... gcc3 checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking for ld used by GCC... /home/grhuser/Linux_Builds/buildroot/build_arm/staging_dir/arm-linux-uclibc/bin/ld checking if the linker (/home/grhuser/Linux_Builds/buildroot/build_arm/staging_dir/arm-linux-uclibc/bin/ld) is GNU ld... yes checking for shared library run path origin... done checking for CFPreferencesCopyAppValue... no checking for CFLocaleCopyCurrent... no checking for GNU gettext in libc... no checking for iconv... no, consider installing GNU libiconv checking for GNU gettext in libintl... no checking whether to use NLS... no checking for i686-pc-linux-gnu-gcc... (cached) arm-linux-gcc checking whether we are using the GNU C compiler... (cached) yes checking whether arm-linux-gcc accepts -g... (cached) yes checking for arm-linux-gcc option to accept ISO C89... (cached) none needed checking dependency style of arm-linux-gcc... (cached) gcc3 checking for a BSD-compatible install... /usr/bin/install -c checking whether ln -s works... yes checking for ALSA CFLAGS... checking for ALSA LDFLAGS... -lasound -lm -ldl -lpthread checking for libasound headers version >= 1.0.12... not present. configure: error: Sufficiently new version of libasound not found.
I know there has to be a flag or something here I need to set. Does anyone know what that might be?
Paul
I think what occurs here is that the configure script is using my cross-compilers and associated libs in
$HOME/Linux_Builds/buildroot/build_arm/staging_dir/
while the libs are actually given in
$HOME/Linux_Builds/buildroot/build_arm/root/usr/lib/
I am looking at the README and INSTALL and do not see a solution to this.
Does anyone have a solution to this?
Thanks.
Paul
At Wed, 20 Jun 2007 10:40:51 -0500, Paul Kavan wrote:
On 6/20/07, Paul Kavan pkavan@gmail.com wrote:
Okay:
Here is where I ran into troubles yesterday. I am working on configuring alsa-utils. When I do:
CC=arm-linux-gcc ./configure --target=arm-linux --with-versioned=no --prefix=/usr --host=i686-pc-linux-gnu
I get the error:
grhuser@pcL7:$ CC=arm-linux-gcc ./configure --target=arm-linux --with-versioned=no --prefix=/usr --host=i686-pc-linux-gnu configure: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used. checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking for i686-pc-linux-gnu-strip... no checking for strip... strip checking whether NLS is requested... yes checking for msgfmt... /usr/bin/msgfmt checking for gmsgfmt... /usr/bin/msgfmt checking for xgettext... /usr/bin/xgettext checking for msgmerge... /usr/bin/msgmerge checking for style of include used by make... GNU checking for i686-pc-linux-gnu-gcc... arm-linux-gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... yes checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether arm-linux-gcc accepts -g... yes checking for arm-linux-gcc option to accept ISO C89... none needed checking dependency style of arm-linux-gcc... gcc3 checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking for ld used by GCC... /home/grhuser/Linux_Builds/buildroot/build_arm/staging_dir/arm-linux-uclibc/bin/ld checking if the linker (/home/grhuser/Linux_Builds/buildroot/build_arm/staging_dir/arm-linux-uclibc/bin/ld) is GNU ld... yes checking for shared library run path origin... done checking for CFPreferencesCopyAppValue... no checking for CFLocaleCopyCurrent... no checking for GNU gettext in libc... no checking for iconv... no, consider installing GNU libiconv checking for GNU gettext in libintl... no checking whether to use NLS... no checking for i686-pc-linux-gnu-gcc... (cached) arm-linux-gcc checking whether we are using the GNU C compiler... (cached) yes checking whether arm-linux-gcc accepts -g... (cached) yes checking for arm-linux-gcc option to accept ISO C89... (cached) none needed checking dependency style of arm-linux-gcc... (cached) gcc3 checking for a BSD-compatible install... /usr/bin/install -c checking whether ln -s works... yes checking for ALSA CFLAGS... checking for ALSA LDFLAGS... -lasound -lm -ldl -lpthread checking for libasound headers version >= 1.0.12... not present. configure: error: Sufficiently new version of libasound not found.
I know there has to be a flag or something here I need to set. Does anyone know what that might be?
Paul
I think what occurs here is that the configure script is using my cross-compilers and associated libs in
$HOME/Linux_Builds/buildroot/build_arm/staging_dir/
while the libs are actually given in
$HOME/Linux_Builds/buildroot/build_arm/root/usr/lib/
I am looking at the README and INSTALL and do not see a solution to this.
For configure script using AM_PATH_ALSA(), you can pass the following options: --with-alsa-inc-prefix=$HOME/Linux_Builds/buildroot/build_arm/root/usr/include --with-alsa-prefix=$HOME/Linux_Builds/buildroot/build_arm/root/usr/lib
Takashi
--with-alsa-inc-prefix=$HOME/Linux_Builds/buildroot/build_arm/root/usr/include
--with-alsa-prefix=$HOME/Linux_Builds/buildroot/build_arm/root/usr/lib
Takashi
Takashi:
Thank you. That got me a little further. Now, I am hitting this error:
... checking for libasound headers version >= 1.0.12... found. checking for snd_ctl_open in -lasound... yes checking how to run the C preprocessor... arm-linux-gcc -E checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for ANSI C header files... yes checking for initscr in -lncurses... no checking for initscr in -lcurses... no configure: error: this packages requires a curses library
...which I could swear I have....will look into this.
Paul
FWIW, alsamixer is the only thing that needs curses, when I did an embedded linux + ALSA project I just passed --disable-alsamixer to work around it, and used amixer.
Lee
On 6/20/07, Paul Kavan pkavan@gmail.com wrote:
--with-alsa-inc-prefix=$HOME/Linux_Builds/buildroot/build_arm/root/usr/include
--with-alsa-prefix=$HOME/Linux_Builds/buildroot/build_arm/root/usr/lib
Takashi
Takashi:
Thank you. That got me a little further. Now, I am hitting this error:
... checking for libasound headers version >= 1.0.12... found. checking for snd_ctl_open in -lasound... yes checking how to run the C preprocessor... arm-linux-gcc -E checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for ANSI C header files... yes checking for initscr in -lncurses... no checking for initscr in -lcurses... no configure: error: this packages requires a curses library
...which I could swear I have....will look into this.
Paul
Paul David Kavan Project Engineer GRH Electronics, Inc. 402-734-4900 pkavan@gmail.com
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
On 6/20/07, Lee Revell rlrevell@joe-job.com wrote:
FWIW, alsamixer is the only thing that needs curses, when I did an embedded linux + ALSA project I just passed --disable-alsamixer to work around it, and used amixer.
Lee
Lee:
Thanks. I do not think I need a mixer at all...doing mono voice on a dumb single channel codec.
Thanks again.
Paul
At Wed, 20 Jun 2007 11:18:13 -0500, Paul Kavan wrote:
On 6/20/07, Lee Revell rlrevell@joe-job.com wrote:
FWIW, alsamixer is the only thing that needs curses, when I did an embedded linux + ALSA project I just passed --disable-alsamixer to work around it, and used amixer. Lee
Lee:
Thanks. I do not think I need a mixer at all...doing mono voice on a dumb single channel codec.
BTW, you can try salsa-lib for such a purpose:
ftp://ftp.suse.com/pub/people/tiwai/salsa-lib/
I've not tested with ARM, so it'd be appreciated if someone lets me know whether it works.
Takashi
Gentleman:
I have the alsa-libs and alsa-utils on my board now. I want to thank all for the time and advice.
For the benefit of the archives, I have a at91sam9260ek running Linux 2.6.22-rc1. I am using buildroot to for my cross-compiling tools and to generate my rfs. To get the alsa libs and utils on board, I did the following:
For alsa-libs: CC=arm-linux-gcc ./configure --target=arm-linux --host=i686-pc-linux-gnu --prefix=/usr
and then make install DESTDIR=$HOME/buildroot/build_arm/root/
where the rfs for my target is built in $HOME/buildroot/build_arm/root before making the image.
For alsa-utils: CC=arm-linux-gcc ./configure --target=arm-linux --host=i686-pc-linux-gnu --prefix=/usr --with-alsa-inc-prefix=$HOME/Linux_Builds/buildroot/build_arm/root/usr/include --with-alsa-prefix=$HOME/Linux_Builds/buildroot/build_arm/root/usr/lib --disable-alsamixer
and then make install DESTDIR=/home/grhuser/buildroot/build_arm/root/
Then I remade the image and booted my board. I do not have the nodes built automatically yet, so I had to do that....giving me:
/dev/snd $ ls -l crw-rw-rw- 1 root root 116, 0 Dec 31 17:08 controlC0 crw-rw-rw- 1 root root 116, 24 Dec 31 17:09 pcmC0D0c crw-rw-rw- 1 root root 116, 16 Dec 31 17:10 pcmC0D0p
when I check with aplay, I get:
/dev/snd $ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: GRHEKW6811 [GRH_EK_W6811], device 0: W6811 W6811-PCM-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0
and with arecord: /dev/snd $ arecord -l **** List of CAPTURE Hardware Devices **** card 0: GRHEKW6811 [GRH_EK_W6811], device 0: W6811 W6811-PCM-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0
However, I have been unable to achieve any kind of playback using speaker-test or aplay. The speaker pops like it wants to play, but I get the following when trying speaker test:
/dev/snd $ speaker-test -D default -r 8000 -f 1020 -F S8
speaker-test 1.0.14
Playback device is default Stream parameters are 8000Hz, S8, 1 channels Using 16 octaves of pink noise Rate set to 8000Hz (requested 8000Hz) Buffer size range from 64 to 32768 Period size range from 32 to 8192 Using max buffer size 32768 Periods = 4 was set period_size = 0 was set buffer_size = 32768 Unable to set sw params for playback: Invalid argument Setting of swparams failed: Invalid argument /dev/snd $
Anyone know where I should look for the problem?
Thanks.
Paul
*************************************** Paul David Kavan Project Engineer GRH Electronics, Inc. 402-734-4900 pkavan@gmail.com ***************************************
Paul Kavan wrote:
...
For alsa-libs: CC=arm-linux-gcc ./configure --target=arm-linux --host=i686-pc-linux-gnu --prefix=/usr
...
However, I have been unable to achieve any kind of playback using speaker-test or aplay. The speaker pops like it wants to play, but I get the following when trying speaker test:
/dev/snd $ speaker-test -D default -r 8000 -f 1020 -F S8
speaker-test 1.0.14
Playback device is default Stream parameters are 8000Hz, S8, 1 channels Using 16 octaves of pink noise Rate set to 8000Hz (requested 8000Hz) Buffer size range from 64 to 32768 Period size range from 32 to 8192 Using max buffer size 32768 Periods = 4 was set period_size = 0 was set buffer_size = 32768 Unable to set sw params for playback: Invalid argument Setting of swparams failed: Invalid argument /dev/snd $
Anyone know where I should look for the problem?
Hi Paul,
Try adding the option "--with-versioned=no" to the alsa-libs configure.
../fam
Frank:
Try adding the option "--with-versioned=no" to the alsa-libs configure.
That did the trick in terms of the sw params problem. With the default alsa.conf file, I can now get the speaker to make some noise. However, doing:
speaker-test -r8000 -f1000 -FS8 -tsine -l5
gives me a slightly distorted sine wave that has a period of half of what I would expect.
Frank, this is what I have for the small conf. I hope it is the right one:
pcm.!default { type hw card 0 } pcm.hw { type hw card 0 device 0 subdevice 0 } ctl.!default { type hw card 0 } ctl.hw { type hw card 0 }
ctl.w6811 { type hw card 0 } pcm.w6811 { type hw card 0 device 0 subdevice 0 }
ctl.!default = ctl.w6811 pcm.!default = pcm.w6811
ctl.hw { @args[ CARD ] @args.CARD { type string default "0" } type hw card $CARD }
pcm.hw { @args[ CARD DEV SUBDEV ] @args.CARD { type string default "0" } @args.DEV { type integer default 0 } @args.SUBDEV { type integer default 0 } type hw card $CARD device $DEV subdevice $SUBDEV }
However, when I use this as the conf, I get the following with aplay -l
/usr/share/alsa $ aplay -l **** List of PLAYBACK Hardware Devices **** ALSA lib conf.c:975:(parse_value) card is not a string ALSA lib conf.c:1588:(snd_config_load1) _toplevel_:45:1:Invalid argument ALSA lib conf.c:3066:(snd_config_update_r) /usr/share/alsa/alsa.conf may be old or corrupted: consit aplay: device_list:213: control open (0): Invalid argument
Not sure if I have the alsa.conf correct. So maybe it is a problem there. You mentioned a bare bones .conf, but I do not this is the only one I have in my email.
Paul
Paul Kavan wrote:
Frank:
Try adding the option "--with-versioned=no" to the alsa-libs configure.
That did the trick in terms of the sw params problem. With the default alsa.conf file, I can now get the speaker to make some noise. However, doing:
speaker-test -r8000 -f1000 -FS8 -tsine -l5
gives me a slightly distorted sine wave that has a period of half of what I would expect.
Better than no sound :) At least something is getting through ALSA and ASoC to your codec.
You may need to adjust the RCMR, RFRM, TCMR, TFRM register settings in sound/soc/at91/at91-ssc.c to send the data in the mode that your codec expects. I have only tested I2S and DSP_A modes with S16_LE data. It's fairly easy to add new modes.
Frank, this is what I have for the small conf. I hope it is the right one:
pcm.!default { type hw card 0 } pcm.hw { type hw card 0 device 0 subdevice 0 } ctl.!default { type hw card 0 } ctl.hw { type hw card 0 }
ctl.w6811 { type hw card 0 } pcm.w6811 { type hw card 0 device 0 subdevice 0 }
ctl.!default = ctl.w6811 pcm.!default = pcm.w6811
ctl.hw { @args[ CARD ] @args.CARD { type string default "0" } type hw card $CARD }
pcm.hw { @args[ CARD DEV SUBDEV ] @args.CARD { type string default "0" } @args.DEV { type integer default 0 } @args.SUBDEV { type integer default 0 } type hw card $CARD device $DEV subdevice $SUBDEV }
However, when I use this as the conf, I get the following with aplay -l
/usr/share/alsa $ aplay -l **** List of PLAYBACK Hardware Devices **** ALSA lib conf.c:975:(parse_value) card is not a string ALSA lib conf.c:1588:(snd_config_load1) _toplevel_:45:1:Invalid argument ALSA lib conf.c:3066:(snd_config_update_r) /usr/share/alsa/alsa.conf may be old or corrupted: consit aplay: device_list:213: control open (0): Invalid argument
Not sure if I have the alsa.conf correct. So maybe it is a problem there. You mentioned a bare bones .conf, but I do not this is the only one I have in my email.
I don't see anything wrong with this alsa.conf, but I'm no expert. It is virtually the same as the one I am using, but I am using ALSA 1.0.13.
Here is the bare-bones config file that I was using before I added a second sound device:
pcm.!default { type hw card 0 } pcm.hw { type hw card 0 device 0 subdevice 0 } ctl.!default { type hw card 0 } ctl.hw { type hw card 0 }
../fam
Frank:
gives me a slightly distorted sine wave that has a period of half of
what I would expect.
Better than no sound :) At least something is getting through ALSA and ASoC to your codec.
Very true indeed. It was nice hearing a sine wave come out....even if it was not ready for prime time.
You may need to adjust the RCMR, RFRM, TCMR, TFRM register settings in
sound/soc/at91/at91-ssc.c to send the data in the mode that your codec expects. I have only tested I2S and DSP_A modes with S16_LE data. It's fairly easy to add new modes.
I will do this. I can probe the clock and data lines to make sure they are looking like what I expect and then look to the modes to see what I need to change in the directories.
Here is the bare-bones config file that I was using before I added a second sound device:
pcm.!default { type hw card 0 } pcm.hw { type hw card 0 device 0 subdevice 0 } ctl.!default { type hw card 0 } ctl.hw { type hw card 0 }
I will give this conf a whirl and see what it does.
Thanks.
Paul
You may need to adjust the RCMR, RFRM, TCMR, TFRM register settings in
sound/soc/at91/at91- ssc.c to send the data in the mode that your codec expects. I have only tested I2S and DSP_A modes with S16_LE data. It's fairly easy to add new modes.
This is certainly part of the problem. I probed the clocks and the frame sync lines and they are fine for the most part. However, I can tell from the output that I need to change the default on TD0 to '1' for starters. I also think that I need to change the format so that the atmel board reads on the falling edge after sync. I think it already writes on the rising edge, but will have to see. Also, the width of the sync is one period of the bitclock....and I need at least two, so I will need to change that.
Fortunately, I have done a lot of grunt work already in writing my basic ssc driver for that codec. Now I have to dig into at91-ssc.c to see how to modify that.
pcm.!default { type hw card 0 } pcm.hw { type hw card 0 device 0 subdevice 0 } ctl.!default { type hw card 0 } ctl.hw { type hw card 0 }
The bare bones conf is not working for me and I am getting:
/usr/share/alsa $ aplay -l **** List of PLAYBACK Hardware Devices **** ALSA lib conf.c:3949:(snd_config_expand) Unknown parameters 0 ALSA lib control.c:909:(snd_ctl_open_noupdate) Invalid CTL hw:0 aplay: device_list:213: control open (0): Invalid argument
For whatever reason, the default conf file is letting me use speaker-test, so I can work on debugging the format for now. I am using alsa-lib-1.0.14aand alsa-utils-1.0.14, so I am not sure if that makes a difference. If anyone on the list has a bare bones conf for a simple pcm codec, I would appreciate some tips on why this one is not working.
Thanks Frank. I am gonna dig into at91-ssc.c now.
Paul
participants (4)
-
Frank Mandarino
-
Lee Revell
-
Paul Kavan
-
Takashi Iwai