原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/
6.移植alsa的接口库和工具包 由于OK6410的Linux内核虽然有了声卡的驱动,但是并没有ALSA架构需要的应用程序接口库。在用户空间访问声卡的时候需要先经过ALSA库才到内核访问驱动程序,所以我们需要移植ALSA库。而且由于6410使用的是wm9713或者wm9713的声卡,该声卡需要经过特殊的配置才可以使用,否则不能播放声音。
(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.解压
tar -jxvf alsa-lib-1.0.29.tar.bz2
c.配置alsa-lib
./configure --host=arm-linux --prefix=/usr/local/arm-alsa --enable-shared --disable-python
--with-configdir=/usr/local/alsa --with-plugindir=/usr/local/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/alsa目录,那么你的配置文件在开发板上的绝对路径也要是/usr/local/alsa 。默认 alsa配置文件会在安装目录里。这个很重要,不能PC和开发板两边不匹配。 --with-plugindir: alsa_lib 所在目录,目前意义不明,可以自由定位,也可以默认安装,先不用管。但是这里指定的目录会产生必要的库文件,放到开发板的时候也要路径和PC一样。
d.编译安装
make make install
(2)移植alsa-utils
a.解压以后进入解压得到的目录
b.配置 :编译工具需要要的头文件目录,也就是前面编译库文件得到的头文件 LDFLAGS:编译工具需要要的库文件目录,也就是前面编译库文件得到的库文件 --with-alsa-inc-prefix:和CFLAGS一样 --with-alsa-prefix:和LDFLAGS一样。
./configure --host=arm-linux --prefix=/usr/local/arm-alsa CFLAGS="-I/usr/local/arm-alsa/include"
LDFLAGS="-L/usr/local/arm-alsab -lasound" --disable-alsamixer --disable-xmlto
--with-alsa-inc-prefix=/usr/local/arm-alsa/include --with-alsa-prefix=/usr/local/arm-alsab
CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld CFLAGS
c.编译和配置
make
make install
(3)部署文件到开发板 进入到PC的/usr/local目录(之前配置时候指定的,根据你的配置选项决定),因为我们所有的安装目录都在这个目录下。
a.将/usr/local目录下的alsa,arm-alsa拷贝到开发板的/usr/local目录下
cp ./alsa /home6410/rootfs/usr/local -rfa cp ./arm-alsa /home6410/rootfs/usr/local -rfa
b.将/usr/localb目录下的alsa_lib拷贝到开发板上/usr/localb(自己先创建)目录下
cp ./alsa_lib /home6410/rootfs/usr/localb/ -rfa
c.将arm-alsab目录下的文件拷贝到开发板根文件系统的b目录下
cp ./arm-alsab/* /home6410/rootfsb –rfa
d.将arm-alsa/bin目录下的文件拷贝到/sbin目录下
cp ./arm-alsa/bin/* /home6410/rootfs/bin -rfa
e.将arm-alsa/sbin目录下的文件拷贝到/sbin目录下
cp ./arm-alsa/sbin/* /home6410/rootfs/bin -rfa
f.添加环境变量,编辑开发板的文件系统里的/etc/profile,切记是开发板的文件系统不是PC的文件系统啊!!!在结尾添加
export ALSA_CONFIG_PATH=/usr/local/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 /devq /dev/sndq
amixer cset numid=86 2 amixer cset numid=87 2
alsactl restore -f /etc/wm9714.conf
最后一步对声卡进行配置,这是关键的关键,没有成功执行这一步,虽然你的播放工具在播放音乐但是不会有声音!!!!! 通过samba从windows复制一首MP3后缀的歌曲到PC的Linux中nfs文件系统根目录,重命名为1.MP3,(因为中文在开发板不好操作。)在开发板的文件系统里进行测试madplay。在串口里面输入 madplay 1.mp3 就可以听到悦耳的歌曲了,(请插上耳机。)虽然有可能会输出乱码但是哦我们现在不关心,那是输出歌曲的信息,如果有中文的话由于开发板对中文的支持我们没有完善所以会乱码,你要是嫌麻烦,可以这样做。 madplay 1.mp3 >> mp3_log.txt 2>&1或者madplay –Q 1.MP3 然后就不会出现那些烦心的乱码信息了。如果没有播放成功,提示找不到madplay,表示移植有问题,请思考是不是把所有的动态库都复制完全了!