[原创][分享]解决连接USB-蓝牙适配器后,系统日志不断出现 hci_scodata_packet 的问题

CPU/显卡/打印机/USB设备等硬件问题
回复
头像
dsdsdds
帖子: 523
注册时间: 2007-04-05 21:22

[原创][分享]解决连接USB-蓝牙适配器后,系统日志不断出现 hci_scodata_packet 的问题

#1

帖子 dsdsdds » 2008-11-16 11:45

我有个 USB - Bluetooth 适配器。每次接到电脑上,系统日志里就不断出现:

代码: 全选

hci_scodata_packet: hci0 SCO packet for unknown connection handle 92
估计有一小时不拔下蓝牙的话,系统日志就>50M了。
搜了一下解法,发现是内核的问题。我自己总结了个解法,希望能帮助大家:

解上蓝牙,运行lsusb,然后赶快拔下蓝牙。
你会看到这样的一项:

代码: 全选

Bus 002 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
(如果你的蓝牙是别的牌子的,那么信息有所不同。)

记下这个 0a12:0001

http://www.kernel.org 上下载最新的内核。
我下载了linux-2.6.27.6.tar.bz2

解压。

运行

代码: 全选

sudo apt-get install libqt3-mt-dev -y
cd linux-2.6.27.6
gedit ./drivers/bluetooth/hci_usb.c
找到“static struct usb_device_id blacklist_ids[]”(在105行左右):
在这个数组里加上一项:

代码: 全选

{ USB_DEVICE(0x0a12, 0x0001), .driver_info = HCI_BROKEN_ISOC },
注意,0x0a12, 0x0001要根据您的蓝牙的实际型号而随机应变。
要是数组里本来就有USB_DEVICE(0x0a12, 0x0001)这一项,那么请把等号后面的项改成HCI_BROKEN_ISOC。
然后关了gedit,回到终端,运行

代码: 全选

make xconfig
在出现的窗口里,选“File”->"Load",装载 /boot/config-2.6.24-21-generic (我这个系统是 8.04,最新的config就是这个了。你要是用8.10,就找比这个更新的config,估计是 /boot/config-2.6.27-xx-generic)
再选“File”->"Save"。关了窗口。
然后

代码: 全选

make
make modules
sudo make modules_install
sudo make install
sudo mkinitramfs -o /boot/initrd.img-2.6.27.6 2.6.27.6 (根据内核具体版本而随机应变)
再把 /boot/grub/menu.lst 改了,加上

代码: 全选

title		Ubuntu 8.04.1, kernel 2.6.27.6-generic
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.27.6 root=UUID=7c503741-0611-4cd8-80ef-937aa6c202bb ro quiet splash locale=zh_CN
initrd		/boot/initrd.img-2.6.27.6
quiet
注意:别照抄。要模仿你电脑上menu.lst文件里,Ubuntu自动生成的那项写。

重启,选择用新的内核启动。

再接上蓝牙,就没有 hci_scodata_packet 啦 :em11

弱弱的说:不过,要是系统没声音、或者声音咔啦咔啦的话,你还要自己编译安装一遍ALSA才行。

以下是装ALSA的方法:

下载这三个文件(要是有更加新的版本就下新版):

代码: 全选

驱动程序:ftp://ftp.alsa-project.org/pub/driver/alsa-driver-1.0.18a.tar.bz2
库文件:ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.18.tar.bz2
工具:ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.18.tar.bz2
将这三个文件放到你一般看不见的位置 :em06 因为就算ALSA装好了,误删了文件夹,电脑也会没声音。我是放在 /boot/alsa/ 里

打开终端,运行

代码: 全选

sudo apt-get install xmlto -y
sudo apt-get install libncurses5-dev -y (根据实际情况,可能还需要装别的包)
VER=1.0.18 (根据具体情况改)
tar jxf alsa-driver-${VER}a.tar.bz2 (根据具体情况改)
tar jxf alsa-lib-${VER}.tar.bz2
tar jxf alsa-utils-${VER}.tar.bz2
cd alsa-driver-${VER}a
./configure --with-cards=hda-intel && make && sudo make install (我电脑声卡是Intel的,所以这么写)
cd ..
cd alsa-lib-${VER}
./configure && make && sudo make install
cd ..
cd alsa-utils-${VER}
./configure && make && sudo make install
cd ..
然后

代码: 全选

sudo gedit /etc/modprobe.d/alsa-base
在最后一行加

代码: 全选

options snd-hda-intel model=acer
注意,别照抄,我电脑是Acer、声卡是Intel的,所以这样写。根据电脑的型号和声卡的型号确定“options snd-hda-intel model=XXX”的方法,在ALSA的文档里
授人以鱼,不如授人以渔。
回复