S3C2440 UDA1341声卡移植

一直想着在开发板上找点乐子,就把开发板DIY成自己的mp3吧,随便学linux更多的东西,所以要把声卡先移植成功。在移植过程中还是参考网上诸位高手的大作,再次向这些前辈表示感谢。

1,在平台初始化文件arch/arm/mach-s3c2440/mach-fz2440.c中

加入相关头文件

#include <plat/nand.h>

#include <sound/s3c24xx_uda134x.h>
#include <mach/gpio-fns.h>
#include <plat/map.h>

#include <plat/common-smdk.h>

加入初始化引脚等相关平台设置

static struct s3c24xx_uda134x_platform_data __initdata s3c24xx_uda134x_data = {
    .l3_clk = S3C2410_GPB(4),
    .l3_data = S3C2410_GPB(3),  
    .l3_mode = S3C2410_GPB(2),  
    .model = UDA134X_UDA1341,
};

static struct platform_device __initdata s3c_device_uda1341 = {  
        .name = "s3c24xx_uda134x",  
        .dev = {  
                .platform_data    = &s3c24xx_uda134x_data,  
        }  
}; 

添加平台设备

static struct platform_device __initdata *fz2440_devices[] = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_nand,
&s3c_device_rtc,
&s3c_device_uda1341,
};

这样,我们基本就添加好了 UDA1341 音频设备的驱动。

2,配置编译进内核

在终端中进入到内核源码根目录下执行make menuconfig

Device Drivers --->
    <*> Sound card support --->

        [*]   Preclaim OSS device numbers 

        <*>   Advanced Linux Sound Architecture  ---> //  出现音频驱动体系结构的子菜单,在这里,我们选择OSS 接口相关的配置选项,需要注意的是,这里的OSS 接口其实是基于ALSA 接口创建的,因为新的内核中现在都已经改用ALSA 设计,这里是为了和以前的软件兼容才这样做的。

            < >   Sequencer support

            <*>   OSS Mixer API 

             <*>   OSS PCM (digital audio) API       ------------------------------> for /dev/dsp node 

            [*]     OSS PCM (digital audio) API - Include plugin system

            [*]   Dynamic device file minor numbers 

            [ ]   Support old ALSA API

             [*]   Verbose procfs contents

            <*>   ALSA for SoC audio support  ---> 

                       -*-   SoC I2S Audio support UDA134X wired to a S3C24XX

3,烧入程序并测试

i2c /dev entries driver
cpuidle: using governor ladder
Advanced Linux Sound Architecture Driver Version 1.0.21.
No device for DAI UDA134X
No device for DAI s3c24xx-i2s
S3C24XX_UDA134X SoC Audio driver
UDA134X SoC Audio Codec
asoc: UDA134X <-> s3c24xx-i2s mapping ok
ALSA device list:
  #0: S3C24XX_UDA134X (UDA134X)

TCP cubic registered
NET: Registered protocol family 17

查看系统设备:

root@FZ:/# cat /proc/devices
Character devices:
  1 mem
  2 pty
  3 ttyp
  4 /dev/vc/0
  4 tty
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  7 vcs
 10 misc
 13 input
 14 sound
 29 fb
 89 i2c

14为主设备号

查看dsp设备信息:

root@FZ:/# ls -l /dev/dsp
crw-rw----    1 root     root      14,   3 Jan  1 00:00 /dev/dsp
root@FZ:/# 

主设备号为14,次设备号为3

root@FZ:/# ls

bin       etc       linuxrc   root      test.wav  var
boot      home      mnt       sbin      tmp       zImage

dev       lib       proc      sys       usr

播放test.wav格式文件

