linux ALSA声卡驱动应用

一、配置内核支持UDA1341

1、主要目录

linux-3.4.2\sound\soc\samsung
linux-3.4.2\sound\soc\codecs

2、主要.c文件

在linux-3.4.2\sound\soc\samsung中查看Makefile通过文件找到以下配置宏

CONFIG_SND_S3C24XX_I2S  // s3c24xx-i2s.c
CONFIG_SND_SOC_SAMSUNG  // dma.c

在linux-3.4.2\sound\soc\codecs中查看Makefile通过文件找到以下配置宏

CONFIG_SND_SOC_UDA134X  // uda134x.c
CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X  // s3c24xx_uda134x.c

二、make menuconfig

通过make menuconfig搜索以上的宏,并配置

配置

CONFIG_SND_SOC_SAMSUNG
CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X

后会自动配置CONFIG_SND_S3C24XX_I2S

-> Device Drivers
  -> Sound card support
    -> Advanced Linux Sound Architecture
      -> ALSA for SoC audio support
      <*>   ASoC support for Samsung                            // CONFIG_SND_SOC_SAMSUNG
      <*>   SoC I2S Audio support UDA134X wired to a S3C24XX    // CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X  // s3c24xx_uda134x.c     

配置DMA

-> System Type
[*] S3C2410 DMA support

三、添加平台设备

修改linux-3.4.2\arch\arm\mach-s3c24xx\mach-smdk2440.c

1、 修改mach-smdk2440.c 添加"s3c24xx_uda134x"平台设备

在这里插入图片描述
需要在mach-smdk2440.c用起来就行
在这里插入图片描述

2、 修改mach-smdk2440.c添加"s3c24xx-iis"平台设备

在devs.c中定义,直接在mach-smdk2440.c用起来就行
在这里插入图片描述

3、 修改mach-smdk2440.c 添加"samsung-audio"平台设备

在devs.c中定义,直接在mach-smdk2440.c用起来就行
在这里插入图片描述

4、修改mach-smdk2440.c 添加"uda134x-codec"平台设备

在这里插入图片描述

四、 修改bug

sound\soc\samsung\dma.c
pos += prtd->dma_period;
改为
pos += prtd->dma_period*limit;

五、移植应用程序

在这里插入图片描述

1、编译alsa-lib :

sudo mv /usr /usr_bak   //因为必须要和arm板的路径保持一致
export PATH=/usr_bak/local/sbin:/usr_bak/local/bin:/usr_bak/sbin:/usr_bak/bin:/sbin:/bin:/usr_bak/games:/usr_bak/local/arm/4.3.2/bin
./configure --host=arm-linux     //默认安装到/usr下
make
sudo mkdir /usr
sudo chown book:book /usr
make install
sudo cp -rf /usr /work/projects/alsa/
sudo rm -rf /usr
sudo mv /usr_bak /usr
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.3.2/bin

把头文件和库复制进交叉工具链里

cd /work/projects/alsa/usr/include
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

cd /work/projects/alsa/usr/lib
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

把库复制到根文件系统的lib目录下

cd /work/projects/alsa
sudo -rfd usr /work/nfs_root/fs_mini_mdev_new

2、编译alsa-util的依赖

先编译依赖:ncurses-5.9.tar.gz
./configure --host=arm-linux --prefix=$PWD/tmp --with-shared
make && make install
//安装报错不理会
把头文件和库复制进交叉工具链里

cd /work/projects/alsa/ncurses-5.9/tmp/include/ncurses
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
cd /work/projects/alsa/ncurses-5.9/tmp/include/
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

cd /work/projects/alsa/ncurses-5.9/tmp/lib
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

把库复制到根文件系统的lib目录下

cd /work/projects/alsa/ncurses-5.9/tmp/lib
sudo cp *so* -rfd /work/nfs_root/fs_mini_mdev_new/lib

3、编译alsa-util

./configure --host=arm-linux --prefix=$PWD/tmp --with-curses=ncurses --disable-xmlto --disable-nls
make
sudo make install
cd tmp
cp * -rfd  /work/nfs_root/fs_mini_mdev_new/usr 

六、测试

mkdir /dev/snd
cd /dev/snd/
ln -s /dev/controlC0 
ln -s /dev/pcmC0D0p 
ln -s /dev/pcmC0D0c

播放:

aplay Windows.wav

调音量:

amixer controls
amixer cget numid=1
amixer cset numid=1 30

猜你喜欢

转载自blog.csdn.net/qq_18077275/article/details/108878708