• OK6410移植madplay播放器,王明学learn


    对于ok6410的madplay移植主要包括三部分。声卡驱动移植,播放器的移植,以及alsa库的移植。

    一、首先移植声卡驱动以及播放器

      ok6410采用WM97系列的声卡芯片,要使得内核支持该驱动,首先需要配置内核:

    1.使用飞凌针对ok6410开发板提供的内核,进入内核顶层目录执行命令:

      make menuconfig ARCH=arm

      进入内核配置菜单,在【Device drivers】->【Sound card support】->【Advance linux sound Architecture】->【ALSA for SOC audio support】目录下面:

      选中这两个选项,并保存退出使用命令make uImage,编译内核。完成之后将生成的uImage文件拷贝到要下载内核的目录下

    如:cp arch/arm/boot/uImage  */tftp

    二、madplay播放器的移植

      madplay播放器程序主要依赖于如下库:

      

    下面就将这些库安装到根文件系统中:

    2.1首先解压这几个库

      tar  xvzf libid3tag-0.15.1b.tar.gz

      tar  xvzf libmad-0.15.1b.tar.gz

      tar  xvzf zlib-1.1.4.tar.gz

    2.2紧接着将madplay压缩包解压

      tar  xvzf madplay-0.15.2b.tar.gz

    2.2.1接下来编译、安装zlib

    a、进入解压好的zlib源码目录,使用./configure  --shared --prefix=*/install 配置文件生成Makefile

      --shared表示动态库

          --prefix=*/install指明后面执行make install后库和头文件的安装路径,这个路径是自己定义的方便我们提取生的库和文件,这里的install路径是自己创建的文件夹(一般在当前解压好的目录内新建一个文件夹目录)

    b、修改生成的Makefile

    将Makefile中出现的如下变量修改为:

    CC=arm-linux-gcc

    LDSHARED=arm-linux-gcc 

    CPP=arm-linux-gcc -E

    AR=arm-linux-ar

    RANLIB=arm-linux-ranlib

    修改如下:

      

    c、使用命令make编译源码,使用make  install 将生成的库和头文件安装到指定的目录下面,这里是之前创建的install这个目录

    e、将生成的动态库复制到根文件系统的rootfs/lib目录下面:cp */install/lib/* */rootfs/lib

    2.2.2编译,安装libid3tag

    a、进入解压好的libid3tag源目录下,使用目录:./configure --host=arm-linux --prefix=${PWD}/install,生成Makefile

    其中:--host指明交叉编译工具前缀

       --prefix=${PWD}/install指明后面执行make install后库和头文件的安装路径,这里的install虽然不存在但是执行make install后会自动创建

    b、使用命令:make编译源码,使用命令:make instal,将生成的库和头文件安装到指定的目录下

    c、将生成的动态库复制到根文件系统*/rootfs/lib目录下,使用命令:cp */install/lib/* */rootfs/lib

     2.2.3编译、安装libmad

    这个编译安装完全可以参考前面的方法,只不过在生成的Makefile中需要把一个目前不在支持的编译选项去掉。在Makefile的129行去掉-fforce-mem这个选项

    2.2.4移植madplay播放器

    a、进入madplay解压好的源码文件中

    b、使用命令:  ./configure --host=arm-linux,生成Makefile

    c、使用命令;make,编译madplay,即可在madplay源码目录顶层找到生成的播放器主程序madplay

    d、使用命令:cp */madplay */rootfs/sbin,将madplay拷贝到开发板的根文件系统目录下

      到目前为止我们的播放器程序以及开发板的声卡驱动程序都已经移植好了,当我们为根文件系统放一首以数字或者字母命名的音乐时如:madplay 1.MP3时尽然出现了文件找不到通过分析原来并不是文件找不到而是文件运行所需要的动态库找不到通过查看madplay文件需要的动态库有如下:

      

      其中蓝颜色的是标准的数学库可以在我们PC机的arm-linux-gcc目录下获得,上面两个就是我们在前面移植的那两个库,获取标准数学库的方法(为了避免以后需要时候在复制我们将全部的库都拷贝到我们的开发板目录下):

      

      在使用madplay 1.MP3命令时很多人以为此时我们的音乐播放器已经开始工作了。但是愿望总是美好的,不论是耳机还是喇叭都没有声音出现,那是因为我们还差一项工作需要做,那就是ALSA库和工具移植。

    三、ALSA库和工具的移植

          由于OK6410的Linux内核虽然有了声卡的驱动,但是并没有ALSA架构需要的应用程序接口库。在用户空间访问声卡的时候需要先经过ALSA库才到内核访问驱动程序,所以我们需要移植ALSA库。而且由于6410使用的是wm9713或者wm9715的声卡,该声卡需要经过特殊的配置才可以使用,否则不能播放声音。

    3.1移植alsa-lib

    a、可以到http://www.alsa-project.org/main/index.php/Download下载最新版本的alsa库我使用的是(alsa-lib-1.0.29.tar.bz2)和工具包(alsa-utils-1.0.29.tar.bz2)

    b、解压alsa-lib-1.0.29.tar.bz2

    使用命令:tar jxvf  alsa-lib-1.0.29.tar.bz2

    c、配置alsa-lib

    ./configure --host=arm-linux  --prefix=/usr/local/share/arm-alsa  --enable-shared --disable-python --with-configdir=/usr/local/share/alsa  --with-plugindir=/usr/local/lib/alsa_lib CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld

    其中: --host :为使用的交叉编译工具名,直接使用 arm-linux 也可以,根据 PC上安装的交叉编译工具来决定;

             --prefix:即 make install 时程序安装的目录,可以根据自己的情况进行修改,不用拘泥

         --enable:开启功能  --disable :关闭功能,使用动态库不需要Python。

         --with-configdir: alsa 配置文件所在目录,本目录要定好位置,交叉编译过后,移植到板子上时要和 PC 上路径一致。也即是说如果配置的时候指定的是/usr/local/share/alsa目录,那么你的配置文件在开发板上的绝对路径也要是/usr/local/share/alsa。默认 alsa配置文件会在安装目录里。这个很重要,不能PC和开发板两边不匹配。

            --with-plugindir: alsa_lib 所在目录,目前意义不明,可以自由定位,也可以默认安装,先不用管。但是这里指定的目录会产生必要的库文件,放到开发板的时候也要路径和PC一样。 

    d.编译安装

    make

    make  install

    3.2移植alsa-utils

    a.解压以后进入解压得到的目录

    b.配置

    ./configure --host=arm-linux --prefix=/usr/local/share/arm-alsa CFLAGS="-I/usr/local/share/arm-alsa/include" LDFLAGS="-L/usr/local/share/arm-alsa/lib -lasound" --disable-alsamixer --disable-xmlto --with-alsa-inc-prefix=/usr/local/share/arm-alsa/include --with-alsa-prefix=/usr/local/share/arm-alsa/lib CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld

    其中:CFLAGS:编译工具需要要的头文件目录,也就是前面编译库文件得到的头文件

           LDFLAGS:编译工具需要要的库文件目录,也就是前面编译库文件得到的库文件

           --with-alsa-inc-prefix:和CFLAGS一样  --with-alsa-prefix:和LDFLAGS一样。

    c.编译和配置

    make

    make install

    3.3复制生成文件到开发板

    进入到PC的/usr/local/share目录(之前配置时候指定的,根据你的配置选项决定),因为我们所有的安装目录都在这个目录下。

    a.将/usr/local/share目录下的alsa,arm-alsa拷贝到开发板的/usr/local/share目录下

    cp ./alsa  /home/OK6410/rootfs/usr/local/share  -rfa

    cp ./arm-alsa  /home/OK6410/rootfs/usr/local/share -rfa

     

    b.将/usr/local/lib目录下的alsa_lib拷贝到开发板上/usr/local/lib(自己先创建)目录下

    cp ./alsa_lib  /home/OK6410/rootfs/usr/local/lib/ -rfa

    c.将/usr/local/share/arm-alsa/lib目录下的文件拷贝到开发板根文件系统的/lib目录下

    cp ./arm-alsa/lib/*  /home/OK6410/rootfs/lib –rfa

    d.将arm-alsa/bin目录下的文件拷贝到/sbin目录下

    cp ./arm-alsa/bin/*  /home/OK6410/rootfs/bin -rfa

    e.将arm-alsa/sbin目录下的文件拷贝到/sbin目录下

    cp ./arm-alsa/sbin/*  /home/OK6410/rootfs/bin -rfa

    f.添加环境变量,编辑开发板的文件系统里的/etc/profile,切记是开发板的文件系统不是PC的文件系统啊!!!在结尾添加

    export ALSA_CONFIG_PATH=/usr/local/share/alsa/alsa.conf

    g.复制声卡需要的配置文件

    由于wm9713/9714需要特殊配置,所以我们在移植了alsa-util以后便可以利用这个工具集中的alsactl对wm9714/9713进行配置,配置所需要的配置文件在SDK的wm9713目录下。将他复制到开发板的/etc目录即可。

    h. 修改系统初始化脚本

    由于alsa架构的库和程序要去访问/dev/snd目录下的这些文件

    controlC0  pcmC0D0c   pcmC0D0p   seq        timer

    但是实际上我们使用的内核和文件系统并没有/dev/snd这个目录,而是直接把这些设备结点创建在/dev目录,所以需要我们手动创建,并将设备结点进行硬链接。因此我们在初始化脚本里面完成这个任务,在开发板文件系统里的/etc/init.d/rcS加上如下内容。

    mkdir /dev/snd

    ln /dev/controlC0 /dev/snd/controlC0

    ln /dev/pcmC0D0c /dev/snd/pcmC0D0c

    ln /dev/pcmC0D0p /dev/snd/pcmC0D0p

    ln /dev/timer /dev/snd/timer

    ln /dev/seq /dev/snd/seq

    amixer cset numid=86 2

    amixer cset numid=87 2

    alsactl  restore -f /etc/wm9714.conf  

    i、最后将wm9714.conf这个文件复制到开发板的/etc/目录下面

    最后重新启动开发板将我们根文件系统挂在到上去执行:madplay 2.MP3就可以听到歌声了

  • 相关阅读:
    c++ 对象作为参数传递
    LeetCode总结 -- 树的性质篇
    【Bug笔记】The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    poj3642 Charm Bracelet(0-1背包)
    [笔试题] 阿里巴巴2013技术类笔试题(完整版手工记录+具体解析)
    swift-switch使用方法
    Android OpenGL ES 应用(二) 纹理
    【VBA研究】查找目录以下全部文件的名称
    解决com.ibatis.sqlmap.client.SqlMapException: There is no statement named in this SqlMap
    Android菜鸟的成长笔记(27)——ViewPager的使用
  • 原文地址:https://www.cnblogs.com/wmx-learn/p/wmxjjlove.html
Copyright © 2020-2023  润新知