alsa-lib和alsa-utils移植

目录

1.  ALSA的体系结构

2.静态编译

2.1 alsa-lib编译

2.2 alsa-utils编译

3. 动态编译

3.1 alsa-lib

3.2 alsa-utils

4. 参考


1.  ALSA的体系结构

官方主页  AlsaProject
主要跟编程相关是

2.静态编译

2.1 alsa-lib编译

    打开READEME、INSTALL文件,大致浏览一遍 需要先 基本流程就是 ./configure && make && make_install,先后完成配置、编译和安装工作。

(1)首先 进行配置 主要指定 主机和交叉编译工具链

      ./configure --host=aarch64-linux --prefix=/mnt/d/work/code/alsa-lib-1.2.6.1/tmp --enable-shared=yes --enable-static=no --disable-python CC=/mnt/d/work/code/tx511_mpw/prebuilts/host/gcc/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc

解释:

     --prefix:后面install的目录,也就是编译出来后的文件所存放的目录。绝对路径。

     --enable-shared=yes --enable-static=no:动态编译还是静态编译,只能选择一个,必须选择

     --host:主机

     CC:交叉编译工具链

以下两个还未验证:

--with-configdir=/usr/local/share
--with-plugindir=/usr/local/lib/alsa_lib

     --with--configdir:

 在这里要注意 --with--configdir的选项.它将影响 include/config.h中的 ALSA_CONFIG_DIR 目录.

 它默认是你的--prefix目录.这样在嵌入式交叉编译将是一个桌面机的路径,在libasoud.so运行.会提示,如果出来这个提示,一般都是ALSA_CONFIG_DIR路径错误造成的.

 ALSA lib pcm.c:2145:(snd_pcm_open_noupdate) Unknown PCM default

aplay: main:546: audio open error: No such file or directory


--with-plugindir: 也是同样道理了.它是设为 ALSA_PLUGIN_DIR 宏.
 (2)编译 make
 (3)安装 make install

开发板发布注意:

在开发板上发布alsa库.除了libasound.so库以外,必须还要把 alsa.conf发布到板上--with-configdir所指向目录下的alsa目录,否则还是会报"audio open error: No such file or directory".
这个文件可以在make install后在你安装目录下的share找到alsa目录,把这个目录整个拷贝到开发板即可.     

2.2 alsa-utils编译

打开READEME、INSTALL文件,大致浏览一遍 需要先 基本流程就是 ./configure && make && make_install,先后完成配置、编译和安装工作。

(1)首先 进行配置 主要指定 主机和交叉编译工具链

./configure CC=/mnt/d/work/code/tx511_mpw/prebuilts/host/gcc/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc LDFLAGS="-L/mnt/d/work/code/alsa-lib-1.2.6.1/tmp/lib -lasound -latopology" --host=aarch64-linux --prefix=/mnt/d/work/code/alsa-utils-1.2.6/tmp --enable-static     CFLAGS="-I/mnt/d/work/code/alsa-lib-1.2.6.1/tmp/include"    --disable-xmlto --disable-alsamixer --with-libiconv-prefix=/mnt/d/work/code/alsa-lib-1.2.6.1/tmp

解释:

      --prefix:后面install的目录,也就是编译出来后的文件所存放的目录。绝对路径。

      --host:主机

     CC:交叉编译工具链

     --disable-alsamixer:表示不编译生成alsamixer这个应用程序,因为该程序依赖于ncurses这个图形界面库,目前我们对于该库还不能交叉编译,故放弃

    LDFLAGS: 链接库所在位置,主要是libasound等

    CFLAGS: 所需头文件。

 遇到问题:

