Iindlela ezi-5 zokunqamula kwaye uqhagamshele isixhobo se-USB ngaphandle kokuthatha izandla zakho kwikhibhodi

Ngamaxesha amaninzi, xa sisebenzisa ikhompyuter yethu siqhawula isixhobo se-USB (ngokukhuselekileyo, njengoko kufanelekile) kwaye, kwangoko emva koko, siyaqonda ukuba silibale ukukopa ifayile okanye kwafuneka siqinisekise ukuba idatha ikwindawo yethu. iyunithi. Kwezi meko kudla ngokuba luncedo kakhulu ukukhupha iidiski ze-USB xa sisebenza ukude.

Emva kokusikhupha isixhobo, asisaboni kuluhlu lwethu lwezixhobo, kodwa i-hard drive okanye i-pendrive isaqhagamshelwe kwizibuko le-USB, kwaye kwiindawo ezininzi zokusasazwa namhlanje, siyikhuphile ngokukhuselekileyo iyunithi, nathi asisiboni isixhobo kwaye Asinakuyenza Ukunyuka ukusuka kwi-terminal yethu. Isisombululo esona sikhawulezayo kukuqhawula intambo kwaye uyixhume kwakhona, kwezinye iimeko, nokuba kungenxa yobuvila okanye kufuneka uphakame okanye ngenxa yokuba sifikelela kwizixhobo ezingekho phambi kwethu kwaye akukho mntu usondeleyo, asinakuyenza.

Ulwazi malunga nezixhobo ze-USB

Ngaphambi kokuba siqale, makhe sibone indlela yokufumana ulwazi malunga nezixhobo ze-USB eziqhagamshelwe kwinkqubo. Kule nto, sinokusebenzisa lsusb, eya kudwelisa izixhobo eziqhagamshelwe ngoku. Ndinika imizekelo yento endiyifumanayo kwikhompyuter yam ngoku, kodwa inokwahluka kakhulu kwinto oyifumanayo:

$ lsusb Bus 002 Isixhobo 001: ID 1d6b:0003 Linux Foundation 3.0 ingcambu hub Bus 001 Isixhobo 006: ID 8087:0a2a Intel Corp. Ibhasi 001 Isixhobo 007: ID 046d:c52b Logitech001 005 I-ID ye-Bus 1 I-ID ye-Bus 40 I-ID ye-Bus 0101 I-ID ye-Bus 001 i-Un. : 010 Terminus Technology Inc. Hub Bus 125 Isixhobo 93: ID 4f:c001a A-DATA Technology Co., Ltd. 003GB Pen Drive Bus 04 Isixhobo 2: ID 424f001:b001 Chicony Electronics Co., Ltd Ibhasi 1b Isixhobo se-ID6 :0002 Linux Foundation 2.0 hub ingcambu

Ukuba sifuna ulwazi oluthe kratya, sinokusebenzisa i -t switch eya kusibonisa imveliso efana nomthi ngolwazi malunga neemodyuli:

$ lsusb -t /: Ibhasi 02.Izibuko 1: Dev 1, Iklasi=root_hub, Driver=xhci_hcd/8p, 5000M /: Ibhasi 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p___480M Port 4: Dev 3, Ukuba 0, Class=Video, Driver=uvcvideo, 480M |__ Port 4: Dev 3, Ukuba 1, Class=Video, Driver=uvcvideo, 480M |__ Port 5: Dev 10, Ukuba 0, Udidi =Ugcino lweSininzi, Umqhubi=usb-ukugcinwa, 480M |__ Izibuko 6: Dev 5, Ukuba 0, Udidi=Hub, Umqhubi=hub/4p, 12M |__ Port 4: Dev 7, Ukuba 0, Udidi=IsiXhobo soMsebenzi woMntu, Umqhubi=usbhid, 12M |__ Izibuko 4: I-Dev 7, Ukuba 1, Udidi=Isixhobo soNxibelelwano loMntu, Driver=usbhid, 12M |__ Port 4: Dev 7, Ukuba 2, Udidi=Isixhobo soNxibelelwano loMntu, uMqhubi=usbhid, 12M | __ Port 9: Dev 6, Ukuba 0, Udidi=Okungenangcingo, Umqhubi=btusb, 12M |__ Port 9: Dev 6, Ukuba 1, Class=Wireless, Driver=btusb, 12M

Ukuba sifuna ulwazi oluninzi, sinokulusebenzisa lsusb -v (imveliso inkulu kakhulu), singakwazi kwakhona, umzekelo, ukwazi amandla aphezulu anikezelwe kwisixhobo, ngale ndlela ilandelayo:

