|
发表于 2006-4-21 15:45:30
|
显示全部楼层
问题解决了。
最近,我把我的笔记本重新安装了一下,装了最新的 FREEBSD6.0 发现6.0仍然不能解决这个问题,
不幸的是,我把原来的程序弄丢了,我只好凭记忆重新研究这个问题,一番周折,死机无数次后,终于再次解决了这个问题,把过程说给楼主,如果你还用 FREEBSD 的话,我想一定帮你搞定,因为, 因此放弃 FREEBSD 就太可惜了。
过程如下:
进行之前,务必备份系统,因为,可能因为失败而使系统崩溃。
1. 进入 /usr/src/sys/dec/sound/pci/
2. vi ich.c
3. 找到如下代码,+号代表新增语句, 并注释掉部分语句。
static int
ich_init(struct sc_info *sc)
{
u_int32_t stat;
+ u_int32_t cnt;
+ int sz;
ich_wr(sc, ICH_REG_GLOB_CNT, ICH_GLOB_CTL_COLD, 4);
+ cnt = ich_rd(sc, ICH_REG_GLOB_CNT, 4);
+ cnt &= ~ICH_GLOB_CTL_COLD;
+ ich_wr(sc, ICH_REG_GLOB_CNT, cnt ,4);
DELAY(600000);
stat = ich_rd(sc, ICH_REG_GLOB_STA, 4);
+ cnt = ich_rd(sc, ICH_REG_GLOB_CNT, 4);
+ cnt |= ICH_GLOB_CTL_COLD;
+ ich_wr(sc, ICH_REG_GLOB_CNT, ICH_GLOB_CTL_COLD ,4);
stat= ich_rd(sc, ICH_REG_GLOB_STA, 4);
if ((stat & ICH_GLOB_STA_PCR) == 0) {
/* ICH4/ICH5 may fail when busmastering is enabled. Continue */
// if ((pci_get_devid(sc->dev) != ICH4ID) &&
// (pci_get_devid(sc->dev) != ICH5ID) &&
// (pci_get_devid(sc->dev) != ICH6ID)) {
// return ENXIO;
// }
}
ich_wr(sc, ICH_REG_GLOB_CNT, ICH_GLOB_CTL_COLD | ICH_GLOB_CTL_PRES, 4);
4.存盘
5.进入 /usr/src/sys/modules/sound/driver/ich
6.执行 $make
7.会生成一个文件: snd_ich.ko
8.测试一下 $kldload ./snd_ich.ko
9.如果看到正确的提示信息,就OK了。
10.把这个文件复制到内核文件夹 $cp snd_ich.ko /boot/kernel/ |
|