Académique Documents
Professionnel Documents
Culture Documents
Introduo
Udev(Userspacedevfs)umsistemadearquivospresentedesdeokernel2.6esubstitui odevfscompletamente. responsvelporgerenciarosarquivosdedispositivosdodiretrio/dev,criandoeremovendoosmesmos dinamicamente.Oudevtambmtemfunodohotplug,trabalhandoemconjuntocomoHAL(Hardware AbstractionLayer),adicionandoosdispositivosconformesoinstaladosnamquina.Semele,seriaimpossvel acessarseupendrive,webcameimpressora,porexemplo,quandoconectados.
Funcionamento
EntendendocomoosdispositivossodetectadoseadicionadosnosistemaGNU/Linux. OsistemaGNU/Linuxfazusodokerneledeserviosparadetectareadicionardispositivosaosistema,para queosmesmosfiquemdisponveisparausodousurioedoprpriosistema. Abaixo,mostradaahierarquianoprocessodedetecoeadiodedispositivos:
Comovistonafiguraacima,existetodoumprocessoatosdispositivosestaremdisponveisparausodosistema e/ouusurios,quevaidesdeadetecododevicepelokernelatacriaodeumarquivodedispositivono diretrio/devpeloudev. Todoprocessocomeacomokerneldetectandoosdispositivoseexportandoinformaessobreosmesmos paraosistemadearquivosvirtualSysfs(queestmontadonodiretrio/sys)eaomesmotempo,enviandoum eventoparaodaemondoservioudev. Oeventoinformaaoudevumaaonodispositivo,estaaopodeserumadio,remoooualteraodeum dispositivoconectadomquina. Quandooudevinformadopelokernelsobreoevento,tratadeusarasinformaesdodiretrio/syspara identificarodeviceconectado,carregaromdulocorretoecriarumarquivoespecialnodiretrio/devcom exceodaplacaderedequetratadanokernel. Avocpergunta:EoHAL? Simples,oHALumservioqueinformaaosprogramasdosistemaseumdispositivoestdisponvel,foi alteradoouremovidoatodotempo.
Naverdade,oHALjnoessencialparaestetrabalho,poisalgumasdistribuiesatualmente,conseguem fazertodoestetrabalhosomentepeloudev,ouemconjuntocomoservioDBus.Noentanto,paraoutras distribuies,issotornaseessencial. importantedestacarquetodoesteprocessodedetectareativarosdevicesexplicadoanteriormente,nos aconteceemHotplug,ouseja,osdispositivossoinstaladoscomosistemaemuso,mastambmemColdplug, osdispositivossoconectados(instalados)comamquinadesligadaeosistema,quandoemuso,detectaos. Observequequemrealmentefazotrabalhodehotplug,oudev. Osarquivosdedispositivoscriadosnodiretrio/devnadamaissoquearquivosespeciais,obtidospela combinaodedoisendereosdokernel,umchamadodemajornumbereoutrodeminornumber. Sendoque: majornumberusadoparaidentificarumacategoriadedispositivos. minornumberIdentificaodispositivo. Vejanafiguraabaixo,umexemplodestesnmeros:
Hierarquiadosdispositivosechavesdoudev
Hierarquiadosdispositivos
Antesdecomearatrabalharcomregrasnoudev,necessriosabercomookernelrepresentaosdispositivos emsuaestrutura.OkerneldoLinuxorganizaerepresentaosdispositivosconectadosmquinaemuma
Aschavesdoudev
Chavesnoudevsoinformaesdedispositivosepodemserclassificadasemdoistipos,existindoaschavesde combinaoedeatributos.Ambasseroabordadasaseguir,eoseuusotornasenecessrioparaaplicaras regrasdoudev. Aschavesdecombinaomaisusadas,soaslistadasabaixo: KERNELEstachaveinformaonomeatribudopelokernelaodispositivoemquesto SUBSYSTEMChavequeinformaotipodedispositivo,sejaodispositivopaioufilho DRIVERChavequeinformaodriverparaodispositivo ATTREstachaveteminformaesadicionaissobreodispositivo OWNERUsurioqueseroproprietriododispositivocriadono/dev GROUPGrupododispositivocriadono/dev MODEAtribuiaumaskpadroparaodispositivocriadoem/dev. Almdaschavesdecombinaojvistas,possvelusaroutrasdescritasabaixo:
NAMEEstachavecontmonomequeserusadoparaodispositivo SYMLINKNestachave,configuraseumlinksimblico RUNAdicionaumprogramaqueserexecutado ACTIONAodoeventododispositivo,seodispositivoestsendoconectado,removidoou alterado. ChavesdecombinaoKERNELS,SUBSYSTEMSeDRIVERS,contminformaessimilaresschavesde combinaoapresentadasacima,noentanto,estaschavesdecombinaosousadasemdispositivospais (parentdevices). AschavesdeatributoATTR,contminformaoadicionalaumdispositivoeachavedeatributoATTRS similaraATTR,noentanto,usadaemdevicespais(parentdevices). Aobservaoqueemumaregra,nopodeseratribudomaisdeumachavedeatributoe/oudecombinao dedispositivos"pai"(deviceparent)juntochavedecombinao"filho"enemcombinarchavesdeatributosde diferentesdispositivospaisemumnicodispositivopai.Casoissoacontea,aregranoirfuncionar. Paraaregrafuncionar,podemoscolocarumaoumaischavesdecombinao"filho"seguidadeumachavede atributooudecombinao"pai"namesmaregrae/ou,casoqueiraatribuirmaisdeumachavedeatributo"pai", necessrioinformarodispositivoaqualelapertence,bastausarachavedecombinao"pai"SUBSYSTEMS. Seficouconfuso,naprximapginaireiexemplificarparaterummelhorentendimento. Paraaplicarasregras,almdaschavesjmencionadas,podemosfazerusodestringsenecessriousar operadores.Vejaabaixoasstringseoperadoresquepodemosusar. Stringsquepodemserusadasnasregras: *Correspondeatudonaquelaposio(similaraocoringaasterisco). ?Qualquercaracterenaquelaposio. []Correspondeaqualquercaractereespecificadodentrodoscolchetes. Porexemplo,asequnciadecaracteres'tty[SR]'iriacorrespondertanto'ttyS'quantoa'ttyR'.Vocpode tambmespecificarintervalosusandoafaixaatravsdocaractere''.Seoprimeirocaractereapso'[' um'!',humaexceo. Operadoresmaisusadosnasregras: ==Comparaseigual(atribuiumavalordeigualdade) !=Comparasediferente(atribuiumvalordediferena) =Atribuiumvalorchave(usadoquandosequermudaronomedodevice,porexemplo) +=AdicionaumvalorchaveepodemanterumalistadeentradasPode,porexemplo,usarna chaveRUNeespecificarvrioscomandos.
Depoisdetodaestaexplicao,vamoscomearaaplicarasregrasnaprximapgina.
Regrasdoudev Oudevmuitopoderosoquantoaplicaodasregras,poispermitedesdenomearumdispositivoatexecutar aplicaes,e/ouscriptsquandoconectamosoudesconectamos,ouquandoodispositivoalterado. Paraaplicartaisregras,necessrioterinformaesobtidasatravsdaschavesdecadadevice. Osarquivosquecontmasregrasdoudevestocontidosnodiretrio/etc/udev/rules.dedevemteraextenso ".rules",casoalgumarquivodentrododiretrionouseessaextenso,oseucontedonoserprocessado. Elessolidosemordemnumricoalfabtica,porexemplo:sedentrododiretrio/etc/udev/rules.d,temosos arquivos"025_usbregras.rules"e"035_usbregras.rules",oarquivo"025_usbregras.rules"serlidoantesque o"035_usbregras.rules". Agora,sintaxedasregraseexemplosderegrasquefuncionamenofuncionam. Cadaarquivocomextenso".rules"temregrasqueseguemaseguintesintaxe: <chavedecombinao>,<chavedecombinaoeouchavedeatributo>,<Ao>
loiga prn dvc 'dvcspi000/000:d7ub/okn t aet eie /eie/c00:000:01./s11 81810hs4tre4004000boksc: /-:./ot/agt::/:::/lc/d' KRES=sc ENL="d" SBYTM="lc" USSES=bok DIES=" RVR=" ATSrne="6 TR{ag}=1" ATSetrne="5" TR{x_ag}=26 ATSrmvbe="" TR{eoal}=1 ATSr}=0 TR{o="" ATSsz}=7517 TR{ie="862" ATSainetofe}=0 TR{lgmn_fst="" ATSdsadainet="" TR{icr_lgmn}=0 ATScpblt}=5" TR{aaiiy="1 ATSsa}= TR{tt=" 21 5 19 41 20 02 26 1 5 1 4 8 0 0 26 1 26 1" ATSifih}= TR{nlgt=" 0 0 " ATSeet}=mdacag" TR{vns="ei_hne ATSeet_sn}=" TR{vnsayc=" ATSeet_olmes="1 TR{vnspl_sc}=-"
KRES=4000 ENL=":::" SBYTM="ci USSES=ss" DIES=s" RVR="d ATSdvc_lce}=0 TR{eiebokd="" ATStp}=0 TR{ye="" ATSss_ee}=0 TR{cilvl="" ATSvno}=Snik" TR{edr="aDs ATSmdl="rzrBae TR{oe}=Cue ld" ATSrv=".2 TR{e}=80" ATSsae="unn" TR{tt}=rnig ATStmot="0 TR{ieu}=3" ATSicutris="2 TR{oonebt}=3" ATSirqetct="x73 TR{oeus_n}=026" ATSidn_n}=026" TR{ooect="x73 ATSierct="x9 TR{or_n}=01" ATSmdla}=ss:-x0 TR{oais="cit00" ATSetmdacag}=0 TR{v_ei_hne="" ATSqeedph="" TR{uu_et}=1 ATSqeetp}=nn" TR{uu_ye="oe ATSmxscos="4" TR{a_etr}=20
loiga prn dvc 'dvcspi000/000:d7ub/okn t aet eie /eie/c00:000:01./s11 81810hs4tre400: /-:./ot/agt::' KRES=tre400 ENL="agt::" SBYTM="ci USSES=ss" DIES=" RVR="
loiga prn dvc 'dvcspi000/000:d7ub/okn t aet eie /eie/c00:000:01./s11 81810hs4: /-:./ot' KRES=hs4 ENL="ot" SBYTM="ci USSES=ss" DIES=" RVR="
loiga prn dvc 'dvcspi000/000:d7ub/okn t aet eie /eie/c00:000:01./s11 81810: /-:.' KRES=1810 ENL="-:." SBYTM="s" USSES=ub DIES=ubsoae RVR="s-trg" ATSbnefcNme}=0" TR{Itraeubr="0 ATSblentStig="0 TR{Atraeetn}= " ATSbuEdons="2 TR{Nmnpit}=0" ATSbnefcCas="8 TR{Itraels}=0" ATSbnefcSbls}=0" TR{ItraeuCas="6 ATSbnefcPooo}=5" TR{Itraertcl="0 ATSmdla}=ubv7156d20c0s0d0i0ic6p0 TR{oais="s:08p5700d0dc0p0c8s0i5" ATSspot_uoupn}=1 TR{uprsatssed=""
Ambasasregrastmaaodecriarumlinkparaapartiodopendrive.Noentanto,somenteasegundaregra irfuncionar. Explicaodaprimeiraregra: 1conferidoseodispositivoqueestsendoconectado 2conferidoseodispositivoconectadodotipobloco(armazenamento),ouseja,sefilhodo dispositivodebloco 3conferidoseonomedodispositivoatribudopelokernelnachavedecombinaoKERNEL "filho"igualaoinformadonaregra 4Verificaemumdosatributos"pais"seexisteoatributocomvalorSanDisk,issogarantequearegra sserexecutadaseopendrivefordofabricanteSanDisk 5Verificaseodrivercarregadoemumdosdevicesparentsigualaoespecificado 6Casotudoestejacertonaregra,olinkchamadoPENDRIVEatribudopartiodopendrive. Mesmotodainformaoconferindonaprimeiraregra,nopodefuncionar,poisfoiatribudojuntochavede combinaododispositivofilho(comojfoiinformadonasegundapgina),umachavedeatributo(ATTRS)e outradecombinao(DRIVERS)dedispositivos"pais". Deixomaisumavezclaro,quearegranoirfuncionarcasosejaatribudomaisdeumachavedeatributooude combinaodeumparentdevicejuntoumachavedecombinaodeumdevicefilho. Asegundaregratemquasetodosaschavesdaprimeiraregra,comexceodachavedecombinao DRIVERSdeumdispositivopai.Eestaregrairfuncionarporqueapenasumachave,sejadeatributooude combinao(noexemplo,umafoideatributo)dedispositivopaiestatribudajuntoschavesdecombinao dodispositivofilhoquesoACTION,SUBSYSTEMeKERNEL. Agora,vejaumexemploderegrausadaparaexecutarumscript: ACTION=="add",SUBSYSTEM=="block",KERNEL=="sd??",SUBSYSTEMS=="usb", RUN+="/usr/local/bin/usbmount.sh"
#/i/ah !bnbs u b " d v " ( s- / y / l c / $ l - / y / l c | r p s | a l s=/e/$l 1 ssbok"(s 1 ssbok ge d ti - ) | r ps | a l- ) " 1" ge d ti 1" t p = ( l i - l s " u b | w - " "' p i t $ } | a l- ) io$bkd o it $s" ak F {rn 2' ti 1 l b l $ b k d - l s " u b | w - " "' p i t $ } | a l- ) ae=(li o it $s" ak F {rn 3' ti 1 dr"mda"lbl" i=/ei/$ae" [ - " d r ] & s e p1 | m d r" d r d $i" & le | ki $i" i [ " t p "= " x 3 ] t e f $io et" ;hn m u t- " t p "- r l t m , o x c r , o e , s r " u b " d r on t $io o eaienee,wndvue $s" $i" e i [ " t p "= " x 4 ] t e lf $io et" ;hn m u t- " t p "- r l t m , o x c r , o e , s r " u b " d r on t $io o eaienee,wndvue $s" $i" e i [ " t p "= " f t ] t e lf $io va" ;hn m u t- " t p "on t $io o r l t m , o x c r , s r u a k 0 2 , i = 0 0 g d 1 0 " u b " d r eaienee,wue,ms=02ud10,i=00 $s" $i" e i [ " t p "= " t s ] t e lf $io nf" ;hn m u t- n f - g on t ts3 o r l t m , o x c r , s r u a k 0 2 , i = 0 0 g d 1 0 " u b " d r eaienee,wue,ms=02ud10,i=00 $s" $i" e i [ " t p "= " f "] t e lf $io xs ;hn m u t- " t p "- r l t m , o x c r , o e , s r " u b " d r on t $io o eaienee,wndvue $s" $i" e i [ " t p "= " f "] t e lf $io js ;hn m u t- " t p "- r l t m , o x c r , o e , s r " u b " d r on t $io o eaienee,wndvue $s" $i" e i [ " t p "= " t f "] t e lf $io brs ;hn m u t- " t p "- r l t m , o x c r , o e , s r " u b " d r on t $io o eaienee,wndvue $s" $i" f i
AT{ikmd}=1 TRln_oe="" AT{drs}=0:a3:c2:4 TRades="01:f7:ef" AT{racs}=f:ff:ff:f TRbodat="ff:ff:ff" AT{are}=0 TRcrir="" AT{omn}=0 TRdrat="" AT{prtt}=dw" TRoesae="on AT{t}=10" TRmu="50 AT{lg}=010" TRfas="x03 AT{xqeeln="00 TRt_uu_e}=10" AT{edvgop="" TRnte_ru}=0
loiga prn dvc 'dvcspi000/000:d7ub/okn t aet eie /eie/c00:000:01./s11 81810: /-:.' KRES=1810 ENL="-:." SBYTM="s" USSES=ub DIES=ahkhc RVR="t9_t" ATSbnefcNme}=0" TR{Itraeubr="0 ATSblentStig="0 TR{Atraeetn}= " ATSbuEdons="6 TR{Nmnpit}=0" ATSbnefcCas="f TR{Itraels}=f" ATSbnefcSbls}=0" TR{ItraeuCas="0 ATSbnefcPooo}=0" TR{Itraertcl="0 ATSmdla}=ubvC371d22cFsFdFiFic0p0 TR{oais="s:0Fp0500dFdcFpFcFs0i0" ATSspot_uoupn}=0 TR{uprsatssed=""
Referncias
Builtinpersistentnamingschemeswww.reactivated.net udev(7)Linuxmanpagelinux.die.net Dispositivosesistemasdearquivoswww.linuxnewmedia.com.br