zoukankan      html  css  js  c++  java
  • ALSA声卡笔记4-----体验声卡


    1 、配置内核支持UDA1341

    (1)内核

     解压内核并打上补丁


    配置内核


    platform

    需要设置哪些配置项,先看一下platform,需要把S3c24xx-i2s.c文件配置上去,dma.c也要配置上去。这些文件对应哪一个配置项,可以通过打开内核目录中以上两个文件所在目录下的Makefile。

    • 配置编译项CONFIG_SND_S3C24XX_I2S  // s3c24xx-i2s.c
    搜索S3c24xx-i2s可知最终会编译进文件snd-soc-s3c24cc-i2s-objs这个文件里。


    而文件snd-soc-s3c24cc-i2s-objs对应的配置项是CONFIG_SND_S3C24XX_I2S

    因而需要配置编译项CONFIG_SND_S3C24XX_I2S  // s3c24xx-i2s.c

    • 配置编译项CONFIG_SND_SOC_SAMSUNG  // dma.c


    因而需要配置编译项CONFIG_SND_SOC_SAMSUNG  // dma.c

    codec

    • 配置编译项CONFIG_SND_SOC_UDA134X  // uda134x.c

    看一下codec,需要把uda134x.c 文件配置上去。这文件对应哪一个配置项,可以通过打开内核目录中文件所在目录下的Makefile。



    因而需要配置编译项CONFIG_SND_SOC_UDA134X  // uda134x.c

    machine

    • 配置编译项CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X  // s3c24xx_uda134x.c

    看一下machine,需要把s3c24xx_uda134x.c 文件配置上去。这文件对应哪一个配置项,可以通过打开内核目录中文件所在目录下的Makefile。



    因而需要配置编译项CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X  // s3c24xx_uda134x.c

    搜索那四个配置项,配置内核以把上面四项全部配置上去
    -> 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          


    -> System Type

    [*] S3C2410 DMA support




    2、 修改代码

    machine

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

    我们把S3c24xx-i2s.c文件配置进内核了,S3c24xx-i2s.c只有platform_driver,但是platform_device在mach_mini2440.c(3.4.2内核用mach-smdk2440.c),需要修改这个文件把同名的platform_device放进去。先构建一个smdk2440_audio的平台设备结构体,然后把这个结构体放进平台设备数组里。这个数组最后会把里面的结构体注册进内核。



    platform


    • 修改s3c24xx-i2s.c 添加"s3c24xx-iis"平台设备

    我们把s3c24xx-i2s.c文件配置进内核了,S3c24xx-i2s.c只有platform_driver,但是platform_device(之前在mach-mini2440.c中被放到数组里面)在devs.c,需要修改这个文件把同名的platform_device放进去。先构建一个s3c_device_iis的平台设备结构体,然后把这个结构体放进平台设备数组里。这个数组最后会把里面的结构体注册进内核。

    注:平台设备数组在mach-smdk2440.c




    codec

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

    我们把dma.c文件配置进内核了,dma.c只有platform_driver,但是platform_device(之前在mach-mini2440.c中被放到数组里面)在devs.c,需要修改这个文件把同名的platform_device放进去。先构建一个samsung_asoc_dma的平台设备结构体,然后把这个结构体放进平台设备数组里。这个数组最后会把里面的结构体注册进内核。

    注:平台设备数组在mach-smdk2440.c



    codec

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

    我们把uda134x.c文件配置进内核了,dma.c只有platform_driver,但是platform_device(之前在mach-mini2440.c中被放到数组里面)mach-smdk2440.c,需要修改这个文件把同名的platform_device放进去。先构建一个uda1340_codec的平台设备结构体,然后把这个结构体放进平台设备数组里。这个数组最后会把里面的结构体注册进内核。



    3、编译内核出现问题

    修改bug: soundsocsamsungdma.c

    pos += prtd->dma_period;
    改为
    pos += prtd->dma_period*limit;
    4、实验

         编译内核并把编译出来的内核拷贝到网络根文件系统里,设置启动参数并启动u-boot,u-boot引导内核启动。开是否识别出声卡





    5、移植应用程序测试声卡

     alsa-util是使用alsa-lib的一些应用程序,我们使用alsa-util可以用来播放声音,录音或者调整音量等等。

    (1) 编译alsa-lib, alsa-util以使用声卡:

    •  alsa-lib  : 

    解压并切换到目录下



    在配置时不使用--prefix,因为这样做会破坏文件系统的结构,使用默认路径(把库编译安装到/usr目录下,但/usr目录是PC机用的,为了跟PC机不冲突,因而在配置前把/usr改名为/usr_bak

    编译:将源代码变为机器可执行的代码文件。
    安装:将可执行文件安装到操作系统里,才可以使用。

    mv /usr/bin/g* /tmp
    就是移动 usr/bin/目录下,以g开头的文件到/tmp目录里

    sudo mv /usr /usr_bak

    用echo $PATH查看环境变量


    修改环境变量,吧所有的usr改为usr_bak

    这是临时修改变量,最终修改参考http://blog.csdn.net/qingkongyeyue/article/details/52243210

    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

    编译

    make

    因为make install是安装到usr目录下面去

    创建usr目录

    sudo mkdir /usr

    改变usr目录的所有者和所在组

    sudo chown book:book /usr

    安装

    make install

    把/usr目录拷贝到/work/projects/alsa/目录下

    sudo cp -rf  /usr  /work/projects/alsa/

    把自己创建的/usr目录删掉

    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

    在我们的 /work/projects/alsa/下有编译出来的/usr

    把头文件和库复制进交叉工具链
    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


    把usr目录复制到网络根文件系统目录下
    cd /work/projects/alsa
    sudo -rfd usr /work/nfs_root/fs_mini_mdev_new


    •  alsa-util
     先编译依赖:ncurses-5.9.tar.gz



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

    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
    由于在拷贝过程中lib目录下没有发现动态库.so,在配置时没有制定生成动态库,因而需要重新配置加入--with-shard


    安装错误无需理会,只要在tmp临时文件生成头文件和库文件就可以了

    解压并切换到其目录下

    配置

    ncurses是库ncurses-5.9的名字


    ./configure --host=arm-linux --prefix=$PWD/tmp --with-curses=ncurses --disable-xmlto --disable-nls

    –disable-FEATURE 
    当你想禁用某个FEATURE的时候可以使用它

    with选项来指定具体的软件包地址,通过without选项来指定不使用指定的软件包

    编译和安装

    make
    sudo make install


    把安装在tmp目录下的文件拷贝到网络跟文件系统



    6、测试

    用aplay -h看是否能用

    拷贝音频文件到网络文件系统


    进行播放


    出现无法找到声卡

    aplay或者alsa-lib使用的声卡节点默认是在/dev/snd/目录下

    因而需要新建/dev/snd目录

    mkdir /dev/snd

    cd /dev/snd/

    ln -s  源文件 目标文件  做软链接
    和快捷方式只能共享执行文件不同,linux通过链接文件能共享几乎所以类型的文件
    在当前目录创建指向源文件的链接

    ln -s /dev/controlC0 
    ln -s /dev/pcmC0D0p 
    ln -s /dev/pcmC0D0c


    播放:

    aplay Windows.wav

    调音量用amixer来调,用amixer -h查看用法

    查看控制项

    amixer controls

    查看当前音量,numid=1表示第一个control,为什么是numid=1,是因为用amixer controls命令显示出第一个控制项是Master Playback Volume就是他的音量


    amixer cget numid=1

    设置音量,numid=1表示第一个control,30是设置的音量值

    amixer cset numid=1 30

    7、把内核的修改制作成补丁文件

    (1)把.config文件拷贝为config_ok文件,保存我们修改的配置。然后make distclean


    (2)把修改后的内核改个名字,然后解压原版内核


    (3)制作补丁文件

    (4)打上补丁后,吧config_ok复制为.config就可以了



    转自:http://blog.csdn.net/qingkongyeyue/article/details/52504235
  • 相关阅读:
    阿里云如何跨账号打通,多账号同时享受优惠
    阿里云超长6个月免费套餐汇总
    零门槛申请阿里云1万元代金券
    阿里云包年包月服务器如何退款
    用户名密码注册与登录的应用
    Android 沉浸式状态栏完美解决方案
    Android开发支付集成——微信集成
    Android开发支付集成——支付宝集成
    ExpandableListView的完美实现,JSON数据源,右边自定义图片
    android扫描网页二维码进行网页登录
  • 原文地址:https://www.cnblogs.com/alan666/p/8311870.html
Copyright © 2011-2022 走看看