s5pv210 音频播放问题 MPlayer移植

在移植MPlayer播放器时,遇到个头大的问题,WM9713也识别了,dsp等节点也都有了,但是在测试播放时出现了下面的错误:
Unable to handle kernel NULL pointer dereference at virtual address 00000000
[   22.163695] pgd = 9f144000
[   22.166380] [00000000] *pgd=4f105831, *pte=00000000, *ppte=00000000
[   22.172629] Internal error: Oops: 80000007 [#1] PREEMPT ARM
[   22.178166] Modules linked in:
[   22.181205] CPU: 0 PID: 609 Comm: cat Not tainted 3.10.30 #193
[   22.187007] task: 9f8a0900 ti: 9f88c000 task.ti: 9f88c000
[   22.192379] PC is at 0x0
[   22.194905] LR is at s3c_ac97_trigger+0xa8/0xb0
[   22.199399] pc : [<00000000>]    lr : [<802ecdf8>]    psr: 60000093
[   22.199399] sp : 9f88de18  ip : 8050ae28  fp : 00000001
[   22.210835] r10: 00000000  r9 : a09ec000  r8 : a09ec000
[   22.216035] r7 : 9fbfb700  r6 : 00000001  r5 : 9f8becc0  r4 : 80528c54
[   22.222534] r3 : 00000000  r2 : 9f88dd98  r1 : 00000002  r0 : 0000001d
[   22.229036] Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
[   22.236400] Control: 10c5387d  Table: 4f144019  DAC: 00000015
[   22.242119] Process cat (pid: 609, stack limit = 0x9f88c230)
[   22.247751] Stack: (0x9f88de18 to 0x9f88e000)
[   22.252086] de00:                                                       9fb98a00 802e6fb0
[   22.260234] de20: 9fb98a00 9fb98a00 80527414 00000003 00000000 802c413c 9fb98a00 802c404c
[   22.268379] de40: 9fb98ac0 9f9d2c00 9fb98a00 00000800 9fb98ac0 802cd958 00000800 802c8d68
[   22.276525] de60: 9fb98a00 803a8088 805273dc 801df908 00000000 9f8a6a14 9f8a6a14 7f000000
[   22.284671] de80: 80044121 00000800 a09ec000 9fb98a00 9f88dec4 00000001 a09ec000 7f000000
[   22.292816] dea0: 00000800 802cdacc 802cbcdc 9fb98a00 9fb98a00 9f88c000 9f9d2c00 802d3950
[   22.300962] dec0: 9f88df80 00000000 00000000 9f95e980 9f95e880 9f88def4 9fb82c40 00000000
[   22.309108] dee0: 9f88c000 00001000 9fb98a00 802d704c 9fb98a00 9fb82a00 9fb98a00 a09ef000
[   22.317253] df00: 00000000 00000001 7ec67970 802d3a90 00000000 9fb82c40 9f9d2c00 00001000
[   22.325399] df20: 7ec67970 00000000 00000000 802d565c 00000000 9f9d2e8c 9fb78920 9f9e1480
[   22.333545] df40: 00001000 7ec67970 9f88df80 00000000 00000000 00001000 00000000 800ad29c
[   22.341690] df60: 9f9e1488 00000020 9f9e1480 00000000 9f88df80 7ec67970 00000000 800ad400
[   22.349836] df80: 00000000 00000000 00001000 7ec67970 76f806e0 00000003 8000ede8 9f88c000
[   22.357982] dfa0: 00000000 8000ec40 00001000 7ec67970 00000003 7ec67970 00001000 000efc6c
[   22.366128] dfc0: 00001000 7ec67970 76f806e0 00000003 0000008f 00000003 00000000 00000000
[   22.374273] dfe0: 00000003 7ec67950 0000f628 76e3c90c 60000010 00000003 ffffffff ffffffff
[   22.382436] [<802ecdf8>] (s3c_ac97_trigger+0xa8/0xb0) from [<802e6fb0>] (soc_pcm_trigger+0x94/0x9c)
[   22.391440] [<802e6fb0>] (soc_pcm_trigger+0x94/0x9c) from [<802c413c>] (snd_pcm_do_start+0x28/0x2c)
[   22.400449] [<802c413c>] (snd_pcm_do_start+0x28/0x2c) from [<802c404c>] (snd_pcm_action_single+0x38/0x78)
[   22.409983] [<802c404c>] (snd_pcm_action_single+0x38/0x78) from [<802cd958>] (snd_pcm_lib_read1+0x2bc/0x358)
[   22.419773] [<802cd958>] (snd_pcm_lib_read1+0x2bc/0x358) from [<802cdacc>] (snd_pcm_lib_read+0x60/0x64)
[   22.429132] [<802cdacc>] (snd_pcm_lib_read+0x60/0x64) from [<802d3950>] (snd_pcm_oss_read3+0x4c/0x110)
[   22.438404] [<802d3950>] (snd_pcm_oss_read3+0x4c/0x110) from [<802d704c>] (snd_pcm_plug_read_transfer+0x78/0xd4)
[   22.448541] [<802d704c>] (snd_pcm_plug_read_transfer+0x78/0xd4) from [<802d3a90>] (snd_pcm_oss_read2+0x7c/0x120)
[   22.458679] [<802d3a90>] (snd_pcm_oss_read2+0x7c/0x120) from [<802d565c>] (snd_pcm_oss_read+0x168/0x1b8)
[   22.468130] [<802d565c>] (snd_pcm_oss_read+0x168/0x1b8) from [<800ad29c>] (vfs_read+0xac/0x140)
[   22.476793] [<800ad29c>] (vfs_read+0xac/0x140) from [<800ad400>] (SyS_read+0x44/0x70)

有个空指针,经翻腾找了空指针的原因,代码如下:
static struct samsung_dma_ops dmadev_ops = {
        .request        = samsung_dmadev_request,
        .release        = samsung_dmadev_release,
        .config                = samsung_dmadev_config,
        .prepare        = samsung_dmadev_prepare,
        .trigger        = samsung_dmadev_trigger,
        .started        =NULL,
        .flush                = samsung_dmadev_flush,
        .stop                = samsung_dmadev_flush,
};
位置在dma-ops.c文件中。
不知道为啥要给个NULL,明明在ac97.c文件中通过dma_data->ops->started(dma_data->channel);这个代码要调用这个启动函数,由于为空,就直接报错死掉了。
有大侠知道这是什么原因么,linux内核为3.10.30版本,这之后的新版本这里的代码都是一样的。郁闷两天了,求高手指点迷津。

你可能感兴趣的:(mplayer,移植,linux内核)