相信大家在前面弄了下会发现在开发板上还是不能播放文件,这里还得修改下内核:
内核版本:2.6.12
编译器版本:arm-linux-gcc 3.4.1
1 修改/arch/arm/mach-s3c2410/devs.c
解决文件系统大于30M无法烧到板上的问题:
struct mtd_partition gec24xx_default_nand_part_b[] = {
[0] = {
.name = "Bootload",
.size = 0x00030000,
.offset = 0
},
[1] = {
.name = "Kernel",
.size = 0x001d0000,
.offset = 0x00030000,
},
[2] = {
.name = "RootFileSystem",
.size = 0x03e00000,
.offset = 0x00200000,
}
};
struct s3c2410_nand_set nandset ={
nr_partitions: 3 ,
partitions: gec24xx_default_nand_part_b, //partition_info ,
};
2 修改/sound/oss/s3c2410-oss.c文件,解决mplayer无法使用oss播放音频
音频无法播放的原因及解决:
这个问题产生的根源最终追溯到音频的驱动部分。现在大部分的嵌入式板子都使用菲利普uda1341音频芯片,
因而也都使用了相同一个音频驱动,即MIZI 公司拥有版权的linux uda1341音频驱动,这个驱动基本上符合了oss的规范,
但是当使用到多段DMA音频数据传输时,出现了一个问题,即DMA缓冲的建立发生在第一次调用write()函数
将音频数据传送到设备描述符的时候,然而oss驱动的调用者通常要在打开音频设备描述时候,就期望获取DMA缓冲的信息,
然而因为缓冲尚未建立,因而返回缓冲大小为0这个结果。
解决的办法是在音频驱动源码的smdk2410_audio_open()函数体,加上如下一段代码,
if (!output_stream .buffers && audio_setup_buf(&output_stream))
return -ENOMEM;
添加的位置具体见以下代码的粗体部分:
static int smdk2410_audio_open(struct inode *inode, struct file *file)
{
int cold = !audio_active;
DPRINTK("audio_open\n");
if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
if (audio_rd_refcount || audio_wr_refcount)
return -EBUSY;
audio_rd_refcount++;
} else if ((file->f_flags & O_ACCMODE) == O_WRONLY) {
if (audio_wr_refcount)
return -EBUSY;
audio_wr_refcount++;
} else if ((file->f_flags & O_ACCMODE) == O_RDWR) {
if (audio_rd_refcount || audio_wr_refcount)
return -EBUSY;
audio_rd_refcount++;
audio_wr_refcount++;
} else
return -EINVAL;
if (cold) {
audio_rate = AUDIO_RATE_DEFAULT;
audio_channels = AUDIO_CHANNELS_DEFAULT;
audio_fragsize = AUDIO_FRAGSIZE_DEFAULT;
audio_nbfrags = AUDIO_NBFRAGS_DEFAULT;
if ((file->f_mode & FMODE_WRITE)){
init_s3c2410_iis_bus_tx();
audio_clear_buf(&output_stream);
// 加上以下这行代码
if (!output_stream .buffers && audio_setup_buf(&output_stream))
return -ENOMEM;
}
if ((file->f_mode & FMODE_READ)){
init_s3c2410_iis_bus_rx();
audio_clear_buf(&input_stream);
}
}
MOD_INC_USE_COUNT;
return 0;
}
改完驱动后,重新编译内核。
重新烧下zImage吧,相信大家照这样下来基本上都能播放文件了。
阅读(1212) | 评论(1) | 转发(0) |