$ lsusb -v 2>/dev/null |egrep "^Bus|MaxPower" Ibhasi 002 Isixhobo 001: ID 1d6b:0003 Linux Isiseko 3.0 ingcambu hub MaxPower 0mA Bus 001 Isixhobo 006: ID 8087:0a2a100 Intel001m Intel007m046Power Isixhobo 52: ID 98d:c001b Logitech, Inc. Umamkeli oManyeneyo MaxPower 005mA Bus 1 Isixhobo 40: ID 0101a100:001 Terminus Technology Inc. Hub MaxPower 010mA Bus 125 Isixhobo 93: IDc 4GB Af. I-Pen Drive MaxPower 480mA Bus 001 Device 003: ID 04f2:b424 Chicony Electronics Co., Ltd MaxPower 500mA Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub MaxPower 0mA

Eminye imiyalelo eluncedo kakhulu usb-izixhobo, lwazi, okanye, umzekelo, ukuba sinomendo wesixhobo (ngaphakathi / dev/), sinokubuza inkqubo kulo lonke ulwazi olunokwenzeka malunga nayo kunye neendlela ezisezantsi ekufuneka idlule kuzo. Ngokomzekelo, ukuba sidibanisa i-USB hard drive, ukuze sikwazi ukusebenzisa isixhobo, sifuna umqhubi we-SCSI (kuba / dev / sdX), sifuna umqhubi wokugcina we-USB, osebenza ngokusebenzisa I-USB port, eye hub, efakwe kwi-PCI port, phakathi kwezinye iinkqubo eziphakathi. Sasiyibona yonke le nto

$ udevadm ulwazi --query=indlela --igama=/dev/sdX --attribute-walk

o

$ udevadm ulwazi -a -n /dev/sdX

Ukuba sifuna ukuphuma, sinokungena /sys/ibhasi/usb kwaye ujonge kuyo yonke into apho, siya kubona ulwazi oluninzi, kodwa ngethamsanqa imiyalelo yangaphambili ihlela zonke ezi nkcukacha.

Amalungelo kunye nezixhobo

Ukwenza lo msebenzi kuya kufuneka sazi ukuba sesiphi isixhobo esiya kuso qhagamshela kwakhona. Ukwenza oku, sinokwenza:

$dmesg | umsila [Thu Nov 24 19:50:04 2016] sd 7:0:0:0: Iqhotyoshelweyo scsi generic sg3 uhlobo 0 [798339.431677] sd 7:0:0:0: [sdc] 15806464 by 512 blocks 8.09 GB/7.54 GiB) [798339.431840] sd 7:0:0:0: [sdc] Bhala iProtect icinyiwe [798339.431848] sd 7:0:0:0: [sdc] IMode Sense: 00 00. sd 00:00:798339.431988:7: [sdc] Ukucela idatha ye-cache ayiphumelelanga [0] sd 0: 0: 798339.431996: 7: [sdc] Ukucinga i-cache ye-drive: bhala nge- [0] sdc: sdc0 sdc0. :798339.434157:1:2: [sdc] Iqhotyoshelwe kwidiski esusekayo ye-SCSI [798339.446812] ISO 7 Izandiso: iMicrosoft Joliet iNqanaba 0 [0] ISO 0 Izandiso: RRIP_798360.808588A

Kule mveliso, siya kubona ukuba isixhobo esisebenza naso si sdc (i-sdc1 kunye ne-sdc2 iya kuba yizahlulo ngaphakathi kwediski). Kwimizekelo endiya kusebenzisa esi sixhobo, kwimeko yakho kuya kufuneka ubone ukuba yeyiphi onayo.

Kule mizekelo ingezantsi ndiya kusebenzisa sudo ukuqhuba imiyalelo ngamalungelo Ingcambu. Nangona kuya kwanela ukuba nomsebenzisi onemvume eyaneleyo. Ukuba sifuna ukubona amalungelo ayimfuneko, yenza nje ls kwisixhobo:

$ ls -latr /dev/sdc brw-rw---- 1 ingcambu disk 8, 32 Nov 24 19:50 /dev/sdc

Apho sibona ukuba umnini yingcambu kunye neqela disk. Kuya kwanela ukuba nomsebenzisi okwiqela lediski.

Indlela yoku-1. Yiphathe ngokungathi yiCD/DVD

Yeyona ilula kuzo zonke. Ngokuqinisekileyo ukuba ubusebenzisa i-GNU/Linux iminyaka, xa ubusebenza nge-CD-ROM okanye iDVD usebenzise umyalelo wokukhupha. Kulungile, i-eject isetyenziselwe ukuvula iCDROM kwaye ikhuphe -t yasetyenziswa ukuvala itreyi. Ewe, ukuba senza oku phambi kwesixhobo se-USB:

