منبع اصلی نوشتار زیر در این لینک قرار دارد

مدیریت دیوایس ها در لینوکس – بخش چهارم

در بخش های قبلی مدیریت دیوایس ها در لینوکس که توسط udev انجام می گیرد، گفته شد udev یک ابزار فضای کاربر است که فرایند udevd رویدادهای صادر شده از کرنل لینوکس را دریافت کرده و رفتار و عکس العمل مناسب را متناسب را با توجه به خصوصیات دیوایس متصل شده یا قطع شده و قوانین (Rule) موجود انجام می دهد.

هسته سیستم عامل لینوکس یک درختواره از دیوایس ها را درون دایرکتوری sys/ متصل (mount) می کند. sys یک دایرکتوری پیشفرض سیستم عامل لینوکس است که از سیستم فایل درون حافظه sysfs استفاده می کند. همراه با دیگر موارد، این دایرکتوری به فضای هسته می گوید که کدام سخت افزارها در حال حاضر قابل دسترسی هستند و برنامه های فضای کاربر مانند udev و mdev می توانند به صورت پویا Device Node ها را بر اساس سخت افزارهای متصل درون دایرکتوری dev/ ایجاد کنند.

همانطور که گفته شد زمانی که یک سخت افزار به سیستم متصل و یا از سیستم جدا می شود، پیامی از هسته صادر خواهد شد که دو روش یا مکانیزم برای انتشار این پیام ها وجود دارد. لینوکس دو اینترفیس sbin/hotplug/ و netlink را فراهم کرده است.

استفاده و ادغام sysfs و hotplug در نسخه های قبل از ۲.۶ هسته لینوکس بودند که در devfs استفاده می شدند و از نسخه ۲.۶ به بعد استفاده از آنها منسوخ شده است.

در سیستم عامل لینوکس دیوایس ها از طریق Device File ها یا Device Node ها توسط برنامه های سطح کاربر مورد استفاده هستند. بنابراین به طور مثال برای پارتیشن بندی توسط دستور fdisk، دستور fdisk از این فایل ها استفاده می کند. اما به طور واقعی برای نوشتن بر روی و خواندن از دیسک ها، بادرای ور مربوط به دیسک ارتباط برقرار خواهد شد و درایور با سخت افزار در ارتباط است. از سوی دیگر دایرکتوری sys/ شامل مسیرهای فیزیکی مربوط به هر کدام از دیوایس های سخت افزاری متصل به سیستم است. به طور مثال مسیر فیزیکی زیر مربوط به اولین دیسک متصل به سیستم است.

sys/devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0/block/sda/

همانطور که گفته شد، هسته لینوکس به هر درایور یک عدد Major و برای مشخص کردن و تمایز میان هر دیوایس های مربوط به یک درایور به آنها یک عدد Major و  Minor اختصاص می دهد. در زیر دایرکتوری sys/dev/ دو دایرکتوری block و char وجود دارد.

ls -l /sys/dev

 درون هر یک از زیر دایرکتوری های block و char فایل های به صورت Major:Minor وجود دارد که لینک هایی به مسیر فیزیکی دیوایس مربوطه هستند.

linux_sys_dev_block_subdir

همانطور که از شکل بالا مشخص است Major Number مربوط به دیسک های ساتا برابر ۸ و Minor Number که آنها را از هم متمایز می کند اعداد صفر، یک و دو هستند. همچنین در زیر دایرکتوری sys/class و بر اساس نوع دیوایس (به طور مثال black) نیز می توانید اعداد Major:Minor را بدست بیاورید.

cat /sys/class/block/sda/dev

cat /sys/class/block/sda1/dev

cat /sys/class/block/sda2/dev

راهکار دیگر برای مشاهده اعداد Major:Minor استفاده از دستور ls -l است.

ls -l /dev/sda

ls -l /dev/sda1

ls -l /dev/sda2

ls -l /dev/tty0

ls -l /dev/dm-0

 مطابق با شکل زیر، هسته سیستم عامل لینوکس برای تمایز میان دیوایس ها عدد Minor را به آن دیوایس اختصاص می دهد.

linux_major_minor_numbers

و همچنین برنامه های فضای کاربر مانند fdisk از فایل های درون دایرکتوری dev/ استفاده می کنند. هسته سیستم عامل دیوایس را از طریق اعداد Major:Minor می شناسد. درایورهای درون هسته لینوکس مسئول کنترل دیوایس هستند و هر درایور دارای یک عدد Major است که این عدد Major به تمامی دیوایس های تحت کنترل آن درایور اختصاص داده می شود. هسته هر دیوایس را از طریق اختصاص عدد Minor متمایز می کند.

بنابراین هسته هر دیوایس را از طریق اعداد Major:Minor شناسایی می کند. از نظر هسته اعداد Major:Minor لینکی به مسیر فیزیکی دیوایس هستند و زمانی که برنامه فضای کاربر مانند fdisk بخواهد به دیوایس ذسترسی داشته باشد، پاسخ به درخواست آن از طریق درایور آن دیوایس صورت می گیرد.

linux_major_minor_numbers2


مدیریت دیوایس ها در لینوکس – بخش نخست

مدیریت دیوایس ها در لینوکس – بخش دوم

مدیریت دیوایس ها در لینوکس – بخش سوم



برچسب ها : , ,