杂谈:交叉编译alsa

简介:

ALSA 是目前 Linux 系统上大量采用的音频设备库,通过 Alsa 架构能分离驱动和应用的开发。 Alsa 为上层提供API 的同时,也为下层提供了接口,在内核配置的时候指定“支持 Alsa” 就能得到内核支持,具体位置为:

Menuconfig -> Device Drivers -> Sound card support -> Advanced Linux Sound Architecture 

驱动层所添加的音频设备应该也会在这里出现。

要让一台设备支持alsa需要三个层次做好,首先在内核添加alsa的设备驱动(底层),然后让内核支持alsa设备(menuconfig),在编译应用程序层所需要的alsa-lib库文件(我们这篇博客的主题【中间层】), 在应用层的应用程序alsa-utils(上层)

源码文件:

alsa-lib-1.0.24.1.tar.gzftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.24.1.tar.bz2

alsa-utils-1.0.24.2.tar.gzftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.24.2.tar.bz2

libiconv-1.14http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz选择需要)

编译开始:

cd alsa-lib-1.0.24.1/

./configure --host=arm-linux --prefix=$PWD/output/arm-linux --enable-static --enable-shared  --disable-python  --with-configdir=/usr/local/share --with-plugindir=/usr/local/lib/alsa_lib

make

sudo make install                                        //alsa-lib就愉快的编译好了,生成的东西放在当前目录下面的output目录下面

cd libiconv-1.14/

./configure CC=arm-linux-gcc --target=arm-linux --host=arm-linux --prefix=$PWD/output/arm-linux --enable-shared --enable-static
make

sudo make install     //为啥说这个是选择编译呢,因为考虑到utils的版本问题,我这里先前直接编译安装utils出现 c complies not create exec 的问题,结果查看config.log发现这样一个细节:

arm-linux-gcc -I$PWD/output/arm-linux/include  -L$PWSD/output/arm-linux/lib -lasound -liconv conftest.c
出现错误,原来是找不到这个iconv这个库文件,导致上述错误...


cd alsa-utils-1.0.24.2/

./configure --host=arm-linux --prefix=$PWD/output/arm-linux --enable-static --enable-shared    --with-configdir=/usr/local/share --with-libiconv-prefix=$PWD/output/arm-linux CFLAGS="-I$PWD/output/arm-linux/include" LDFLAGS="-L$PWD/output/arm-linux/lib -lasound -liconv"  --disable-alsamixer --disable-xmlto
//可以看到上面这个应用程序需要刚才交叉编译的库支持并且还需要一个库iconv这个有关文本转换的库所以我们要先编译好这个库文件!

make

sudo make install                                   //alsa-utils也愉快的编译好了


接下来就是将成才的库文件以及头文件放到开发板文件系统中去!


PS:

1 ) --host 指定编译器,这里指定为交叉编译器。注意运行本配置命令前务必保证编译器已经可以在 Shell下直接执行了 

2 ) --prefix 指定编译后文件的安装路径,后续的安装命令会在该目录中创建 lib 和 include 两个目录

3 ) --with-configdir 指定 conf 文件的安装目录,该目录中对我们最有用的 alsa.conf ,此文件会被直接移植到你的目标系统中。

4) (本人增加) --with-alsa-devdir 指定音频设备的目录。(pcmC0D0c/pcmC0D0p/pcmC0D1p等)alsa_lib 默认到/dev/snd找这些音频设备,但有时候创建音频设备并不在/dev/snd里,而是在/dev/里或者其它目录里,这就需要指定目录,不然会提示找不到pcmCxDx 。

还有一个问题:

就是在sudo make install 的时候找不到arm-linux-gcc 所以你要确保在sudo su的模式下面交叉编译工具也可以使用,配置方法是sudo -i 这后,在~/.bashrc这个文件中添加交叉编译工具连的路径!


接下来就开始移植了:

       首先配置内核支持ALSA,和支持WM9713这种解码芯片

PS:SoC AC97 Audio support for SMDK with WM9713 这个选项一开是可能不会出现,你先查看帮助这个选项然后满足他所需要的depend就会出来了,这个不是重点!

继续make zImage  移植直到启动出现:cpu map codec类似的语句

这个信息为止,当然中间可能会遇到很多错误,这个我其实也纠结了很久,但是每个人的情况不太一样,没法细说,多注意自己在适当的地方加printk就好!

PS:

         必须在mach-smdk***.c添加:

s3c64xx_ac97_setup_gpio(0);     //suport to ac97 control
&s3c64xx_device_ac97,

这个时候启动开发板查看/dev/snd目录下面就会有一些设备:

就成了一半 啊,仅仅一半啊,有木有。。。

接下来我试着播放音乐,插入耳机,毛线声音都没有,意味着我还有很长一段路要走!

接下来我准备跟踪从APP到kernel这个过程看看哪里出问题,导致没有声音!


其实接下来还有很多东西要理解,我大概做audio也近一个半月了发现还有了解的东西很多,下面推荐几篇很好的博客文章,csdn中droidphone的文章关于audio系列都很不错,很到位的!

参考引用说明:感谢以下这些朋友!

http://www.cnblogs.com/tinz/archive/2012/02/24/2366151.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值