前几天有人的U盘不能用了,我本身也不是高手,所以没能帮上忙,
关于非标准U盘在BSD下的使用(转)Unix系统
。今天在20CN里偶然看了这篇文章,希望能为大家提供一个 解决方案 , [color=red:4f5b304787]请注意,不要完全的照搬,要学会根据自己的情况仔细分析[/color:4f5b304787] 原出处: [url]http://ww前几天有人的U 盘不能用了,我本身也不是高手,所以没能帮上忙。今天在20CN里偶然看了这篇文章,希望能为大家提供一个解决方案,
[color=red:4f5b304787]请注意,不要完全的照搬,要学会根据自己的情况仔细分析[/color:4f5b304787]
原出处:
[url]http://www.20cn.net/cgi-bin/club/club.pl?key=jIWcWJVUbFwo[/url]
我引用过来只是不想大家麻烦
[color=brown:4f5b304787]作者: 邪安 [xiean] [/color:4f5b304787]
序:
由于M$过分的纵容,使很多硬件制造商以兼容 win 为目标,而不是以国际标准来制作一些硬件,从而引起在FB下很多希奇古怪的问题,比如ACPI
引用一段话[url] http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/acpi-debug.html
[/url]
引用:
##########################################
我们的长期目标是让每一个人都能够在不需要任何用户干预的情况下使用 ACPI。 然而, 目前我们仍然在开发绕过 BIOS 制造商常见错误的方法。 Microsoft 解释器 (acpi.sys 和 acpiec.sys) 并不会严格地检查是否遵守了标准, 因此许多只在Windows中测试ACPI 的 BIOS 制造商很可能永远不会修正他们的 ASL。我们希望不断地找出并用文档说明 Microsoft 的解释器到底允许那些不标准的行为, 并在 FreeBSD 进行对应的修改使它能够正常工作而不需要用户修正 ASL。
##############################################
我想 USB 也同样如此,现在回到正题,在很多朋友使用U盘过程中,会出现类似以下的情况(根据不同环境会有所不同,但不影响全局)
引用:
接上时...
[code:1:4f5b304787]da0 at umass-sim0 bus 0 tgrget 0 lun 0
da0:
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 [/code:1:4f5b304787]
然后死机或出现系统不稳定的情况
引用:
拨出时...
[code:1:4f5b304787]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[/code:1:4f5b304787]
自动重启
先说说标准情况下,U盘的配置,在kernel中配置
引用:
[code:1:4f5b304787]# 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[/code:1:4f5b304787]
注意:虽然在核心中 umass 依赖于 scbus 和 da,但是如果你没有 pass 则一样无法使用U盘
使用U盘的方式
例:
如果你的U盘映射设备是da0,且只有一个FAT分区
装载
[code:1:4f5b304787]# mount -t msdos /dev/da0s1 /mnt[/code:1:4f5b304787]
移除(确定你不在 /mnt 或你自定的U盘目录下,且也没有打开相关的文件)
[code:1:4f5b304787]# umount /mnt[/code:1:4f5b304787]
然后直接拨出来就可以了
如果你按照以上配置并重编译核心后就可以正常使用U盘的话,那么恭喜你,下面的部分,你可以忽略过去
回到主题,似乎看这帖的各位就是冲下面这部分来的 XD,谁叫咱用方块字的人制作标准乱用呢,
电脑资料
《关于非标准U盘在BSD下的使用(转)Unix系统》(https://www.unjs.com)。。解决本帖主题出现的问题(我是 FB5.3R,其它版本系统依情况不同,自行修改,如果有问题请跟帖),step by step
[color=red:4f5b304787]注意:初学者请慎重考虑,以下部分涉及核心代码修改,如果在你不明白或不理解的情况下修改后造成的后果,偶不负任何责任[/color:4f5b304787]
引用:
1.先想法使你的U盘可以接上(就是能不死机就行)
[code:1:4f5b304787]# usbdevs -v[/code:1:4f5b304787]
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, [color=red:4f5b304787]USB Mass Storage(0x8001), YOUR_COMPANY(0x09a6)[/color:4f5b304787], rev 1.00
port 2 powered
port 2 powered
记下红色的部分,特别是 USB Mass Storage 部分、0x8001(代表产品编号) 和 0x09a6(代表制造厂家),如果你真的是衰到家了,一接U盘就死,那么你要想尽办法弄到这两个编号和产品名
2.修改核心[color=green:4f5b304787] /usr/src/sys/dev/usb/usbdevs [/color:4f5b304787](记得备份哈)
在适当的地方加入(其中的 0x09a6 是厂商编号,根据情况自行修改)
[code:1:4f5b304787]vendor USBFLASH 0x09a6 China USB[/code:1:4f5b304787]
在文件尾加入(其中的 0x8001 是产品编号,根据情况自行修改)
[code:1:4f5b304787]/* China USB flash ram */
product USBFLASH USBFLASH 0x8001 China USB flash ram[/code:1:4f5b304787]
3.修改核心[color=green:4f5b304787] /usr/src/sys/dev/usb/umass.c [/color:4f5b304787](记得备份哈)
在大约 464 行的 [color=green:4f5b304787]{ VID_EOT, PID_EOT, RID_EOT, 0, 0 } [/color:4f5b304787]代码[color=red:4f5b304787]前面插入[/color:4f5b304787]
[code:1:4f5b304787]{ USB_VENDOR_USBFLASH, USB_PRODUCT_USBFLASH_USBFLASH, RID_WILDCARD,
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
IGNORE_RESIDUE
},
[/code:1:4f5b304787]
4.修改核心[color=green:4f5b304787] /usr/src/sys/cam/scsi/scsi_da.c [/color:4f5b304787](记得备份哈)
在大约 321 行插入(其中的 USB Mass Storage 修改成你在第一步中所获得的产品名)
[code:1:4f5b304787] {
/*
* China USB Driver
*/
{T_DIRECT, SIP_MEDIA_REMOVABLE, "*", "*USB Mass Storage*", "*"},
/*quirks*/ DA_Q_NO_SYNC_CACHE
},
[/code:1:4f5b304787]
5. 重编译核心
如果你一切都修改正确,操作也没问题的话,那么,一切都平静了,FB又回到了原来的宁静与稳定——祝大家平安夜顺心圣诞快乐
剑心通明 回复于:2005-08-10 16:26:36不错不错,正好可以试试我的老u盘
congli 回复于:2005-08-10 16:54:34收藏,以备不时之需. :-)
gvim 回复于:2005-08-10 17:13:58收藏。。好文。
原文转自:http://www.ltesting.net