分类:
2011-08-19 20:27:28
原文地址:声卡驱动的移植 作者:luozhiyong131
硬件接法:L3MODE -> GPB2 L3DATA->GPB3 L3CLOCK->GPB4
内核自带的声卡驱动,可以正常编译,也会打印出正确的配置信息,但是播放时没有声音,也不能进行录音。要替换掉内核自带的驱动(注意先备份[sound/soc/s3c24xx/s3c24xx-pcm.c]),用
将
sound 文件夹,
include/sound 文件夹,
include/asm-arm/plat-s
arch/arm/mach-s
复制到
修改arch/arm/mach-s3c2440/mach-smdk2440.c 161 行Platform_device 结构体中,加入:
&s
修改arch/arm/plat-s3c24xx/devs.c,在DM9000 那段代码下面加入:
static struct s
.l3_clk = S
.l3_data = S
.l3_mode = S
.model = UDA134X_UDA1341,
};
extern struct platform_device s
.name = "s
.dev = {
.platform_data = &s
}
};
EXPORT_SYMBOL(s
在arch/arm/plat-s3c/include/plat/devs.h 中加入一行:
extern struct platform_device s
注意:编译时会出错,提示S3C2410_GPBX,UDA134X_UDA1341,l3_mode 等没有定义,
这里需要在devs.c 中包含两个头文件
#include
#include
配置内核,支持声卡:
Device Drivers:
* Sound card support
* Advanced Linux Sound Architecture
* CCS Mixer API
* CSS PCM(digital audio) API
* Verbose procfs contents
* ALSA for SoC audio support
* SoC audio for the Samsung S
* SoC I2S Audio support for UDA134X wired to a S
编译内核,会报错:
Sound/core/info.c:159:error:’struct proc_dir_entry’has no member named‘owner’
Sound/core/info.c:982:error:’struct proc_dir_entry’has no member named‘owner’
在include/linux/proc_fs.h 文件中定义这个结构体成员,在第70 行加入:struct module *owner;
继续编译,又会出现一个错误:
Sound/soc/s
在
在sound/soc/s3c24xx/s3c24xx-i2s.c 中,第24 行添加:
#include
继续编译,又会出现很多错误:
sound/soc/s
原因是
编译时同样会出现和DM9000 一样的错误,解决方法也是把
static struct platform_device s
(static 改成extern)
如果没有问题了,启动时会打印出以下信息:
Advanced Linux Sound Architecture Driver Version
No device for DAI UDA134X
No device for DAI s
S
UDA134X SoC Audio Codec
asoc: UDA134X <-> s
ALSA device list:
#0: S
前面两句不用管,只要后面的信息都打出来就OK 了,可以在源码下把这两条警告给屏蔽掉
下面测试一下声卡,设备名称为:/dev/dsp
用命令: #cat /dev/dsp > /tmp/1.wav 进行录音,录完后Ctrl+C
用命令:#cat /tmp/1.wav > /dev/dsp 进行放音,如果听到刚才的录音,就说明声卡没问题了,再用madplay 测试一下音质
补丁文件
文件:
linux-2.6.31_TX2440A.diff.tar.bz2
大小:
646KB
下载:
下载