论坛: UNIX系统 标题: [分享]关于非标准制式U盘在FreeBSD下引起当机的解法方法 复制本贴地址    
作者: xiean [xiean]    论坛用户   登录
序:
由于M$过分的纵容,使很多硬件制造商以兼容 win 为目标,而不是以国际标准来制作一些硬件,从而引起在FB下很多希奇古怪的问题,比如ACPI

引用一段话 http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/acpi-debug.html
引用:
我们的长期目标是让每一个人都能够在不需要任何用户干预的情况下使用 ACPI。 然而, 目前我们仍然在开发绕过 BIOS 制造商常见错误的方法。 Microsoft 解释器 (acpi.sys 和 acpiec.sys) 并不会严格地检查是否遵守了标准, 因此许多只在 Windows 中测试 ACPI 的 BIOS 制造商很可能永远不会修正他们的 ASL。我们希望不断地找出并用文档说明 Microsoft 的解释器到底允许那些不标准的行为, 并在 FreeBSD 进行对应的修改使它能够正常工作而不需要用户修正 ASL。


我想 USB 也同样如此,现在回到正题,在很多朋友使用U盘过程中,会出现类似以下的情况(根据不同环境会有所不同,但不影响全局)

引用:
接上时...
da0 at umass-sim0 bus 0 tgrget 0 lun 0
da0:<YOUR COMPANY USB Mass Storage> Removable Direct Access SCSI-0 device
da0:1.000MB/s transfers
da0:31MB (63744 512byte seators:64H 32S/T 31C)
umass0:Phase Error , residne = 0
(da0:umass-sim0:0:0:0):Synchronize
cache failed, status == 0x4,scsi status = = 0x0
然后死机或出现系统不稳定的情况


引用:
拨出时...
Fatal trap 12: page fault while in kernel mode
fault virtual address  = 0x1c
fault code            = supervisor read, page not present
instruction pointer    = 0x8:0xc04f499e
stack pointer          = 0x10:0xcde46c78
frame pointer          = 0x10:0xcde46c88
code segment          = base 0x0, limit 0xfffff, type 0x1b= DPL 0, pres 1, def32 1, gran 1
processor eflags      = interrupt enabled, resume, IOPL = 0
current process                = 22 (irq11: cbb0 cbb1++*)
trap number            = 12
panic: page fault
Uptime: 57s
Cannot dump. No dump device defined.
Shutting down ACPI
stray irq9
Automatic reboot in 15 seconds - press a key on the console to abort
自动重启


先说说标准情况下,U盘的配置,在kernel中配置
引用:
# SCSI peripherals
device          scbus          # SCSI bus (required for SCSI)
device          da              # Direct Access (disks)
device          pass            # Passthrough device (direct SCSI access)

# USB support
device          uhci            # UHCI PCI->USB interface
device          ohci            # OHCI PCI->USB interface
device          usb            # USB Bus (required)
device          umass          # Disks/Mass storage - Requires scbus and da

注意:虽然在核心中 umass 依赖于 scbus 和 da,但是如果你没有 pass 则一样无法使用U盘


使用U盘的方式
引用:
例:
如果你的U盘映射设备是da0,且只有一个FAT分区

装载
# mount -t msdos /dev/da0s1 /mnt

移除(确定你不在 /mnt 或你自定的U盘目录下,且也没有打开相关的文件)
# umount /mnt
然后直接拨出来就可以了


如果你按照以上配置并重编译核心后就可以正常使用U盘的话,那么恭喜你,下面的部分,你可以忽略过去

回到主题,似乎看这帖的各位就是冲下面这部分来的 XD,谁叫咱用方块字的人制作标准乱用呢。。

解决本帖主题出现的问题(我是 FB5.3R,其它版本系统依情况不同,自行修改,如果有问题请跟帖),step by step
注意:初学者请慎重考虑,以下部分涉及核心代码修改,如果在你不明白或不理解的情况下修改后造成的后果,偶不负任何责任