root@FZ:/# cat test.wav > dev/dsp
Unable to handle kernel paging request at virtual address 82df7870
pgd = c3978000
[82df7870] *pgd=00000000
Internal error: Oops: 5 [#1]
last sysfs file: /sys/devices/platform/soc-audio/sound/card0/mixer/dev
Modules linked in:
CPU: 0    Not tainted  (2.6.32.2 #4)
PC is at __gpio_set_value+0x18/0x38
LR is at l3_write+0x20/0xec
pc : [<c017d768>]    lr : [<c021b210>]    psr: 20000013
sp : c39fbca0  ip : e58d81e4  fp : c39c5400
r10: c03a8478  r9 : c03a8200  r8 : 00000000
r7 : c39fbcc6  r6 : 00000001  r5 : c03a83c0  r4 : 00000016
r3 : c03d61c0  r2 : 00000001  r1 : 00000001  r0 : c2a216b0
Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
Control: c000717f  Table: 33978000  DAC: 00000017
Process cat (pid: 685, stack limit = 0xc39fa270)
Stack: (0xc39fbca0 to 0xc39fc000)
bca0: 00000016 c021b210 00000010 c03a83c0 c39c5800 c39539c0 00000000 c021b484
bcc0: c39539c0 16100008 00000010 00000010 c39664e0 c021b60c c3870c00 c39c5800
bce0: c03a8288 c03a7ea0 00000000 c0216434 00000000 c39c5400 c39c5800 c3870c00
bd00: c3870c00 c39c5000 c3870c00 c01fae94 c39c5800 c39c4400 00000000 c3870c00
bd20: c3870c00 c01fb504 0000000c c01faa94 00000000 00000000 00000000 00000000
bd40: 00000000 00000007 00000000 00000000 00000008 00000009 0000000a 00000000
bd60: 00000000 00000003 0000000b 0000000c 00000000 00000004 00000000 00000005
bd80: 00000006 00000000 00000008 c3877c00 c39fbd30 c3870c00 00000000 00000000
bda0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
bdc0: 00000000 00000000 00000000 00000000 00000000 00000001 00000005 00000003
bde0: 00000004 00000000 00000001 00000000 00000000 00000000 00000000 00000000
be00: 00000000 00000000 00000020 00000010 00000000 00000010 c39c4400 c3870c00
be20: c25c4111 c39c4400 c3870c00 c39c5400 c39c5000 c3870c00 c39c5400 c01fc9d0
be40: 00000000 c39c5800 00000001 c39c4400 ffffffff c3870c00 c25c4111 c39c4400
be60: bf000000 c01fca88 00000010 00000000 00000001 c39c4400 c39c5400 c0204944
be80: 00000000 00001000 c39c564c 00000008 00000001 c39f8e00 00000001 00010000
bea0: c39fa000 ffffffff ffffffff 00000000 00000000 00000000 00000000 00000000
bec0: 00000000 00000018 00000000 00000000 00000000 00000000 00000000 00000000
bee0: 00000000 00000005 00000000 00000000 00000000 00000000 00000000 00000000
bf00: 00000000 c39f8880 00001000 c39c5400 c3870c00 c3870c00 00001000 00000000
bf20: c39fa000 befdcc98 00000003 c0204c50 c39f8800 c39c5400 c3870c00 c02052b4
bf40: c39fbf88 c39f8800 befdcc98 c39fbf88 00000004 00001000 c39fa000 00000000
bf60: 00000003 c008e620 c39f8800 befdcc98 00000000 00000000 c39f8800 00000004
bf80: c002a028 c008e770 00000000 00000000 00001000 00000000 00001000 befdcc98
bfa0: 00000001 c0029e80 00001000 befdcc98 00000001 befdcc98 00001000 001dc794
bfc0: 00001000 befdcc98 00000001 00000004 00000000 00000001 00000001 00000003
bfe0: 001dd4c0 befdcc68 00019f30 00008edc 60000010 00000001 00000000 00000000
[<c017d768>] (__gpio_set_value+0x18/0x38) from [<c021b210>] (l3_write+0x20/0xec)
[<c021b210>] (l3_write+0x20/0xec) from [<c021b484>] (uda134x_write+0xd0/0xec)
[<c021b484>] (uda134x_write+0xd0/0xec) from [<c021b60c>] (uda134x_hw_params+0x16c/0x184)
[<c021b60c>] (uda134x_hw_params+0x16c/0x184) from [<c0216434>] (soc_pcm_hw_params+0x94/0x1ac)
[<c0216434>] (soc_pcm_hw_params+0x94/0x1ac) from [<c01fae94>] (snd_pcm_hw_params+0xd8/0x3b4)
[<c01fae94>] (snd_pcm_hw_params+0xd8/0x3b4) from [<c01fb504>] (snd_pcm_common_ioctl1+0x230/0xf1c)
[<c01fb504>] (snd_pcm_common_ioctl1+0x230/0xf1c) from [<c01fc9d0>] (snd_pcm_playback_ioctl1+0x3d8/0x3fc)
[<c01fc9d0>] (snd_pcm_playback_ioctl1+0x3d8/0x3fc) from [<c01fca88>] (snd_pcm_kernel_ioctl+0x64/0xb0)
[<c01fca88>] (snd_pcm_kernel_ioctl+0x64/0xb0) from [<c0204944>] (snd_pcm_oss_change_params+0x984/0xc70)
[<c0204944>] (snd_pcm_oss_change_params+0x984/0xc70) from [<c0204c50>] (snd_pcm_oss_make_ready+0x20/0x4c)
[<c0204c50>] (snd_pcm_oss_make_ready+0x20/0x4c) from [<c02052b4>] (snd_pcm_oss_write+0x48/0x208)
[<c02052b4>] (snd_pcm_oss_write+0x48/0x208) from [<c008e620>] (vfs_write+0xb0/0x158)
[<c008e620>] (vfs_write+0xb0/0x158) from [<c008e770>] (sys_write+0x3c/0x68)
[<c008e770>] (sys_write+0x3c/0x68) from [<c0029e80>] (ret_fast_syscall+0x0/0x28)
Code: e3a0300c e0000c93 e59f301c e1a02001 (e7933000) 
---[ end trace fae17f4b2ecd3b40 ]---

Segmentation fault

本以为可以听到美妙的音乐了,只听到耳机有噪声,命令控制台没反应,郁闷,开始查资料解决问题

Unable to handle kernel paging request at virtual address 82df7870

这类错误一般是总线访问错误,仔细看有
Modules linked in:
CPU: 0    Not tainted  (2.6.32.2 #4)
PC is at __gpio_set_value+0x18/0x38
LR is at l3_write+0x20/0xec
可能是在UDA1341static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = {
处有问题
网上看到一段这样的话 这个问题是由于arch/arm/mach-s3c2440/mach-mini2440.c中nand flash controller相关配置数据被声明为__initdata属性造成的。这部分数据会在根文件系统挂载后被释放,但事实上它们还会被nand flash driver用到,因此就出现了memory access问题。解决的办法是把arch/arm/mach-s3c2440/mach-mini2440.c中下列几行中的__initdata声明去掉:”
参照上面原理解释把__initdata去掉
static struct s3c24xx_uda134x_platform_data __initdata s3c24xx_uda134x_data={
static struct platform_device __initdata s3c_device_uda1341 = { 
改为
static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data={
static struct platform_device s3c_device_uda1341 = { 

重新编译测试
root@FZ:/# cat test.wav > /dev/dsp
虽然播放频率感觉不对但总算有音乐出来了,兴奋。。。。接着可以试着移植madplayer了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值