يو ديف
قد يكون القسم التمهيدي من هذه المقالة قصيرًا جدًا بحيث لا يلخص النقاط الرئيسية بشكل كافٍ . ( نوفمبر 2014 ) |
| المطور(ون) | جريج كرواه هارتمان وكاي سيفرز |
|---|---|
| الإصدار الأولي | نوفمبر 2003 |
| إصدار مستقر | 256.7 [1]
/ 8 أكتوبر 2024 |
| مستودع |
|
| مكتوب في | ج |
| نظام التشغيل | لينكس |
| يكتب | عقدة الجهاز |
| رخصة | رخصة جنو العمومية الإصدار 2 |
| موقع إلكتروني | الموقع الرسمي |
udev (userspace /dev ) هو مدير أجهزة لنواة Linux . بصفته خليفة devfsd وhotplug، يدير udev بشكل أساسي عقد الأجهزة في دليل /dev . في الوقت نفسه، يتعامل udev أيضًا مع جميع أحداث مساحة المستخدم التي تنشأ عند إضافة أجهزة إلى النظام أو إزالتها منه، بما في ذلك تحميل البرامج الثابتة حسب متطلبات أجهزة معينة.
الأساس المنطقي
إنها نواة نظام التشغيل المسؤولة عن توفير واجهة مجردة للأجهزة لبقية البرامج. ولأنها نواة متجانسة ، فإن نواة لينكس تفعل ذلك بالضبط: برامج تشغيل الأجهزة هي جزء من نواة لينكس، وتشكل أكثر من نصف الكود المصدري الخاص بها. [2] يمكن الوصول إلى الأجهزة من خلال مكالمات النظام أو عبر عقد الأجهزة الخاصة بها .
لكي نتمكن من التعامل مع الأجهزة الطرفية القادرة على التوصيل السريع بطريقة سهلة الاستخدام، فقد تم نقل جزء من التعامل مع كل هذه الأجهزة القادرة على التوصيل السريع من النواة إلى برنامج يعمل في مساحة المستخدم. يخدم التشغيل في مساحة المستخدم أغراض الأمان والاستقرار.
تصميم
برامج تشغيل الأجهزة هي جزء من نواة لينكس، حيث تتضمن وظائفها الأساسية اكتشاف الجهاز، واكتشاف تغييرات حالة الجهاز، ووظائف الأجهزة منخفضة المستوى المماثلة. بعد تحميل برنامج تشغيل الجهاز في الذاكرة من نواة لينكس، يتم إرسال الأحداث المكتشفة إلى خادم مساحة المستخدم udevd. مدير الجهاز، udevd ، هو الذي يلتقط كل هذه الأحداث ثم يقرر ما سيحدث بعد ذلك. لهذا، يحتوي udevd على مجموعة شاملة للغاية من ملفات التكوين، والتي يمكن لمسؤول الكمبيوتر تعديلها جميعًا وفقًا لاحتياجاته.
- في حالة توصيل جهاز تخزين جديد عبر USB، يتم إخطار udevd بواسطة النواة ويقوم هو نفسه بإخطار udisksd-daemon. يمكن لهذا الديمون بعد ذلك تحميل أنظمة الملفات.
- في حالة توصيل كبل Ethernet جديد ببطاقة NIC لشبكة Ethernet، يتم إخطار udevd بواسطة النواة ويقوم هو نفسه بإخطار NetworkManager-daemon. يمكن لـ NetworkManager-daemon بدء تشغيل dhclient لبطاقة NIC هذه، أو تكوينها وفقًا لبعض التكوينات اليدوية.
إن التعقيد الناتج عن القيام بذلك أجبر مؤلفي التطبيقات على إعادة تنفيذ منطق دعم الأجهزة. كما تتطلب بعض الأجهزة برامج مساعدة ذات امتيازات لإعدادها للاستخدام. وغالبًا ما يتعين استدعاء هذه البرامج بطرق قد يكون من الصعب التعبير عنها باستخدام نموذج أذونات يونكس (على سبيل المثال، السماح للمستخدمين بالانضمام إلى الشبكات اللاسلكية فقط إذا سجلوا الدخول إلى وحدة التحكم في الفيديو). لجأ مؤلفو التطبيقات إلى استخدام ملفات setuid الثنائية أو تشغيل شياطين الخدمة لتوفير التحكم في الوصول وفصل الامتيازات الخاص بهم، مما قد يؤدي إلى إدخال ثغرات أمنية في كل مرة. [3]
تم إنشاء HAL للتعامل مع هذه التحديات، ولكن الآن أصبح قديمًا في معظم توزيعات Linux، وتم استبدال وظيفته بـ udevd.
ملخص
على عكس أنظمة يونكس التقليدية ، حيث كانت عقد الأجهزة في الدليل /dev عبارة عن مجموعة ثابتة من الملفات، يوفر مدير الأجهزة udev في Linux بشكل ديناميكي فقط العقد للأجهزة الموجودة فعليًا على النظام. على الرغم من أن devfs كانت توفر وظائف مماثلة، فقد ذكر جريج كرواه هارتمان عددًا من الأسباب [4] لتفضيل udev على devfs:
- يدعم udev تسمية الأجهزة المستمرة، والتي لا تعتمد على الترتيب الذي يتم به توصيل الأجهزة بالنظام على سبيل المثال. يوفر إعداد udev الافتراضي أسماء مستمرة لأجهزة التخزين. يتم التعرف على أي قرص صلب من خلال معرف نظام الملفات الفريد الخاص به، واسم القرص والموقع الفعلي على الجهاز المتصل به.
- يتم تنفيذ udev بالكامل في مساحة المستخدم ، على عكس مساحة نواة devfs . إحدى النتائج المترتبة على ذلك هي أن udev نقل سياسة التسمية خارج النواة ويمكنه تشغيل برامج عشوائية لتكوين اسم للجهاز من خصائص الجهاز، قبل إنشاء العقدة؛ هناك، يمكن مقاطعة العملية بأكملها أيضًا ويتم تشغيلها بأولوية أقل.
ينقسم udev، ككل، إلى ثلاثة أجزاء:
- مكتبة libudev التي تسمح بالوصول إلى معلومات الجهاز؛ تم دمجها في حزمة برامج systemd 183. [5]
- مساحة المستخدم daemon udevd التي تدير /dev الافتراضي .
- أداة سطر الأوامر الإدارية udevadm للتشخيص.
يتلقى النظام مكالمات من النواة عبر مقبس netlink . استخدمت الإصدارات السابقة خاصية hotplug، مضيفة رابطًا إلى نفسها في /etc/hotplug.d/default لهذا الغرض.
عملية