引用:
1.先想法使你的U盘可以接上(就是能不死机就行)
# usbdevs -v
Controller /dev/usb0:
addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x0000), rev 1.00
port 1 addr 2: full speed, self powered, config 1, General Purpose USB Hub(0x2036), Texas Instruments(0x0451), rev 1.01
  port 1 addr 3: full speed, power 100 mA, config 1, USB Mass Storage(0x8001), YOUR_COMPANY(0x09a6), rev 1.00
  port 2 powered
port 2 powered
记下红色的部分,特别是 USB Mass Storage 部分、0x8001(代表产品编号) 和 0x09a6(代表制造厂家),如果你真的是衰到家了,一接U盘就死,那么你要想尽办法弄到这两个编号和产品名

2.修改核心 /usr/src/sys/dev/usb/usbdevs (记得备份哈)
在适当的地方加入(其中的 0x09a6 是厂商编号,根据情况自行修改)
vendor USBFLASH        0x09a6  China USB

在文件尾加入(其中的 0x8001 是产品编号,根据情况自行修改)
/* China USB flash ram */
product USBFLASH USBFLASH      0x8001  China USB flash ram


3.修改核心 /usr/src/sys/dev/usb/umass.c (记得备份哈)
在大约 464 行的 { VID_EOT, PID_EOT, RID_EOT, 0, 0 } 代码前面插入

{ USB_VENDOR_USBFLASH, USB_PRODUCT_USBFLASH_USBFLASH, RID_WILDCARD,
  UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
  IGNORE_RESIDUE
},


4.修改核心 /usr/src/sys/cam/scsi/scsi_da.c (记得备份哈)
在大约 321 行插入(其中的 USB Mass Storage 修改成你在第一步中所获得的产品名)
        {
                /*
                * China USB Driver
                */
                {T_DIRECT, SIP_MEDIA_REMOVABLE, "*", "*USB Mass Storage*", "*"},
                /*quirks*/ DA_Q_NO_SYNC_CACHE
        },


5. 重编译核心
如果你一切都修改正确,操作也没问题的话,那么,一切都平静了,FB又回到了原来的宁静与稳定――祝大家平安夜顺心圣诞快乐



-- writed by xiean at 2004-12-24

地主 发表时间: 04-12-27 10:03

回复: NetDemon [netdemon]   ADMIN   登录
牛X

B1层 发表时间: 04-12-27 13:16

回复: lqfrla [lqfrla]   论坛用户   登录


B2层 发表时间: 04-12-29 16:20

回复: Root [wb8504]   论坛用户   登录
说实话我觉得freeBSD和各种发行版的linux现在已经没有以前那么有吸引力了,因为安装使用起来即使是高手也会碰到不少希奇古怪的问题,简直是被这些开源工具所累,装这些系统电脑生产工具反而成了人生产效率的负担.如果2003server还和win2000server服务效率以及可靠性那么差,我也许会考虑这些开源系统

B3层 发表时间: 05-01-19 18:51

回复: SysHu0teR [syshunter]   版主   登录

更让我郁闷的是,我自认为C语言基础还不错,可读起那些代码来就是不大明白

B4层 发表时间: 05-01-26 10:38

回复: ziaichen [ziaichen]   论坛用户   登录
厉害!


B5层 发表时间: 05-03-13 09:43

回复: S_Admin [f_h]   论坛用户   登录
郁闷.在开始安装Linux的时候.我的U盘是可以用的.结果.当我装了几次Linux系统后.再用 U盘的时候.却一用就死机.郁闷...却不知道该怎么办...

B6层 发表时间: 05-03-30 18:26

回复: XO [guang0701]   论坛用户   登录
好X的一头牛

B7层 发表时间: 05-04-14 12:11

回复: zhbangwei [zhbangwei]   论坛用户   登录
哈哈哈~~~早就知道邪安厉害~!~~!~!~

B8层 发表时间: 05-05-10 14:14

论坛: UNIX系统

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号