1. 代码的修改
除了之前模拟器环境编译的问题,还有个针对arm的
src/pulsecore/svolume_arm.c
把这个文件的193行注释掉,不要优化soft volume 算法。因为优化所使用的arm 汇编在编译时有些问题。
补充 :如果编译的时候有这样的错误
modules/module-cli.c:108: error: 'O_CLOEXEC' undeclared (first use in this function)
那么,请修改 /usr/include/bits/fcntl.h
# define O_NOATIME 01000000 /* Do not set atime. */
+ # define O_CLOEXEC 02000000 /* Set close_on_exec. */
补充
./configure 的时候加入选项CFLAGS=-march=armv7-a 可以避免arm汇编出错,参考下面的configure配置。
这样, src/pulsecore/svolume_arm.c代码可以不用修改。
2. 配置编译
这里列出概要
>>> libtool
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc && make
>>> sndfile
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
--disable-cpu-clip --disable-sqlite --disable-external-libs &&
make
>>> speex
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --disable-oggtest --disable-vbr && make
使用 make CFLAGS=-mfpu=vfp -mfloat-abi=softfp 可以提升执行效率,降低CPU占用率
>>> alsa-lib
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
--disable-alisp --disable-python --disable-old-symbols --disable-seq
--disable-rawmidi --disable-maintainer-mode && make
>>> intltool
如果参照模拟器环境设置了,它在这个scratchbox的所有targets中都是有效的
>>> pulseaudio
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
--disable-rpath --disable-nls --disable-dbus --disable-bluez
--disable-samplerate --disable-solaris --disable-gconf --disable-avahi
--disable-jack --disable-lirc --disable-hal --disable-polkit
--disable-xmltoman --enable-ltdl-install=no --disable-oss
--disable-glib2 --disable-gtk2 --disable-openssl --disable-ipv6
--disable-asyncns --disable-per-user-esound-socket --disable-x11
--disable-oss-output --disable-oss-wrapper --with-database=simple CFLAGS=-march=armv7-a
&& make
3. 安装
进入各个代码目录,执行
make DESTDIR=~/vroot install
这样,所有安装都以指定的 ~/vroot为 root 了。然后将该目录打包
cd ~/vroot
tar cjf ../vroot.tar.bz2 .
将这个包传到板子,解压
rdbc put ./vroot.tar.bz2 /var/home/
telnet 登录到板子
tar xjvf vroot.tar.bz2 -C /
4. 试运行
移除 /etc/asound.conf
kill audiomgrd
snd_ctrl 7 // 打开Speaker
>>> pulseaudio -nC
>>> load-module module-alsa-sink mmap=0 (注意,如果不指定 mmap=0, 那么此操作将导致进程阻塞。具体原因有待进一步分析)
试着用paplay放了个wav, 恩,有声音出来! 尽管音质不好,但我们的第一步目标已经达到 : 将PA整个交叉编译流程走了一遍。
2010.3.8 补充:
发现一些问题:
1. 上面提到的音质不好的问题
这个和cpu占用率高有一定关系 ,如果 pulseaudio -nC --resample-method=trivial ,这样PA用最简单的resample,则声音会连续一些。
2. CPU占用率过高
a> 和resample算法有关系,采用trivial算法,则cpu占用率从70%减少到50%,尽管这个占用率还是很高,但说明resample算法和 cpu占用率直接相关。另外发现,alsa sink这个模块本身也导致cpu占用率居高不下。测试发现,用 -nC启动,cpu占用率为0,加载 module-pipe-sink之后 cpu 占用率为 0. 一旦加载 alsa sink, cpu占用率在10%以上(此时,不播放任何声音)
3. ALSA sink 导致 pulseaudio 异常退出
-->
本文介绍如何解决ARM环境下脉冲音频交叉编译遇到的问题,包括代码修改、配置编译、安装及试运行步骤,并针对音质不佳和CPU占用率过高的问题给出了解决方案。
1169

被折叠的 条评论
为什么被折叠?