udev هو مدير جهاز عام يعمل كخادم على نظام Linux ويستمع (عبر مقبس netlink ) إلى الأحداث التي يرسلها kernel إذا تم تهيئة جهاز جديد أو إزالة جهاز من النظام. تأتي حزمة udev مع مجموعة واسعة من القواعد التي تطابق القيم المصدرة للحدث وخصائص الجهاز المكتشف. من الممكن أن تقوم القاعدة المطابقة بتسمية وإنشاء عقدة جهاز وتشغيل برامج مهيأة لإعداد الجهاز وتكوينه.
يمكن لقواعد udev أن تتطابق مع خصائص مثل نظام فرعي النواة، أو اسم جهاز النواة، أو الموقع الفعلي للجهاز، أو خصائص مثل الرقم التسلسلي للجهاز. يمكن للقواعد أيضًا طلب معلومات من برامج خارجية لتسمية جهاز أو تحديد اسم مخصص سيكون دائمًا هو نفسه، بغض النظر عن ترتيب اكتشاف الأجهزة بواسطة النظام.
في الماضي كانت الطريقة الشائعة لاستخدام udev على أنظمة Linux هي السماح له بإرسال الأحداث عبر مقبس إلى HAL ، والذي سيقوم بإجراء المزيد من الإجراءات الخاصة بالجهاز. على سبيل المثال، سيقوم HAL بإخطار البرامج الأخرى التي تعمل على النظام بوصول الأجهزة الجديدة عن طريق إصدار رسالة بث على نظام D-Bus IPC لجميع العمليات المهتمة . بهذه الطريقة، يمكن لأجهزة سطح المكتب مثل GNOME أو K Desktop Environment 3 بدء تشغيل متصفح الملفات لاستعراض أنظمة الملفات لمحركات أقراص فلاش USB وبطاقات SD المرفقة حديثًا . [6]
بحلول منتصف عام 2011، تم إيقاف استخدام HAL في معظم توزيعات Linux وكذلك في بيئات سطح المكتب KDE وGNOME [7] و Xfce [8] ، وغيرها. تم دمج الوظائف المجسدة سابقًا في HAL في udev نفسه، أو نقلها إلى برامج منفصلة مثل udisks و upower .
- يوفر udev وصولاً منخفض المستوى إلى شجرة أجهزة Linux. يسمح للبرامج بإحصاء الأجهزة وخصائصها والحصول على إشعارات عند وصول الأجهزة وخروجها.
- dbus هو إطار عمل يسمح للبرامج بالتواصل مع بعضها البعض بشكل آمن وموثوق به وبواجهة برمجة كائنية التوجه عالية المستوى.
- udisks (المعروف سابقًا باسم DeviceKit-disks) هو برنامج شيطاني يقع أعلى libudev وواجهات kernel الأخرى ويوفر واجهة عالية المستوى لأجهزة التخزين ويمكن الوصول إليه عبر dbus للتطبيقات.
- upower (المعروف سابقًا باسم DeviceKit-power) هو برنامج شيطاني يقع فوق libudev وواجهات kernel الأخرى ويوفر واجهة عالية المستوى لإدارة الطاقة ويمكن الوصول إليه عبر dbus للتطبيقات.
- NetworkManager هو برنامج شيطاني يقع فوق libudev وواجهات kernel الأخرى (وعدد من البرامج الشيطانية الأخرى) ويوفر واجهة عالية المستوى لتكوين الشبكة وإعدادها ويمكن الوصول إليها عبر dbus للتطبيقات. [9]
يتلقى udev الرسائل من النواة، ويمررها إلى برامج النظام الفرعي مثل Network Manager. تتحدث التطبيقات إلى Network Manager عبر D-Bus.
لقد أصبح HAL قديمًا ولا يستخدم إلا بواسطة الكود القديم. تم إصدار Ubuntu 10.04 بدون HAL. في البداية، كان من المخطط إطلاق DeviceKit جديد ليحل محل جوانب معينة من HAL، ولكن في مارس 2009، تم إيقاف DeviceKit لصالح إضافة نفس الكود إلى udev كحزمة: udev-extras، وتم نقل بعض الوظائف الآن إلى udev نفسه.
تاريخ
تم تقديم udev في Linux 2.5 . قدم إصدار 2.6.13 من نواة Linux أو قام بتحديث إصدار جديد من واجهة uevent. لن يتم تشغيل النظام الذي يستخدم إصدارًا جديدًا من udev باستخدام نوى أقدم من 2.6.13 ما لم يتم تعطيل udev واستخدام دليل /dev التقليدي للوصول إلى الجهاز.
في أبريل 2012، تم دمج قاعدة بيانات udev في شجرة مصدر systemd ، مما يجعل systemd 183 أول إصدار يتضمن udev. [5] [10] [11] في أكتوبر 2012، انتقد لينوس تورفالدس نهج كاي سيفرز لصيانة udev وإصلاح الأخطاء المتعلقة بتحميل البرامج الثابتة ، قائلًا: [12]
نعم، إن القيام بذلك داخل النواة "أكثر قوة". ولكن لا تلعبوا بالألاعيب، وتوقفوا عن الكذب. إن الأمر أكثر قوة لأن لدينا صيانين يهتمون، ولأننا نعلم أن الانحدار ليس شيئًا يمكننا اللعب به بسرعة ودون مبالاة. إذا تعطل شيء، ولم نعرف ما هو الإصلاح الصحيح لهذا التعطل، فإننا نعيد الشيء الذي تعطل. لذا نعم، من الواضح أننا أفضل حالاً إذا قمنا بذلك داخل النواة. ليس لأن تحميل البرامج الثابتة لا يمكن القيام به في مساحة المستخدم. ولكن ببساطة لأن صيانة udev منذ أن تخلى عنها جريج أصبحت في انحدار.
في عام 2012، أنشأ مشروع Gentoo Linux فرعًا من قاعدة بيانات udev الخاصة بـ systemd لتجنب الاعتماد على بنية systemd. يُطلق على الفرع الناتج اسم eudev ويجعل وظيفة udev متاحة بدون systemd. الهدف المعلن للمشروع هو إبقاء eudev مستقلاً عن أي توزيع Linux أو نظام init . [13] يصف مشروع Gentoo eudev على النحو التالي: [14]
eudev هو شوكة من systemd-udev بهدف الحصول على توافق أفضل مع البرامج الموجودة مثل OpenRC و Upstart والنوى القديمة وسلاسل الأدوات المختلفة وأي شيء آخر مطلوب من قبل المستخدمين والتوزيعات المختلفة.
في 29 مايو 2014، تم إسقاط دعم تحميل البرامج الثابتة من خلال udev من systemd، حيث تم تحديد أن مهمة تحميل البرامج الثابتة هي نواة النظام. [15] بعد يومين، اقترح لينارت بوترينج تأجيل هذا التصحيح حتى يبدأ استخدام kdbus بواسطة udev؛ في تلك المرحلة، كانت الخطة هي تحويل udev لاستخدام kdbus كنظام مراسلة أساسي، والتخلص من النقل القائم على netlink من مساحة المستخدم إلى مساحة المستخدم. [16]
المؤلفون
تم تطوير udev بواسطة Greg Kroah-Hartman و Kay Sievers ، مع الكثير من المساعدة من Dan Stekloff، من بين آخرين.
مراجع
- ^ "الإصدار 256.7". 8 أكتوبر 2024. تم الاسترجاع 27 أكتوبر 2024 .
- ^ مارتي، دون (2 يوليو 2007). "هل يفقد كبار مطوري لينكس رغبتهم في البرمجة؟". ComputerworldUK . مؤرشف من الأصل في 19 يوليو 2016. تم الاسترجاع 2 يونيو 2024 .
- ^ بينينجتون، هافوك (2003-07-10)، جعل الأجهزة تعمل بشكل جيد
- ^ Greg Kroah-Hartman . "udev and devfs – The final word". مؤرشف من الأصل ( نص عادي ) في 2011-07-09 . تم الاسترجاع في 2008-01-24 .
- ^ abc "systemd/systemd". GitHub . تم الاسترجاع في 2016-08-21 .
- ^ "إدارة الأجهزة الديناميكية في Udev" (PDF) . مجلة Linux. 2006-10-01 . تم الاسترجاع في 2008-07-14 .[ رابط ميت دائم ]
- ^ "HALRemoval". 2011-06-28 . تم الاسترجاع 2011-09-13 .
- ^ "Thunar-volman وإلغاء استخدام HAL في Xfce". 2010-01-17. مؤرشف من الأصل في 2017-12-26 . تم الاسترجاع في 2017-12-25 .
- ^ Lennart Poettering (2010-04-25). "العلاقة بين udev وhal وDbus وDeviceKit؟".
- ^ Sievers, Kay (2012-04-03). "مستقبل شجرة مصدر udev". linux-hotplug (قائمة بريدية) . تم الاسترجاع في 2013-05-22 .
- ^ Sievers, Kay, "Commit importing udev into systemd", systemd , تم الاسترجاع في 2013-05-22
- ^ Linus Torvalds (2012-10-03). "Re: udev breakages". linux-kernel (Mailing list) . تم الاسترجاع في 2014-10-28 .
- ^ "gentoo/eudev – README.md". GitHub . تم الاسترجاع في 2017-12-25 .
- ^ "Gentoo Linux Projects – Gentoo eudev project". مؤرشف من الأصل في 2015-09-04 . تم الاسترجاع في 2017-12-25 .
- ^ "[systemd-devel] [تصحيح] إزالة محمل البرامج الثابتة udev". 2014-05-29.
- ^ "[systemd-devel] [تصحيح] إزالة محمل البرامج الثابتة udev". 2014-05-31.
روابط خارجية
- الموقع الرسمي
