嵌入式驱动移植之声卡驱动移植

移植环境

BootLoader:u-boot-1.1.6
kernel:linux-2.6.30.4
CPU:s3c2440
开发板:TQ2440
声卡:UDA1341

移植步骤

在 Linux-2.6.30.4 的驱动中已经包含了 UDA13410 的驱动了,不过原生的 1.0.20 这个版本会出现播放音频视频断断续续的情况,应该是驱动 bug,这里使用了 1.0.18a 这个版本的驱动,成功解决了播放断断续续的问题。

1、在 Linux-2.6.30.4 中替换 1.0.18a 的驱动:

获取 1.0.18a 的声卡驱动,可以下载 Linux-2.6.29.xxx 的内核源码,然后复制其中的“sound/”目录和“ include/sound/ ” 目 录 到 Linux-2.6.30.4 的 内 核 中 替 换 掉 原 来 的 目 录 ; 然 后 复 制“ include/asm-arm/plat-s3c24xx/ ” 目 录 到 Linux-2.6.30.4 目 录 下 的 “ include/asm-arm/ ” 目 录 下 ; 复 制
“arch/arm/mach-s3c2410/include/mach/audio.h”文件到对应的目录下。
在“include/linux/proc_fs.h”文件中 70 行添加如下内容:

struct module *owner;

因为在“sound/core/info.c”文件的 159 和 982 行用到了 struct proc_dir_entry 结构图的 owner 变量。
然后修改“arch/arm/mach/mach-s3c2440/mach-smdk2440.c”文件,添加如下内容:

 # include 
/* UDA1341 */
static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = {
		.l3_clk = S3C2410_GPB4,
		.l3_data = S3C2410_GPB3,
		.l3_mode = S3C2410_GPB2,
		.model = UDA134X_UDA1341,
};
static struct platform_device s3c_device_uda134x = {
	.name = "s3c24xx_uda134x",
	.dev = {
	.platform_data = &s3c24xx_uda134x_data,
}
};
static struct platform_device *smdk2440_devices[] __initdata = {
		&s3c_device_usb,
		&s3c_device_lcd,
		&s3c_device_wdt,
		&s3c_device_i2c0,
		&s3c_device_iis,
		&s3c_device_rtc,
		&s3c_device_dm9000,
		&s3c_device_uda134x, //添加的
};
2、配置内核

Device Drivers —>
<* > Sound card support —>
— Sound card support
<* > Advanced Linux Sound Architecture —>
— Advanced Linux Sound Architecture
<* > OSS Mixer API
<* > OSS PCM (digital audio) API
[* ] Verbose procfs contents
<* > ALSA for SoC audio support —>
— ALSA for SoC audio support
<* > SoC Audio for the Samsung S3CXXXX chips
<* > SoC I2S Audio support UDA134X wired to a S3C24XX
完成配置后,保存配置单,编译出内核,烧写镜像到开发板之后,可以在开发板上面使用声卡设备了。

3、测试声卡

使用 madplay 播放器来播放 MP3 等音频文件,直接复制天嵌科技提供的文件系统里面的 madplay 到NFS文件系统的“sbin/”目录下即可。
嵌入式驱动移植之声卡驱动移植_第1张图片
这里发现一个问题,按照天嵌的方法不能录音和播放:
在开发板的串口终端使用:#cat /dev/sound/dsp > /tmp/abc.wav 这条命令进行录音测试,然后再使用:#cat /tmp/abc.wav > /dev/sound/dsp,
发现用不了,有待解决。。。。。。。

你可能感兴趣的:(笔记)