mplayer移植到S3C2440(二)

 相信大家在前面弄了下会发现在开发板上还是不能播放文件,这里还得修改下内核:
 内核版本: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吧,相信大家照这样下来基本上都能播放文件了。  
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(596) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-02 20:30:55

请问smdk2410_audio_open()函数是在哪个文件里面?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值