[2410]移植uda1341驱动到linux2.6.14.1

经过一上午的努力,终于把uda1341的驱动移植到linux2.6.14.1。

目前只能放wav,声音速度也不对,需要修改一些设置,但至少能够放出声音。

下面讲讲移植的过程,网上教程有好几个,综合后才成功的,不过有点乱,自己都有点搞混了。

===============================================

1)linux2.4内核里面的s3c2410-uda1341.c文件肯定是不能用的,需要大量修改,我是从华恒的论坛下载到修改好的文件
链接在这儿:http://www.hhcn.com/cgi-bin/topic.cgi?forum=3&topic=613&start=0&show=0

2)仔细看这个s3c2410-uda1341.c文件,还是有点问题
首先,我没有这个文件asm/arch/S3C2410.h
没办法,先注释掉,硬着头皮编译

3)放到linux2.6.14/sound/oss/目录下

4)修改oss目录下的kconfig
添加
config S3C2410_SND_UDA1341

       tristate "S3C2410 UDA1341 driver (S3C2410)"

       depends on SOUND_PRIME!=n && SOUND && ARM && ARCH_SMDK2410

5)修改oss目录下的makefile
增加
obj-$(CONFIG_S3C2410_SND_UDA1341) += s3c2410-uda1341.o

6)修改增加内存映射,以使内核知道该虚拟地址可用,而且对应的物理地址是我们的声卡。修改/arch/arm/mach-s3c2410/smdk-s3c2410.如下:
static struct map_desc smdk2410_iodesc[] __initdata = {
/**//* nothing here yet */
{0xe0000000, 0x19000000, SZ_1M, MT_DEVICE}, // 网卡内存映射
{0xf0d00000, 0x55000000, SZ_1M, MT_DEVICE}, // 声卡内存映射
};

7)make menuconfig
选择driver->sound->oss->uda1341

8)编译 make zImage

没有错误的话,启动可以看到
mice: PS/2 mouse device common for all mice
UDA1341 audio driver initialized
NET: Registered protocol family 2

9)测试
A. 查看在/dev/sound/下是否有dsp以及mixer两个设备;
B. 如果有,再执行如下的命令:cat 1.wav >/dev/sound/dsp;就是将PCM数据放到dsp上,如果成功地进行了移植,那么耳机就会听到一些声音,当然还不是音乐。这里只能是用.wav文件来测试,因为它是PCM编码的,不能用mp3文件,否则会听不到发声。

1.wav我是通过tftp传到ramfs分区的


可惜在第八步没有错误是不可能的

=============================================
排错

1)提示“S3C2410_IISMOD_MASTER”未定义
网上的解决方法是注释掉相关的两条,因为本来就是主设备

2)提示"IISPSR_A" "IISPSR_B" 未定义”
很无奈的错误,网上基本无解,后来在论坛上看到s3c2410-uda1341.c,添加了如下内容

/************************* add by lfc **************************/
#define fIISPSR_A Fld(5, 5) /* Prescaler Control A */
#define IISPSR_A(x) FInsrt((x), fIISPSR_A)
#define fIISPSR_B Fld(5, 0) /* Prescaler Control B */
#define IISPSR_B(x) FInsrt((x), fIISPSR_B)
/**************************** end add **************************/

3)提示"FInsrt"等未定义
晕,上面白添加了
继续看不同之处,发现还需要这个文件#include <asm/arch/bitfield.h>
这个文件2.6内核没有,我从2.4内核里拷贝过来,果然有Finsrt的定义

4)刚开始移植时,我按照另外一篇教程,把s3c2410-uda1341.c放到sound/driver目录下,这样需使用ALSA
可惜有错误
Advanced Linux Sound Architecture Driver Version 1.0.10rc1 (Mon Sep 12 08:13:09 2005 UTC).
Unable to handle kernel paging request at virtual address f0d00008
pgd = c0004000
[f0d00008] *pgd=00000000
Internal error: Oops: 805 [#1]
Modules linked in:
CPU: 0
PC is at s3c2410iis_probe+0x13c/0x2dc
LR is at 0x1
pc : [<c01b6260>]    lr : [<00000001>]    Not tainted
sp : c03a5ef8 ip : f0e00040 fp : c03a5f14
r10: 00000000 r9 : 00000000 r8 : 00000000
r7 : c02d8ae8 r6 : c028b000 r5 : c02d8aec r4 : 00000000
r3 : f0d00000 r2 : 00000001 r1 : 20000093 r0 : 00000004
Flags: nzCv IRQs on FIQs on Mode SVC_32 Segment kernel
Control: 717F Table: 30004000 DAC: 00000017
Process swapper (pid: 1, stack limit = 0xc03a4194)
Stack: (0xc03a5ef8 to 0xc03a6000)
5ee0:                                                       c026d2cc 00000000
5f00: c028b000 c028b000 c03a5f30 c03a5f18 c012ea98 c01b6134 c026d37c c03a5f48
5f20: c012eb90 c03a5f44 c03a5f34 c012ebdc c012ea4c 00000000 c03a5f70 c03a5f48
5f40: c012e118 c012eba0 c0279bf8 c0279bf8 c026d314 c028b014 c028b000 00000000
5f60: c0279b10 c03a5f80 c03a5f74 c012ec28 c012e0d8 c03a5fa8 c03a5f84 c012e598
5f80: c012ec18 c028b000 c03a4000 00000000 c001e414 00000000 00000000 c03a5fc0
5fa0: c03a5fac c012f01c c012e53c c02512bc 0000001c c03a5fd4 c03a5fc4 c001ac70
5fc0: c012efec c001e3e8 c03a5ff4 c03a5fd8 c00240e8 c001ac50 00000000 00000000
5fe0: 00000000 00000000 00000000 c03a5ff8 c003c82c c0024068 633e333c 5f616970
Backtrace:
[<c01b6124>] (s3c2410iis_probe+0x0/0x2dc) from [<c012ea98>] (driver_probe_device+0x5c/0xa8)
r7 = C028B000 r6 = C028B000 r5 = 00000000 r4 = C026D2CC
[<c012ea3c>] (driver_probe_device+0x0/0xa8) from [<c012ebdc>] (__driver_attach+0x4c/0x78)
r6 = C012EB90 r5 = C03A5F48 r4 = C026D37C
[<c012eb90>] (__driver_attach+0x0/0x78) from [<c012e118>] (bus_for_each_dev+0x50/0x84)
r4 = 00000000
[<c012e0c8>] (bus_for_each_dev+0x0/0x84) from [<c012ec28>] (driver_attach+0x20/0x28)
r7 = C0279B10 r6 = 00000000 r5 = C028B000 r4 = C028B014
[<c012ec08>] (driver_attach+0x0/0x28) from [<c012e598>] (bus_add_driver+0x6c/0x138)
[<c012e52c>] (bus_add_driver+0x0/0x138) from [<c012f01c>] (driver_register+0x40/0x4c)
[<c012efdc>] (driver_register+0x0/0x4c) from [<c001ac70>] (s3c2410_uda1341_init+0x30/0x40)
r4 = 0000001C
[<c001ac40>] (s3c2410_uda1341_init+0x0/0x40) from [<c00240e8>] (init+0x90/0x214)
r4 = C001E3E8
[<c0024058>] (init+0x0/0x214) from [<c003c82c>] (do_exit+0x0/0xa70)
r7 = 00000000 r6 = 00000000 r5 = 00000000 r4 = 00000000
Code: ebf9e36c e121f004 e5953000 e3a04000 (e5834008)
<0>Kernel panic - not syncing: Attempted to kill init!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值