آشنایی با udev

neda_eng

عضو جدید
کاربر ممتاز
شاخه dev/ در فایل سیستم لینوکس
در فـایـل سیـستم لـیـنوکس، شـاخـه*ای بـه نام dev/ وجود دارد که در آن تمامی ابزارهای سخت افزاری سیستم لیست شده*اند. برای مثال پارتیشن*های دیسک سـخـت یــا درایـوهای CD-ROM با نشانی dev/hdX/ در این شاخه وجود دارند. حتما هنگام استفاده از دستوری مانند mount از گــره*های مـوجـود در ایـن شـاخـه بــرای اتـصال ابزارها به فایل سیستم اسـتفاده کرده*اید. به طور سنتی، سیستمی به نام devfs عهده دار ایجاد این شاخه بر روی فـایـل سیـسـتم می*بـاشـد. devfs تـمـامی گره*های ممکن ابزار را بر روی شاخه dev/ ایجاد می*کند که نتیجه آن ساختاری است حجیم و سنگین که چندان هم منطقی به نظر نمی*رسد.
udev جایگزینی برای devfs
بـه طــور خـلاصه، udev سیستمی جایگزین برای سیستم قدیمی devfs با استفاده از sysfs و hotplug می*باشد. sysfs یک فایل سیستم جـدید برای هسته*های سری 2.6 می*باشد که توسط هسته کنترل شده و شامل ابزارهایی است که اکنون به سیستم شـمـا مـتـصل می*بـاشـند. udev می*تواند از این اطلاعات استفاده کرده و برعکس devfs که دارای یک ساختار ابزار ثابت در دایرکتوری dev/ بود، ورودی*های ایــن دایرکتوری را بصورت پویا و با توجه به این اطلاعات ایجاد نماید. sysfs در شاخه sys/ متصل شده و قابل مرور می*باشد:

# mount
/dev/hda5 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/hda1 on /boot type ext3 (rw)
/dev/hda6 on /home type reiserfs (rw,usrquota,grpquota)
/dev/hda8 on /data type ext3 (rw,noexec,nosuid,nodev)
/dev/hdb1 on /data2 type ext3 (rw,noexec,nosuid,nodev)
usbfs on /proc/bus/usb type usbfs (rw)
tmpfs on /dev type tmpfs (rw,size=10M,mode=0755)​
برای مـثـال هـنـگامی کــه کـاربـر دیـسـک usb یا دوربین دبجیتال usb خود را به سیستم متصل می*کند، گره*های sda در شاخه dev/ ایجاد شده و با برداشتن آن حــذف می*شــوند. چـنـین اتـفـاقـی در زمـان بـارگذاری ماژولی مانند loop نیز در حافظه رخ می*دهد و گره*های dev/loop/ ایجاد می*شوند.
بـرعـکس سـیـستم devfs کــه سـاختاری حجیم و سنگین داراست، ساختار udev بسیار جمع و جور و کوچک می*باشد. udev تنها گره*های ابزارهایی را که بـر روی سیستم حاضر هستند و ماژول آنها در حافظه بارگذاری شده است را نمایش می*دهد. این ویژگی باعث می*شود تــا یــک سـاخـتـار تـمیز و مرتب در dev/ داشته باشیم. توسعه devfs متوقف شده و udev در آینده نزدیک بطور کامل جایگزین آن خواهد شد.
یـکـی دیـگر از قـابـلیت*های جالب سیستم udev امکان بکارگیری نام*های سفارشی برای ابزارهای خاص در شاخه dev/ می*باشد. برای مـثـال مـمـکن اسـت شـمـا یـک درایـو usb و یک دوربین دیجیتال داشته باشید که از dev/sda1/ استفاده می*کنند، می*توانید کاری کنید که هرگاه دوربین به سیستم متصل می*شود با نام Camera و وقتی درایو usb به سیستم متصل می*شود به نام usbdrive شناخته شود. بـرای ایـن کـار لازم است تــا تـعدادی قانون (rule) به سیستم udev خود اضافه کنید. محل تعریف این قوانین در مسیر etc/udev/udev.rules/ می*باشد.

می*توانید نام ابزاری را که به درگاه usb متصل کرده*اید با استفاده از دستور زیر بدست آورده:​
# udevinfo -a -p $(udevinfo -q path -n /dev/sda1)
...
looking at the device chain at '/sys/devices/pci0000:00/0000:00:07.2/usb1/1-2':
BUS="usb"
ID="1-2"
DRIVER="usb"
SYSFS{bConfigurationValue}="1"
SYSFS{bDeviceClass}="00"
SYSFS{bDeviceProtocol}="00"
SYSFS{bDeviceSubClass}="00"
SYSFS{bMaxPower}="100mA"
SYSFS{bNumConfigurations}="1"
SYSFS{bNumInterfaces}=" 1"
SYSFS{bcdDevice}="0100"
SYSFS{bmAttributes}="c0"
SYSFS{detach_state}="0"
SYSFS{devnum}="2"
SYSFS{idProduct}="0102"
SYSFS{idVendor}="07b4"
SYSFS{manufacturer}="OLYMPUS"
SYSFS{maxchild}="0"
SYSFS{product}="C160,D395"
SYSFS{serial}="SW01103804 "
SYSFS{speed}="12"
SYSFS{version}=" 1.10"
...​
و سپس با ویرایش فایل etc/udev/udev.rules/ خطی مانند زیر را به آن اضافه کنید:​
BUS="usb", SYSFS{product}="C160,D395", KERNEL="sd?1", NAME="%k", SYMLINK="camera"​
از ایــن پس دوربین شما پس از اتصال بــه سـیستم در dev/camera/ قابل دسترسی خواهد بود. برای ابـزارهای ذخـیـره ســازی داده usb کـه به درایوهای usb یا usb mass storage نیز موسوم هستند، خط فایل etc/udev/udev.rules/ مانند زیر خواهد بود:

BUS="usb", KERNEL="sd*", SYSFS{product}="USB 2.0 Storage Device", NAME="%k", SYMLINK="usbhd%n"​

ایـن خـط ابـزارهایی مانند dev/usbhd/، /dev/usbhd1 و dev/usbhd2/ را ایجاد خواهد کــرد کــه usbhd1 و usbhd2 قابل اتصال (mount) بوده و usbhd را نیز می*توان در ابزارهای پارتیشن*بندی مـانـنـد cfdisk بـکـار گـرفـت.

اقلام مورد نیاز برای استفاده از udev
بـرای استفاده از udev باید سیستم شما مجهز به هسته*های سری 2.6 لینوکس بوده و بسته*های udev و hotplug نیز بر روی سـیـستم نـصب باشند. استفاده از بسته hal نیز به عنوان یک مجموعه تکمیلی که کمک کننده به عملکرد udev می*باشد، توصیه می*شود. در دبیان گنو/لینوکس می*توانید به سادگی این ابزارها را با استفاده از دستور زیر نصب کنید:

# apt-get install udev hal hotplug


Author : آلن باغومیان alan@technotux.com

 
بالا