开发板原来跑Android 2.2的系统都正常,但是porting到2.3后,跑起来audio没声音,调试了有两个问题:
1、snd_pcm_write之后,pcm触发都很正常,就是DMA的中断出不来,DMA的地址,音频数据啥的都没问题,不知道DMA的中断还会有什么触发条件吗?2、android启动用logcat,有以下信息:D/AndroidRuntime( 1864): >>>>>> AndroidRuntime START com.android.internal.os.ZygoteInit <<<<<<
D/AndroidRuntime( 1864): CheckJNI is ON
D/dalvikvm( 1864): creating instr width table
I/ ( 1865): ServiceManager: 0xad50
E/ALSALib ( 1865): external/alsa-lib/src/control/control.c:902:(snd_ctl_open_noupdate) Invalid CTL AndroidOut
W/AudioHardwareALSA( 1865): Unable to attach mixer to device AndroidOut: No such file or directory
E/ALSALib ( 1865): external/alsa-lib/src/control/control.c:902:(snd_ctl_open_noupdate) Invalid CTL AndroidIn
W/AudioHardwareALSA( 1865): Unable to attach mixer to device AndroidIn: No such file or directory
E/AudioHardwareALSA( 1865): ALSA Module not found!!!
W/AudioHardwareInterface( 1865): Using stubbed audio hardware. No sound will be produced.
D/AudioHardwareInterface( 1865): setMode(NORMAL)
I/CameraService( 1865): CameraService started (pid=1865)
I/AudioFlinger( 1865): AudioFlinger's thread 0xc7e8 ready to run我改了asound.conf文件,增加了AndroidOut和AndroidIn两个设备,还是有以上出错提示。
不知道有没有盆友也碰到这些问题,能提供点解决思路也行,已经快抓狂了。。
1、snd_pcm_write之后,pcm触发都很正常,就是DMA的中断出不来,DMA的地址,音频数据啥的都没问题,不知道DMA的中断还会有什么触发条件吗?2、android启动用logcat,有以下信息:D/AndroidRuntime( 1864): >>>>>> AndroidRuntime START com.android.internal.os.ZygoteInit <<<<<<
D/AndroidRuntime( 1864): CheckJNI is ON
D/dalvikvm( 1864): creating instr width table
I/ ( 1865): ServiceManager: 0xad50
E/ALSALib ( 1865): external/alsa-lib/src/control/control.c:902:(snd_ctl_open_noupdate) Invalid CTL AndroidOut
W/AudioHardwareALSA( 1865): Unable to attach mixer to device AndroidOut: No such file or directory
E/ALSALib ( 1865): external/alsa-lib/src/control/control.c:902:(snd_ctl_open_noupdate) Invalid CTL AndroidIn
W/AudioHardwareALSA( 1865): Unable to attach mixer to device AndroidIn: No such file or directory
E/AudioHardwareALSA( 1865): ALSA Module not found!!!
W/AudioHardwareInterface( 1865): Using stubbed audio hardware. No sound will be produced.
D/AudioHardwareInterface( 1865): setMode(NORMAL)
I/CameraService( 1865): CameraService started (pid=1865)
I/AudioFlinger( 1865): AudioFlinger's thread 0xc7e8 ready to run我改了asound.conf文件,增加了AndroidOut和AndroidIn两个设备,还是有以上出错提示。
不知道有没有盆友也碰到这些问题,能提供点解决思路也行,已经快抓狂了。。
解决方案 »
- 求助: Android4.0触摸屏驱动正常但触摸无作用
- android4.0中怎么全屏显示
- android 使用ksoap调用webservice为什么参数必须按顺序?
- 基本解决android串口通信 接收数据问题
- android MediaPlayer 播放视频 调用stop()方法后 再调用getCurrentPosition()方法返回值不为0
- android 改变Camera的preview图像
- ? - Android的Camera类旋转动画
- 蓝牙配对问题
- Android zxing扫描二维码 为什么有些机型扫描不出来或者很慢?
- 为改变这个世界尽一份力量,请加入我们一起用移动互联网改变世界!
- 关于 ArrayAdapter 的问题
- 小问题
没找到文件目录?
应该是个设备,加载混音设备的时候需要的。但是我已经在asound.conf里添加了,而且之前AndroidPlayback 也是提示同样的问题,加了之后就好了,就是这个AndroidIn和AndroidOut加了还是不行。。郁闷
无效CTL
应该是由于log提示的上面两个设备找不到导致的snd_ctl_open_noupdate返回fail了
虚设备也有ID呀 木有设备ID上层怎么操作它
W/AudioHardwareInterface( 1865): Using stubbed audio hardware. No sound will be produced.首先你内核已经有声卡alsa驱动,其次你要移植alsa-lib、alsa_sound到android2.3上,android2.3去掉了alsa hal层。
具体见:http://blog.csdn.net/sepnic/article/details/6241019
谢谢你的回复。你的博文之前看过了,alsa_lib、alsa_sound已经从Google下载最新的,移植好,声卡驱动也改好了。libaudio用alsa_sound编出来,device/samsung里面的那个被我移除了。这样会有问题吗?
我怀疑你的BoardConfig.mk没有BOARD_USES_GENERIC_AUDIO为false。
BOARD_USES_GENERIC_AUDIO我确定已经是false,因为之前alsa_lib没有移植好,会提示“E/ALSALib ( 1865): external/alsa-lib/src/control/control.c:902:(snd_ctl_open_noupdate) Invalid CTL AndroidPlayback”
在修改了asound.conf,添加了AndroidPlayback就不会有这个错误,但是会有提示无法找到“AndroidOut”。谢谢你的提示,我有在alsa_lib里跟踪过,就是在“snd_ctl_open_noupdate”返回错误了才导致后面的一串错误。AudioFlinger()的代码没有查过,我试试看。
关键是你AudioFlinger中的hw = createAudioHardware()有没有执行,有没有出错。
有个奇怪的现象,刚开机的时候应该会播放一段开机音乐,这时候看log直接“Entered s3c_dma_hw_free”
看来播放中断出不来有可能是分配的DMA空间都已经被释放了吧还得去找上层,虾米问题这是
驱动是有移植过,现在就是不确认是驱动本身问题还是kernel有其他的问题导致2.2是用2.6.32的kernel,现在2.3用的是2.6.35。昨天修改后,用2.3的系统在2.6.32 kernel上没问题,但在2.6.35还是播放不出声音。同样的播放流程,35内核会进到 s3c_dma_hw_free ,而32则不会,但这个接口是上层调用的,应该是前面运行有错误,导致调用这个接口的。alsa_lib的文件真够杂的,找的太费劲了
不用怀疑alsa-lib,而且alsa-lib绝对比alsa-driver复杂得太多。
最简单的验证方法:做个ramdisk,跑2.6.35kernel,然后调用aplay播放wav文件。能播放则driver没问题,不能播的话,最好找一下driver。另外我觉得应该不是codec的问题,多半是pcm(即控制dma搬运pcm数据)。
{
.owner = THIS_MODULE,
.write = snd_pcm_write,
.aio_write = snd_pcm_aio_write,
.open = snd_pcm_playback_open,
.release = snd_pcm_release,
.llseek = no_llseek,
.poll = snd_pcm_playback_poll,
.unlocked_ioctl = snd_pcm_playback_ioctl,
.compat_ioctl = snd_pcm_ioctl_compat,
.mmap = snd_pcm_mmap,
.fasync = snd_pcm_fasync,
.get_unmapped_area = snd_pcm_get_unmapped_area,
},这个snd_pcm_fasync在什么情况下会被调用?有人碰到过吗?
static const struct snd_pcm_hardware s3c_dma_hardware = {
.info = SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_BLOCK_TRANSFER |
SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_PAUSE |
SNDRV_PCM_INFO_RESUME,
.formats = SNDRV_PCM_FMTBIT_S16_LE |
SNDRV_PCM_FMTBIT_U16_LE |
SNDRV_PCM_FMTBIT_U8 |
SNDRV_PCM_FMTBIT_S8,
.channels_min = 2,
.channels_max = 2,
.buffer_bytes_max = 128*1024,//160*1024,
.period_bytes_min = PAGE_SIZE, //128,
.period_bytes_max = PAGE_SIZE*2,//1024,
.periods_min = 2,// 4,
.periods_max = 128,//64,
.fifo_size = 32,//16,
};
我现在用的就是35内核里的默认配置,之前也试过用32内核的。你说的编码方式能不能说的具体点?
用32的内核可以很正常的走完,就等待播放。但是用我移植过的35内核,会多执行snd_pcm_fasync(),之后居然snd_pcm_release() -> s3c_dma_hw_free()
难怪我DMA的中断一直出不来,刚开机就已经被free了。这个刚开机执行的snd_pcm_playback_open()是在哪里调用的?有人可以给个思路吗?android的代码看的头大。
snd_pcm_fasync()会调用是不是open设置了async模式?
不过我目前用的是2.6.32的内核,没有遇到这个问题。
你可以check下2.6.32与2.6.35中的alsa版本变化。alsa版本很大改动的话,alsa-lib可能要用相匹配的版本。ps:我觉得这个可能性不大。
I/ActivityManager( 1914): Starting: Intent { act=android.intent.action.VIEW dat=file:///sdcard/b.wav typ=audio/* flg=0x4000000 cmp=com.android.music/.AudioPreview (has extras) } from pid 2319
I/MediaPlayerService( 1877): Create new client(1) from pid 2181, url=/sdcard/vb.wav, connId=1, audioSessionId=2
I/MediaPlayerService( 1877): player type = 4
I/StagefrightPlayer( 1877): setDataSource('/sdcard/vb.wav')
W/AudioPreview( 2181): empty cursor
W/InputManagerService( 1914): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@3dcfe800 (uid=10000 pid=2319)
I/DEBUG ( 1874): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 1874): Build fingerprint: 'generic/utv210/utv210:2.3.4/GINGERBREAD/eng.chrisx.20110802.151621:eng/test-keys'
I/DEBUG ( 1874): pid: 1877, tid: 1877 >>> /system/bin/mediaserver <<<
I/DEBUG ( 1874): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
I/DEBUG ( 1874): r0 00000000 r1 00000003 r2 0000ac44 r3 00000001
I/DEBUG ( 1874): r4 0004c8a0 r5 00000003 r6 00000001 r7 00000004
I/DEBUG ( 1874): r8 00000001 r9 0000ac44 10 00000000 fp b68b1a74
I/DEBUG ( 1874): ip a9060054 sp b68b19e0 lr a902dfd3 pc a8214522 cpsr 40000030
I/DEBUG ( 1874): d0 00000000000000a0 d1 00000000000000f0
I/DEBUG ( 1874): d2 0000001000000355 d3 3d55f0900000003d
I/DEBUG ( 1874): d4 0076007200650053 d5 004d006500630069
I/DEBUG ( 1874): d6 00670061006e0061 d7 0000000000720065
I/DEBUG ( 1874): d8 0000000000000000 d9 0000000000000000
I/DEBUG ( 1874): d10 0000000000000000 d11 0000000000000000
I/DEBUG ( 1874): d12 0000000000000000 d13 0000000000000000
I/DEBUG ( 1874): d14 0000000000000000 d15 0000000000000000
I/DEBUG ( 1874): d16 000000000005ab3f d17 40025f1046ea3bb8
I/DEBUG ( 1874): d18 4000000000000000 d19 bfd2f8823751ddbc
I/DEBUG ( 1874): d20 3f114d8b08ef73f2 d21 bebbaf03b8fe0a0e
I/DEBUG ( 1874): d22 3ff0000000000000 d23 3fe81c5753a017a4
I/DEBUG ( 1874): d24 3e66376972bea4d0 d25 0000000000000000
I/DEBUG ( 1874): d26 0000000000000000 d27 0000000000000000
I/DEBUG ( 1874): d28 0000000000000000 d29 0000000000000000
I/DEBUG ( 1874): d30 0000000000000000 d31 0000000000000000
I/DEBUG ( 1874): scr 20000010
I/DEBUG ( 1874):
I/ARMAssembler( 1914): generated scanline__00000077:03515102_00000000_00000000 [ 34 ipp] (48 ins) at [0x42aa1768:0x42aa1828] in 0 ns
I/ActivityManager( 1914): Displayed com.android.music/.AudioPreview: +385ms
I/DEBUG ( 1874): #00 pc 00014522 /system/lib/libbinder.so
I/DEBUG ( 1874): #01 pc 0002dfd0 /system/lib/libmedia.so
I/DEBUG ( 1874): #02 pc 0002e276 /system/lib/libmedia.so
I/DEBUG ( 1874): #03 pc 0001499e /system/lib/libmediaplayerservice.so
I/DEBUG ( 1874): #04 pc 0004756a /system/lib/libstagefright.so
I/DEBUG ( 1874): #05 pc 000498f8 /system/lib/libstagefright.so
I/DEBUG ( 1874): #06 pc 0004998e /system/lib/libstagefright.so
I/DEBUG ( 1874): #07 pc 00018d36 /system/lib/libmediaplayerservice.so
I/DEBUG ( 1874): #08 pc 00014126 /system/lib/libmediaplayerservice.so
I/DEBUG ( 1874): #09 pc 00037a78 /system/lib/libmedia.so
I/DEBUG ( 1874): #10 pc 0001359c /system/lib/libbinder.so
I/DEBUG ( 1874): #11 pc 000167ba /system/lib/libbinder.so
I/DEBUG ( 1874): #12 pc 0001699a /system/lib/libbinder.so
I/DEBUG ( 1874): #13 pc 00008a1c /system/bin/mediaserver
I/DEBUG ( 1874): #14 pc 00014b52 /system/lib/libc.so
I/DEBUG ( 1874):
I/DEBUG ( 1874): code around pc:
I/DEBUG ( 1874): a8214500 bd3e9801 6803b537 22004601 466c4668
I/DEBUG ( 1874): a8214510 ab01691d 466847a8 ffd8f7ff bd3e9801
I/DEBUG ( 1874): a8214520 6803b513 aa014601 691c4668 47a02300
I/DEBUG ( 1874): a8214530 b1409800 69516802 f1b04788 d0023fff
I/DEBUG ( 1874): a8214540 19049c01 2400e000 f7ff4668 4620ffbf
I/DEBUG ( 1874):
I/DEBUG ( 1874): code around lr:
I/DEBUG ( 1874): a902dfb0 4604b08d f8dd4691 461eb070 0074f89d
I/DEBUG ( 1874): a902dfc0 9f16460d a060f8dd f8db9009 f7fd0000
I/DEBUG ( 1874): a902dfd0 f8dfef9e 44f881b0 f8db4601 91070000
I/DEBUG ( 1874): a902dfe0 ef8ef7fd 46414a68 447a9b07 20059000
I/DEBUG ( 1874): a902dff0 ef14f7fd b1436823 46414a64 f06f2006
I/DEBUG ( 1874):
I/DEBUG ( 1874): stack:
I/DEBUG ( 1874): b68b19a0 00000001
I/DEBUG ( 1874): b68b19a4 00000000
I/DEBUG ( 1874): b68b19a8 00000000
I/DEBUG ( 1874): b68b19ac afd13ec7 /system/lib/libc.so
I/DEBUG ( 1874): b68b19b0 00000020
I/DEBUG ( 1874): b68b19b4 00000000
I/DEBUG ( 1874): b68b19b8 00000001
I/DEBUG ( 1874): b68b19bc 00000004
I/DEBUG ( 1874): b68b19c0 00000001
I/DEBUG ( 1874): b68b19c4 afd144c1 /system/lib/libc.so
I/DEBUG ( 1874): b68b19c8 a9060428
I/DEBUG ( 1874): b68b19cc 00000000
I/DEBUG ( 1874): b68b19d0 00000001
I/DEBUG ( 1874): b68b19d4 a811d443 /system/lib/libutils.so
I/DEBUG ( 1874): b68b19d8 df002777
I/DEBUG ( 1874): b68b19dc e3a070ad
I/DEBUG ( 1874): #00 b68b19e0 00000000
I/DEBUG ( 1874): b68b19e4 00000003
I/DEBUG ( 1874): b68b19e8 0004c8a0
I/DEBUG ( 1874): b68b19ec a902dfd3 /system/lib/libmedia.so
I/DEBUG ( 1874): #01 b68b19f0 00000000
I/DEBUG ( 1874): b68b19f4 a905ffe0
I/DEBUG ( 1874): b68b19f8 00000003
I/DEBUG ( 1874): b68b19fc 00000000
I/DEBUG ( 1874): b68b1a00 a905ffe0
I/DEBUG ( 1874): b68b1a04 00000003
I/DEBUG ( 1874): b68b1a08 00000000
I/DEBUG ( 1874): b68b1a0c 00000001
I/DEBUG ( 1874): b68b1a10 00000000
I/DEBUG ( 1874): b68b1a14 00000000
I/DEBUG ( 1874): b68b1a18 00000000
I/DEBUG ( 1874): b68b1a1c a9034a0d /system/lib/libmedia.so
I/DEBUG ( 1874): b68b1a20 0000000c
I/DEBUG ( 1874): b68b1a24 0004c8a0
I/DEBUG ( 1874): b68b1a28 b68b1a74
I/DEBUG ( 1874): b68b1a2c 00000000
I/DEBUG ( 1874): b68b1a30 0000ac44
I/DEBUG ( 1874): b68b1a34 00000001
I/DEBUG ( 1874): b68b1a38 a2f472c1 /system/lib/libstagefright.so
I/DEBUG ( 1874): b68b1a3c 00000001
I/DEBUG ( 1874): b68b1a40 00000000
I/DEBUG ( 1874): b68b1a44 a902e27b /system/lib/libmedia.so
W/AudioSystem( 2181): AudioFlinger server died!
W/IMediaDeathNotifier( 2181): media server died
E/MediaPlayer( 2181): error (100, 0)
W/AudioSystem( 1914): AudioFlinger server died!
W/IMediaDeathNotifier( 1914): media server died
W/AudioSystem( 1914): AudioPolicyService server died!
I/ServiceManager( 1871): service 'media.audio_flinger' died
I/ServiceManager( 1871): service 'media.player' died
I/ServiceManager( 1871): service 'media.camera' died
I/ServiceManager( 1871): service 'media.audio_policy' died
W/MediaMetadataRetriever( 2083): MediaMetadataRetriever server died!
I/AudioService( 1914): AudioFocus requestAudioFocus() from android.media.AudioManager@3dae83f0com.android.music.AudioPreview$2@3dade3f8
E/MediaPlayer( 2181): Error (100,0)
恩,可能是clock那里有点问题,导致一些服务出错,挂掉了。
一般来说,公司驱动组都会做好纯linux(基于busybox)的调试环境的啊,如果没有,自己做一个也不会太麻烦。
W/AudioPreview( 2212): empty cursor这个两个是用32内核播放音乐,不会提示的错误。