一直想着在开发板上找点乐子,就把开发板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 drivercpuidle: 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 varboot home mnt sbin tmp zImage
dev lib proc sys usr
播放test.wav格式文件
root@FZ:/# cat test.wav > dev/dspUnable 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
CPU: 0 Not tainted (2.6.32.2 #4)
PC is at __gpio_set_value+0x18/0x38
LR is at l3_write+0x20/0xec