$ sudo eject -t /dev/sdc

Isixhobo kufuneka sibonakale ngathi siqhagamshele kwakhona.

Indlela yesi-2. Ukukhutshwa kwe-Virtual kunye nokuplaga

Kwezinye iinkqubo (ixesha elide i-hardware iyayixhasa), xa ususa ngokukhuselekileyo isixhobo se-USB, amandla kwisixhobo amisiwe kwaye isixhobo asisabonakali. Kuyafana naxa usenza:

udisksctl ukucima amandla -b /dev/sdc

Kule meko, / dev / sdc Sisixhobo sam, kwaye ngalo myalelo yalinganisa uqhawulo lombane lwenyani.

Ingxaki kukuba ngoku / dev/sdc ayikho, enyanisweni, ukuba sijonga i-dmesg, siya kufumana into enje:

$dmesg | umsila [281954.693298] usb 1-5: Ukuqhawula i-USB, inombolo yesixhobo 3

Ngoko ukuba sizama indlela ye khupha ayiyi kusebenza. Qaphela: Ndibalule usb 1-5 kwaye kungekudala siza kubona ukuba kutheni.

Ukuba usebenza ukude, oku kunokuba ngumbono olungileyo. Khawufane ucinge ukuba une-USB eqhagamshelwe ukwenza iikopi zokugcina. Xa usenza iikopi, kuhle ukuba inkqubo yazi ukuba kukho iidiski ezidityanisiweyo, kodwa xa singazisebenzisi, kwelinye icala, kufuneka. yonga amandla kwaye ugweme ukunxitywa kweediski, ngoko kungcono ukunqumla amandla, kwelinye icala, asifuni izicelo ezinobungozi zibone ukuba zikhona ezi disks ukuze bangosulelwa. (Ewe, kukho iintsholongwane kwi-GNU/Linux).

Sidibanisa njani amandla ngoku?

Kufuneka senze umnxeba kwizibuko le-USB, kuba le kukho iprojekthi ebizwa hubpower (Ndidibanisa nefolokhwe yeprojekthi yokuqala kuba i-bug ilungisiwe apha enokuthi ithathe amandla ngaphandle kwezixhobo ezininzi kwaye hayi le esiyifunayo kuphela). Kukho iiprojekthi ezininzi (ezifana ne uhubctl), kodwa oku akunakuxhomekeka xa sisiya kuqulunqa, kwaye yifayile ye hubpower.c.
Okokuqala, siyayiqulunqa,

$ gcc -o hubpower hubpower.c

Ngoku, uyawakhumbula amanani abhalwe ngqindilili kwi dmesg?, kulungile siza kuzisebenzisa, kuya kufuneka sikhuphe isixhobo kwaye siqhagamshele kwakhona, ngolu hlobo:

$ sudo ./hubpower 1:1 amandla 5 off Izibuko 5 ubume: 0000 Power-Off $ sudo ./hubpower 1:1 amandla 5 kwisiZibuko 5 ubume: 0100 Power-On

Ukuba isixhobo asisiboni, sinokuzama ukwenza:

$ sudo ./hubpower 1:1 bopha Faka isicelo somqhubi esithunyelwe kwikernel

Ngale ndlela, siya kubona isixhobo sethu se-USB esiqhagamshelweyo kwakhona.

Ukuba asifuni inkqubo kwi-C ... ndinayo kwi-perl

Inkqubo ye-C kunzima ukuyiqokelela kunye nokuvavanya ukuba into esiza kuyenza ilula kakhulu, ngoko sinokuzama eli zibuko lincinci kwimigca eli-10 eyenziwe ePerl:

#!/bin/perl ifuna "sys/ioctl.ph"; $isixhobo="05"; vula(yam i$usbdev, ">", "/dev/bus/usb/001/001"); $ data = ipakethe ("H *", "23010800".$device."000000FFFF8813"); ioctl($usbdev, 0xC0185500, data $); $ data = ipakethe ("H *", "23030800".$device."000000FFFF8813"); ioctl($usbdev, 0xC0185500, data $); vala ($ usbdev);

Kufuneka sihloniphe $isixhobo, inombolo yezibuko (kwimeko yam yayiyi-5), lixabiso le-hexadecimal, ngoko ke i-10 iya kuba ngu-A, i-11 iya kuba ngu-B, i-15 iya kuba ngu-F, i-16 iya kuba yi-10... Kwakhona kufuneka sibeke iliso kwisixhobo kunye nesixhobo. ibhasi, esifikelela kuyo ukusuka /dev/bus/usb/001/001, amanani kufuneka abe noziro abakhokelayo kuba sibiza loo fayile.