(1.1)mv: cannot stat `t-ja.gmo': No such file or directory

        方法一:sudo apt-get install gettext

        方法二:创建改文件。

(1.2)configure: error: No linkable libasound was found.

         前面编译alsa-lib用的是静态编译,此处需要动态,所以需要把alsa-lib动态编译一次。

(2)make

(3)sudo make install

3. 动态编译

3.1 alsa-lib

      注意 alsa-lib 编译过程中会生成一些配置文件,而这些配置信息的路径都是绝对路径,因此
为了保证 ubuntu 和开发板根文件系统中的路径一致!我们需要在 ubuntu 和开发板中各创建一
个路径和名字完全一样的目录,这里我们都创建一个/usr/share/arm-alsa 目录,ubuntu 中创建命
令如下:

cd /usr/share          //进入 ubuntu 的/usr/share 目录
sudo mkdir arm-alsa    //创建 arm-alsa 目录
      最后在开发板根文件系统中也创建一个 /usr/share/arm-alsa 目录,命令如下:
mkdir /usr/share/arm-alsa -p     //开发板根文件系统创建 arm-alsa 目录

      这样 ubuntu 和开发板根文件系统都有一个“/usr/share/arm-alsa”目录,我们交叉编译的时候就不怕存在引用绝对路径了,因为 ubuntu 和开发板中的配置文件路径都是一模一样的。由于 alsa-utils 要用到 alsa-lib 库,因此要先编译 alsa-lib 库。alsa-lib 就是 ALSA 相关库文件,应用程序通过调用 ALSA 库来对 ALSA 框架下的声卡进行操作。先创建一个名为“alsa-lib”的目录用来保存 alsa-lib 的编译结果,然后将 alsa-lib-1.2.2.tar.bz2 拷贝到 ubuntu 中并解压,命令如下:

tar -vxjf alsa-lib-1.2.2.tar.bz2 //解压 alsa-lib
      解压完成以后就会得到一个名为“ alsa-lib-1.2.2 ”的文件夹,这个就是 alsa-lib 的源码。进入
alsa-lib-1.2.2 目录,然后配置并编译,命令如下:
cd alsa-lib-1.2.2/ //进入 alsa-lib 源码目录
./configure --host=arm-linux-gnueabihf --prefix=/data/yangguoyu/code/tool/alsa-lib --with-configdir=/usr/share/arm-alsa CC=交叉编译工具链的位置 //配置

      注意, “--with-configdir”用于设置 alsa-lib 编译出来的配置文件存放位置,这里设置为前面创建的“/usr/share/arm-alsa”目录。配置完成以后就可以编译了,命令如下:

make               //编译
sudo make install  //安装
      编译完成以后前面创建的“ alsa-lib ”目录就会保存相应的编译结果。
      ubuntu /usr/share/arm-alsa 目录下的内容如下 所示

      将中lib 目录下的所有文件拷贝到开发板根文件系统的/usr/lib 目录下,将/usr/share/arm-alsa 目录下的所有文件拷贝到开发板的/usr/share/arm-alsa 目录下,命令如下:

cd alsa-lib                //进入 alsa-lib
sudo cp lib/* /xxx/rootfs/lib/ -af
cd /usr/share/arm-alsa     //进入 arm-alsa 目录,拷贝配置文件
sudo cp * /xxxx/rootfs/usr/share/arm-alsa/ -raf

3.2 alsa-utils

      alsa-utils 是 ALSA 的一些小工具集合,我们可以通过这些小工具还测试我们的声卡。将 alsa-utils-1.2.2.tar.bz2 复制到 ubuntu 中并解压,命令如下:

tar -vxjf alsa-utils-1.2.2.tar.bz2 //解压

      解压成功以后会得到一个名为“alsa-utils-1.2.2”的文件夹,此文件夹就是 alsa-utils 源码。重新创建一个名为“alsa-utils”的目录用于存放 alsa-utils-1.2.2 的编译结果。按照如下命令编译alsa-utils:

cd alsa-utils-1.2.2/ //进入
./configure --host=arm-linux-gnueabihf --prefix=/data/yangguoyu/code/tool/alsa-utils --with-alsa-inc-prefix=/data/yangguoyu/code/tool/alsa-lib/include/ --with-alsa-prefix=/data/yangguoyu/code/tool/alsa-lib/lib/ --disable-alsamixer --disable-xmlto CC=/交叉编译工具链位置
make //编译
sudo make install

      注意!上面在配置 alsa-utils 的时候使用了“--disable-alsamixer”来禁止编译 alsamixer 这个工具,但是这个工具确非常重要,它是一个图形化的声卡控制工具,需要 ncurses 库的支持。ncurses 库笔者已经交叉编译成功了(参考 63.5 小节),但是尝试了很多次设置,就是无法编译alsa-utils 中的 alsamixer 工具。网上也没有找到有效的解决方法,大家都是禁止编译 alsamixer的。所以这里就没法使用alsamixer这个工具了,但是可以使用alsa-utils提供的另外一个工具:amixer,alsamixer 其实就是 amixer 的图形化版本。两者的功能都是一样的,只是 alsamixer 使用起来更人性化一点。在这里希望知道如何编译出 alsa-utils 中 alsamixer 工具的朋友能够指点迷津,可以在 www.openedv.com 论坛上发帖。

      编译完成以后就会在前面创建的“ alsa-utils ”目录下生成 bin sbin share 三个文件夹,如
图 下 所示:

      将图binsbin share 这三个目录中的所有文件分别拷贝到开发板根目录下的 /bin、/sbin /usr/share/alsa 目录下,命令如下:

cd alsa-utils
sudo cp bin/* /xxx/rootfs/bin/ -rfa
sudo cp sbin/* /xxx/rootfs/sbin/ -rfa
sudo cp share/* /xxx/rootfs/usr/share/ -rfa
      打开开发板根文件系统中的 /etc/profile 文件,在里面加入如下所示内容:
export ALSA_CONFIG_PATH=/usr/share/arm-alsa/alsa.conf
ALSA_CONFIG_PATH 用于指定 alsa 的配置文件,这个配置文件是 alsa-lib 编译出来的。

4. 参考

alsa 音频库的移植_林伟的博客-CSDN博客

https://www.iteye.com/blog/wx1569578408-2500463

新浪博客

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值