当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 关于乌龟海岸CS4630 声卡在 ubuntu 13.04 一直警报,不能使用的问题的临时解决。(已找到解决方法了)
帖子发表于 : 2013-05-05 10:00 

注册: 2011-01-15 0:49
帖子: 38
送出感谢: 1
接收感谢: 1
之前发过该帖 viewtopic.php?f=171&t=416032 ,升级新内核,声卡就一直在警报了,不能使用,也给ubuntu 报了bug了 https://bugs.launchpad.net/ubuntu/+sour ... ug/1157525 ,无奈英语不会,最后把 ubuntu 12.04 装3.9内核,声卡是可以正常使用的,可这个3.9 内核,显卡都不能编译,日。
之后我把系统我升级 ubuntu 13.04 测试版 ,可一样警报。。。。装3.9内核也一样。。。。当时被气得不得了,一气之下删除ubuntu ,装lmde,装alsa-driver,临时回避声卡问题。
:em09 昨天又无聊,想装ubuntu 13.04 ,好吧,一直声卡警报,dmesg 输出错误 dsp_spos: SPIOWriteTask not respondingn 。。。。。。。。。
我下了 http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-raring.git 源码,该声卡驱动 sound/pci/cs46xx 里暂时找找这个输出,
在 dsp_spos.c C源码文件,找到这个函数,大概是处理 SPDIF 的

附件:
a.png
a.png [ 96.49 KiB | 被浏览 1218 次 ]



我把下面几行删除掉了
附件:
b.png
b.png [ 10.2 KiB | 被浏览 1218 次 ]



编译了下内核模块(修改了内核 Makefile 版本号,和运行的内核一致),把编译后的 snd-cs46xx.ko 替换 /lib/modules/`uname -r`/kernel/sound/pci/cs46xx 里的 snd-cs46xx.ko ,重启系统,终于不再警报了,打开audacious,动人的旋律从音响里播出。



上面的方法已经过时!!!最后解决的方法看 3 楼


最后由 bangbu 编辑于 2013-05-05 22:07,总共编辑了 3 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: 关于乌龟海岸CS4630 声卡在 ubuntu 13.04 一直警报,不能使用的问题的临时解决。
帖子发表于 : 2013-05-05 10:02 

注册: 2011-01-15 0:49
帖子: 38
送出感谢: 1
接收感谢: 1
:em01 再次找下好心人,把这个 bug 跟官方报告下,我英语渣得可以了。。。。。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 关于乌龟海岸CS4630 声卡在 ubuntu 13.04 一直警报,不能使用的问题的临时解决。
帖子发表于 : 2013-05-05 21:51 

注册: 2011-01-15 0:49
帖子: 38
送出感谢: 1
接收感谢: 1
已经找到最终方法了!


:em05 1 楼的方法只是暂时的解决,声卡有部分功能是不能使用的,今天回到家,又继续看了下原cs46xx的源码,发现 dsp_spos.c 里 cs46xx_poke_via_dsp ,被调用的,均有加锁 mutex_lock(&chip->spos_mutex) 和解锁 mutex_unlock(&chip->spos_mutex) ,可以推测 cs46xx_poke_via_dsp 函数的调用是需要线程安全,多线程调用会发生混乱 ,接着发现 dsp_spos.c 里面 cs46xx_dsp_resume 函数调用 cs46xx_poke_via_dsp,并没加锁,调用 cs46xx_dsp_resume 函数的 cs46xx_lib.c里的 snd_cs46xx_resume 函数,也没有加锁,所以我对 dsp_spos.c 的 cs46xx_dsp_resume 函数锁了一下。

