您的位置:首页 > 其它

mplayer移植到S3C2440(二)

2013-10-31 14:12 357 查看
 相信大家在前面弄了下会发现在开发板上还是不能播放文件,这里还得修改下内核:
 内核版本: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吧,相信大家照这样下来基本上都能播放文件了。  

阅读(596) | 评论(1) | 转发(0) |

0
上一篇:mplayer移植记录(一)

下一篇:mplayer移植到S3C2440(三)制作皮肤

相关热门文章
uboot移植第一课

常州同城好易购 加盟代理 加盟...

LC
4000
D驱动移植

s3c6410 arm移植实验四:qte4...

网卡AX88796(NE2000兼容网卡...

linux守护进程的几个关键地方...

stagefright与opencore对比

嵌入式Linux之我行——u-boot-...

嵌入式Linux之我行——内核、...

CodeNavigator -- 程序员必备...

ChinaUnix & ITPUB社区12周年...

ssh连接出现以下提示,求解...

如何扩展MYSQL

准备做一个大型门户,用户什么...

gbk or utf8

给主人留下些什么吧!~~





chinaunix网友2011-03-02 20:30:55
请问smdk2410_audio_open()函数是在哪个文件里面?
回复 | 举报

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: