Udev'i kullanmanın alternatifleri var mı?


16

Udev'in büyüklüğünü anlıyorum ve geliştiricilerin çabalarını takdir etsem de, bunun için bir alternatif olup olmadığını merak ediyordum.

Örneğin, sistemimde (değişen donanım yok) zaten aynı olan cihaz düğümlerinin çoğunu oluşturan başlangıç ​​komut dosyası yapmanın bir yolu olduğunu hayal edebilirim.

Atlamak udevistediğim fayda ya da neden , atlamakla aynı olacak dbus, yani karmaşıklığı azaltacak ve böylece sistemi daha güvenli bir şekilde kurmak için yaptığım değişiklikleri artıracak.

Yanıtlar:


23

Orada çeşitli alternatifler udevvar. Görünüşe göre Gentoo adlı bir şey kullanabilir mdev. Başka bir seçenek udevselefi kullanmaya çalışmak olacaktır devfsd. Son olarak, ihtiyacınız olan tüm cihaz dosyalarını her zaman oluşturabilirsiniz mknod.

İkincisi ile, düğümlerin diğer seçeneklerde olduğu gibi geçici bir dosya sisteminde oluşturulamadığı için önyükleme sırasında her şeyi oluşturmaya gerek olmadığını unutmayın. Tabii ki, yeni donanım takıldığında (örn. Bir USB çubuğu) dinamik olarak oluşturulmuş cihaz dosyalarına sahip olma esnekliğini kaybedersiniz. Bu dönemdeki standart yaklaşımın, makul bir şekilde ihtiyaç duyabileceğiniz her cihaz dosyasına /dev(yani birçok cihaz dosyası) sahip olduğuna inanıyorum .

Elbette bu yaklaşımlardan herhangi birinin modern bir dağıtımda çalışmasının zor olması muhtemelen oldukça yüksektir. Gentoo wiki'si, mdevmasaüstü ortamıyla (Gentoo dışında bırakılmaksızın) çalışmaktan güçlük çekiyor . Son devfsdsürüm 2002'ydi, modern çekirdeklerle bile çalışıp çalışmayacağını bilmiyorum. Düğümleri manuel olarak oluşturmak muhtemelen en uygun yaklaşımdır, ancak devre dışı bırakmaudev , özellikle distos kullanımında bir zorluk olabilir systemd( udevşimdi bir parçasıdır systemd, bu da güçlü bir bağımlılık göstermektedir).

Benim tavsiyem ile sopa udev;)


1
Teşekkürler! Sorunun tüm yönleri olmasa da en çok hitap eden ve bilgi dolu büyük cevap! Şimdi systemd problemini nasıl çözeceğimizi merak ediyorum ... Bunu nasıl çözeceğimizi göreceğim :)
humanityANDpeace

udevolmadan gayet iyi çalışmalıdır systemd- her ikisi de sadece aynı kod tabanı içinde geliştirilir, ancak udevondan bağımsız olarak inşa edilebilir + çalıştırılabilir.
Elias Probst

@Elias, elbette, zaten udevolduğundan çok daha uzun süredir var systemd. Soru şu ki, systemdolmadan çalışabilir udevmi? Benim tahminim en azından bir çeşit --without-udevseçenekle yeniden derlemek zorunda kalacağınızdır .
Graeme

2
@Graeme: Hayır, olamaz. Bu, tekerlekleri çıkararak bir arabanın karmaşıklığını azaltmaya çalışmak gibidir. Systemd ile (bu çok şey yapar ) önyükleme konusunda sorun yaşıyorsanız , ancak udev'in karmaşıklığı konusunda endişe duyuyorsanız (ki daha az ve daha az şey yapar), o zaman gerçekten karışık şeyler var.
user1686

@grawity Adil nokta, ama belki o zaman init için systemd ile önyükleme ile bile iyi değilim! Bir göz
humanityANDpeace

22

