最近Android启动遇到卡死在声卡服务的问题,现象如下:
W/AudioSystem( 49): AudioFlinger not published, waiting...
I/ServiceManager( 49): Waiting for sevice media.audio_flinger...
I/ServiceManager( 49): Waiting for sevice media.audio_flinger...I/ServiceManager( 49): Waiting for sevice media.audio_flinger...
I/ServiceManager( 49): Waiting for sevice media.audio_flinger...
I/ServiceManager( 49): Waiting for sevice media.audio_flinger...
I/ServiceManager( 49): Waiting for sevice media.audio_flinger...
I/ServiceManager( 49): Waiting for sevice media.audio_flinger...
经过几天的排查,终于解决这个问题,记录如下:
有三种情况将会导致改问题
1)系统启动时没有启动medaisever服务
具体为init.rc中的
service media /system/bin/mediaserver
user media
group system audio camera graphics inet net_bt net_bt_admin
不能被注释掉
2)系统没有ALSA驱动
如果Android编译时选择使用ALSA驱动,则Linux系统必须支持ALSA驱动
为此我花了两天Porting ALSA驱动,不过放音时好像还有问题,至少可以生成必要的节点
3)要在init.rc中添加ALSA相关信息
symlink /dev/snd/pcmC0D0c /dev/pcmC0D0c
symlink /dev/snd/pcmC0D0p /dev/pcmC0D0p
symlink /dev/snd/controlC0 /dev/controlC0
symlink /dev/snd/timer /dev/timer
chmod 0777 /dev/pcmC0D0c
chmod 0777 /dev/pcmC0D0p
chmod 0777 /dev/controlC0
chmod 0777 /dev/timer
chown root audio /dev/snd/controlC0
chown root audio /dev/snd/pcmC0D0c
chown root audio /dev/snd/pcmC0D0p
chown root audio /dev/snd/timer
setprop alsa.mixer.playback.master Front
setprop alsa.mixer.capture.master Capture
setprop alsa.mixer.playback.earpiece Master
setprop alsa.mixer.capture.earpiece Capture
setprop alsa.mixer.playback.headset Master
setprop alsa.mixer.playback.speaker Master
总结: 事实并不是上面这样,而是下面这些搞的鬼:
system/bin/servicemanager
libsmedia.so
libmediaplayerservice.so