dsp_spos.c 函数 cs46xx_dsp_resume
更改前:
代码:
int cs46xx_dsp_resume(struct snd_cs46xx * chip)
{
   struct dsp_spos_instance * ins = chip->dsp_spos_instance;

   int i, err;

   /* clear parameter, sample and code areas */
   snd_cs46xx_clear_BA1(chip, DSP_PARAMETER_BYTE_OFFSET,
              DSP_PARAMETER_BYTE_SIZE);
   snd_cs46xx_clear_BA1(chip, DSP_SAMPLE_BYTE_OFFSET,
              DSP_SAMPLE_BYTE_SIZE);
   snd_cs46xx_clear_BA1(chip, DSP_CODE_BYTE_OFFSET, DSP_CODE_BYTE_SIZE);
       省略这里的代码.....
   if (chip->dsp_spos_instance->spdif_status_in) {
      cs46xx_poke_via_dsp(chip, SP_ASER_COUNTDOWN, 0x80000005);
      cs46xx_poke_via_dsp(chip, SP_SPDIN_CONTROL, 0x800003ff);
   }
   return 0;
}


更改后
代码:
int cs46xx_dsp_resume(struct snd_cs46xx * chip)
{
   struct dsp_spos_instance * ins = chip->dsp_spos_instance;
       mutex_lock(&chip->spos_mutex);
   int i, err;

   /* clear parameter, sample and code areas */
   snd_cs46xx_clear_BA1(chip, DSP_PARAMETER_BYTE_OFFSET,
              DSP_PARAMETER_BYTE_SIZE);
   snd_cs46xx_clear_BA1(chip, DSP_SAMPLE_BYTE_OFFSET,
              DSP_SAMPLE_BYTE_SIZE);
   snd_cs46xx_clear_BA1(chip, DSP_CODE_BYTE_OFFSET, DSP_CODE_BYTE_SIZE);
       省略这里的代码.....
   if (chip->dsp_spos_instance->spdif_status_in) {
      cs46xx_poke_via_dsp(chip, SP_ASER_COUNTDOWN, 0x80000005);
      cs46xx_poke_via_dsp(chip, SP_SPDIN_CONTROL, 0x800003ff);
   }
       mutex_unlock(&chip->spos_mutex);
   return 0;
}



重新编译该驱动,替换原先的驱动,声音正常,功能正常,推测是正确的! :em09 cs46xx 该bug终于解决了。



_________________
评价: 3.7% naturalaw
 
页首
 用户资料  
 
4 楼 
 文章标题 : Re: 关于乌龟海岸CS4630 声卡在 ubuntu 13.04 一直警报,不能使用的问题的临时解决。(已找到解决方法
帖子发表于 : 2013-05-09 17:42 

注册: 2011-01-15 0:49
帖子: 38
送出感谢: 1
接收感谢: 1
关于如何编译 snd-cs46xx.ko 可以参考下下面的内容:
1.更新下系统,然后从这里下载内核源码 http://kernel.ubuntu.com/git?p=ubuntu/u ... git;a=tree (点击快照 snapshot 下载)
2.解压,然后cd 到内核源码目录,修改 Makefile 文件,比如内核版本号是 3.8.0-20-generic ,则修改为:
代码:
VERSION = 3
PATCHLEVEL = 8
SUBLEVEL = 0
EXTRAVERSION = -20-generic


3.按照3楼的帖子修改代码然后执行下面的命令:
代码:
cp /boot/config-`uname -r`  .config
cp /usr/src/linux-headers-`uname -r`/Module.symvers .
make oldconfig
make prepare
make outputmakefile
make archprepare
make modules SUBDIRS=scripts
make modules SUBDIRS=sound/pci/cs46xx

4.把 sound/pci/cs46xx 里面生成的 snd-cs46xx.ko 模块替换 /lib/modules/`uname -r`/kernel/sound/pci/cs46xx 下的 snd-cs46xx.ko。,然后重启。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 关于乌龟海岸CS4630 声卡在 ubuntu 13.04 一直警报,不能使用的问题的临时解决。(已找到解决方法
帖子发表于 : 2013-05-11 0:23 

注册: 2011-01-15 0:49
帖子: 38
送出感谢: 1
接收感谢: 1
:em20 今天更新了系统,又一直警报 dedededededededededededededededededededededededededededededededede


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Bing [Bot] 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译