Modern Linux çekirdekleri , çekirdek keşfettikten sonra tüm aygıt düğümlerini dinamik olarak oluşturan devtmpfsdosya sistemini (antik ile karıştırmayın devfs) destekler . (Aslında, en son udevsürümler bunu gerektirir ; udev'in artık herhangi bir cihaz düğümü oluşturmadığını, yalnızca sembolik bağlantıları olduğunu göreceksiniz.)

Benzer şekilde, bellenim yüklemesi de çekirdeğe taşınmıştır, bu nedenle kalan tek görevler udevmodül yüklemesi (modaliases'e göre) ve cihaz izinlerinin ve diğer udev kurallarının uygulanmasıdır.

Yani teoride tam monolitik çekirdek gerektiğini önyükleme udev olmadan da gayet iyi.

Ancak, buradaki asıl sorun daha sonra ne olacağıdır.

  1. Oldukça az sayıda kullanıcı programı, cihaz veritabanına erişerek udev'e güveniyor libudev. Aygıtların numaralandırılması ve eklenen / kaldırılan olayların dinlenmesi doğrudan çekirdek arabirimleri (sysfs ve netlink) kullanılarak yapılabilirken, çeşitli udev kurallarının eklediği tüm meta veriler olmadan kalmaya devam edersiniz.

  2. Udev kuralları da çeşitli "kalıcı" sembolik korumak /dev/disk/by-*, /dev/mapper, /dev/input/by-path, /dev/snd/by-path, vb. İki disk bağlandığında varsa Örneğin, ilk kez her zaman olacağını garantisi yok sdaya sdb, ama Udev olmasını sağlar içinde sembolik bağ olduğunu /dev/disk/by-uuiddoğru birine noktaya devam edecektir.

  3. Aygıt düğümleri artık çekirdek tarafından oluşturulmuş ve bu nedenle artık endişeniz olmasa da, bazı aygıt türlerinin dinamik olarak atanan büyük / küçük sayılar kullanmaya başladığını, ancak bugün /dev/fuse10,228 ve /dev/hpet10,229 olarak sahip olsanız bile , her önyüklemeden sonra farklı numaralara sahiptir, bu nedenle devtmpfsveya (eski sistemlerde) etkinlikleri dinleyen bir program gereklidir .

Bunların çoğu mdevelbette gibi diğer programlar tarafından kolayca yapılabilir . Demek istediğim, statik bir /etc/MAKEDEVbetiğin artık işe yaramayacağı ...


Yani, temel olarak, önyükleme karmaşıklığı söz konusu olduğunda, udev büyük olasılıkla endişelerinizin en azıdır .


İlginç olan, hangi çekirdek sürümünün dinamik düğüm oluşturmayı getirdiğini biliyor musunuz?
Graeme


12

Birkaç alternatif var:

  • Basitçe uygun bir dizi var chmod, chown, lnbootstrap parçası olarak çalıştırılan bir komut ve benzeri komutları.
  • systemd-udevSystemd projesinin bir parçası olan tak ve çalıştır yöneticisi kullanın .
  • kullanım eudevsystemd-udevSystemd'un şimdi önemli ölçüde ayrıştığı bir çatal olan Gentoo'nun .
  • kullanım Devuan envdev Devuan parçası olan Jude Nelson tarafından geliştirilen bir eklenti-çalıştır yöneticisi,.
  • kullanım mdev Gentoo şey olmayan başka bir cevap aykırı. BusyBox'ta yerleşik olan tak ve çalıştır yöneticisidir .
  • kullanım Sucklessmdev Dimitris Papastamos tarafından geliştirilen bir eklenti-çalıştır yöneticisidir.
  • Laurent Bercot's kullanınmdevd uyumlu yapılandırma olan, mdevancak kendi soket işlemesini yapan ve LISTEN protokolünü anlamayan .

Bunların tümü, birincisi dışında, aygıtlarla ilgili çekirdek bildirim olaylarına nasıl tepki verileceğini açıklayan bir dizi kural gerektirir. Açıkçası.

İçin tasarlanmış programlar alacak araçlar da vardır /proc/sys/kernel/hotplug, örneğin iki gibimdev s ve bu uyum ve bu programları bir netlink sokete dinleme ve ardından yumurtlama bunları serialize:


6

Udev? En iyi alternatif onu kullanmamaktır. Ve nasıl kullanılamayacağını öğrenerek Linux ve * NIX dünyası daha mantıklı bir anlam kazanmaya başlayacak.

En iyi uzun vadeli alternatif statik cihazları kullanmaktır (nota bakın). Sürücünüz varsa, Linux çekirdeği çalışırken takmayı yönetir. Hiç udevd'in çalışmamasını tercih ederim.

dbus başka bir konudur. Sisteminizi yavaşlatır, ancak senaryo milletlerinin sürekli değişen dünyası onu sever. Yani, web tarayıcıları veya komut dosyası arka uçlu uygulamalar gibi alıştığınız pek çok şey düzeltilmelidir (bu şeyler olmadan başlatılır veya yeniden oluşturulur veya başka bir uygulama için dökülür).

Not: Sadece bir flash sürücü veya dvd aygıtı takıyorsanız, takılacak aygıtın dmesg|tailadını görmek için düğmelerini kullanın . Bir aygıtın bir karakter veya blok aygıt olduğunu öğrenmek, bilgisayar donanımı dünyasında temel sistem bilgisidir. Linux'ta açık kaynak kodlu, sadece gömülü değil, Linux hakkında da çok şey kontrol edin . Linux (Solaris, HPUX, AIX, vb.) Gibi tüm * NIX'lerin doğrudan mantığını (felsefe değil) daha geniş bir anlayış için en iyisidir.

Udev, dbus, gconf / dconf, systemd, gnome-shell, Gnome, Glib, mono ve Fedora ellerinde RTFM yapamayan veya otomatik olarak güncellenen gerçekten kaygan (görünümlü) ama daha yavaş isteyen insanlar içindir pekmez, buggy, yarı yol Linux. (Gerçekten korkunç bir yer, benzer deneyimler ton web için bakın).

Sistem önyükleme yapar sonra udevd çalıştırır. Ancak, udev'in gerekli olduğu iddia edildi, çünkü will changeyeniden başlatma sırasında cihazdaki küçük sayılar . Udev'in varoluş nedeni her fırsatta kendisiyle çelişiyor gibi görünüyor. Ve dosyalarının nerede olduğu, kime danıştığınız önemli değil. Güvenmeyin veya freedesktop.org.

Udev sistemd olarak bilinen bu dehşete kapılıyor olmasının yanında, o zamanlar / etc / udev ıvır zıvırlarıyla ne yaptığını bilmiyorum. Ve, udev kurallarını yazmanın bir şekilde her şeyden daha iyi olduğunu söylemek yorucudur. Gentoo halkı ona asılmak istiyor ve systemd'e sahip olmak zorunda değiller, bu yüzden eudev'e çatalladılar.

Gülünç derecede hızlı, kötü bir sürpriz sistemi istemiyorsanız, Linux temellerini kullanın.


6
Bu bir cevap daha rant olduğunu ...
jasonwryan

2
@jasonwryan evet, hala normalde udevişlevsellik kapsamında olan bu görevlerle başa çıkmak için bazı yollar önerdiği için bir miktar değer var . Bu alternatif yaklaşımın sağlamlıklarına dikkat çekmek de bir şekilde sorun değil .
humanityANDpeace

1
Bunu oyladı. Bunun mantığı, stilin bazıları tarafından uygunsuz olarak kabul edilebileceğine tamamen katılıyorum, onun esası var ve aslında yararlı olmasa bile, gerçeği kabul etme eğilimindeyim. Çekirdek 4.x, udev rasgele ethernet arayüzleri yeniden adlandırıyor .. NE ?!
Victor

Kalıcı adlandırma aygıtları için çekirdeğe güvenemezsiniz. En azından udev kontrolünü size veriyor.
Emmanuel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.