Njengoko sibona, isitshixo sikwi ioctl (), ngumsebenzi olawula iiparamitha zesixhobo kwifayile ekhethekileyo kwindlela yefayile. Phakathi kwexabiso le-hexadecimal elisetyenzisiweyo, sifumana 0xC0185500, into eqhubekayo ebizwa USBDEVFS_CONTROL esiya kuthi ngayo sithumele umyalelo wolawulo kwisixhobo se-USB.Ezinye iikhowudi zezoqhawulo kunye nesicelo soqhagamshelo (ungafumana ulwazi oluthe kratya kwinkqubo eyenziwe ku-C).

Indlela yesi-3. Ukufihla kunye nokubonisa isixhobo

Enye indlela yokuqhawula ifowuni inokuba:

echo '1-5' | sudo tee /sys/bus/usb/drivers/usb/unbind

Kwaye sinokuyibuyisela ngokwenza:

i-echo '1-5' | sudo tee /sys/ibhasi/usb/abaqhubi/usb/bophelela

Le ndlela ayibangeli ukuqhawulwa ngokupheleleyo kwesixhobo. Ikhusela kuphela inkqubo yokusebenza ekuthetheni nayo kunye nezixhobo ezininzi, xa ikhomputha ingafuni ukwazi nantoni na ngabo, yiya kwimodi yamandla aphantsi, kuba asiyi kubabuza nantoni na.

Indlela 4. Ugunyaziso lweSixhobo

Into embi ngale ndlela kukuba kwiinkqubo ezininzi izixhobo ezininzi zinokukhutshazwa okwethutyana, ezingeyiyo kuphela esiyifunayo, kodwa sihlasela ihabhu yonke ye-USB. Umzekelo:

$ echo 0 | sudo tee /sys/bus/usb/devices/usb1/egunyazisiweyo $ echo 1 | sudo tee /sys/bus/usb/devices/usb1/authorized

Oko, ewe, sinokwenza yonke into ngokulandelelana:

$ echo 0 | sudo tee /sys/bus/usb/devices/usb1/egunyazisiweyo; echo 1 | sudo tee /sys/bus/usb/devices/usb1/authorized

Kufuneka silumke, ukuba kukho iidrive ezininzi eziqhagamshelwe kwizibuko le-USB elifanayo (kwaye phantse rhoqo kwiikhompyuter zethu amazibuko e-USB amaninzi kunokuba sibona adityaniswe ngaphakathi kwi-hub, ngoko ke kukho amaqela amazibuko ane-USB efanayo. ubawo, uyibeke ngandlela thile.

Indlela yesi-5. Qalisa kwakhona i-subsystem ye-USB

Ukuba sifuna ukuqalisa kwakhona isistim esezantsi ye-USB. Oko kukuthi, hlaziya zonke izixhobo ze-USB, ezifana nokukhupha kunye nokuzifaka kuzo zonke, kwelinye icala sinokukhuphela kwaye silayishe kwakhona imodyuli ye-kernel ye-USB:

$ sudo modprobe -r ehci_hcd ; sudo modprobe ehci_hcd #Ye-USB2 $ sudo modprobe -r xhci_hcd; sudo modprobe xhci_hcd #Ye-USB3

Nangona ezinye izinikezelo, iinguqulelo zamva nje ze-Ubuntu kunye nezinto eziphuma kuzo zibandakanyiwe, zine iimodyuli ezidityanisiweyo ze-USB kwaye ayinakukhutshelwa. Kwelinye icala, inkqubo inokungasivumeli ukuba sizikhuphele ngenxa yokuba zisetyenziswa ngenxa yezinye iimodyuli (abashicileli, ukugcinwa, izixhobo zokujongana, njl.njl.), kwaye ukuba siqala ukukhuphela iimodyuli kunye nokwaphula izinto sinokuphinda siqalise ikhompyuter. ekugqibeleni. Ke, enye indlela esinokuyenza ngayo:

$echo '0000:00:14.5' | sudo tee /sys/bus/pci/drivers/xhci_hcd/unbind $ echo '0000:00:14.5' | sudo tee /sys/bus/pci/drivers/xhci_hcd/bind

Ukufumana isixhobo sethu, sinokwenza ls ngaphakathi /sys/bus/pci/drivers/xhci_hcd, izinto ezininzi ziya kuvela, kufuneka sijonge enye ejongeka ngolu hlobo. yyyy:bb:cc:dd.e. Izibuko lakho le-USB alinakuza njenge xhci_hcd (USB3), kodwa endaweni yoko lize njenge ehci_hcd (USB2)