درایورهای دستگاه کاراکتر در عمق

Character Device Drivers in deep

نکته: آخرین آپدیت رو دریافت میکنید حتی اگر این محتوا بروز نباشد.
نمونه ویدیوها:
توضیحات دوره: برنامه نویسی کرنل لینوکس - درایورهای دستگاه کاراکتر نوشتن درایور دستگاه کاراکتر از ابتدا درک عملیات فایل های مختلف ارائه شده توسط درایور کاراکتر پیش نیازها:باید قادر به نوشتن/کامپایل/بارگیری/بارگیری ماژول های Hello World Linux Kernel

به روز شده در 10 اکتبر: بخش دانلودها اضافه شد

از این دوره چه چیزی یاد خواهید گرفت؟

  • معرفی درایورهای کاراکتر

  • شماره دستگاه و فایل دستگاه چیست

  • تخصیص شماره دستگاه - به صورت ایستا و پویا

  • ایجاد فایل دستگاه - به صورت دستی (mknod) و خودکار (udev)

  • ثبت دستگاه کاراکتر و عملکرد فایل آن با Kernel

  • کپی کردن داده ها از فضای کاربر به فضای هسته و بالعکس

  • آشنایی با ساختارهای مختلف - فایل struct و struct inode

  • اجرای عملیات فایل باز، انتشار، خواندن، نوشتن، llseek، ioctl

  • نحوه ایجاد چندین گره دستگاه و افزودن پشتیبانی برای داده های خصوصی

  • جریان نوشتن تماس سیستمی از نقطه ورود فراخوانی سیستم هسته به عملیات نوشتن فایل درایور

  • بررسی تمام موارد خطا در اجرای ioctl

  • ارسال سیگنال به فضای کاربر از فضای هسته

  • مکانیسم‌ها و قابلیت‌های کنترل دسترسی مختلف

  • درایور متفرقه

APIهای تحت پوشش این دوره آموزشی:

  • MAJOR

  • مینور

  • MKDEV

  • register_chrdev_region

  • alloc_chrdev_region

  • class_create

  • device_create

  • class_destroy

  • device_destroy

  • unregister_chrdev_region

  • مهم

  • iminor

  • copy_from_user

  • copy_to_user

  • put_user

  • get_user

  • print_dev_t

  • format_dev_t

  • strnlen_user

  • container_of

  • access_ok

دستورات استفاده شده در این دوره:

  • mknod

  • مانیتور udevadm


سرفصل ها و درس ها

مقدمه Introduction

  • آشنایی با درایورهای دستگاه کاراکتر Introduction to character device drivers

  • لیست کاراکترها و مسدود کردن دستگاه ها List Character and Block Devices

  • مراحل ثبت نام درایور کاراکتر Steps in Registering a character driver

  • شماره دستگاه = عمده + مینور Device Number = Major + Minor

  • نحوه انتخاب شماره دستگاه How to choose a device number

  • نوع داده برای شماره دستگاه dev_t Data type for device number dev_t

  • نمونه ای از ماکروهای MAJOR، MINOR، MKDEV Example of MAJOR,MINOR,MKDEV macros

  • فایل/proc/devices /proc/devices file

  • تخصیص استاتیک شماره دستگاه Static Allocation of Device Numbers

  • نمونه ای از تخصیص ایستا شماره دستگاه ها Example of static allocation of device numbers

  • موارد تست در مثال قبلی Test cases on Previous Example

  • اگر بخواهم همان شماره اصلی را ثبت کنم چه اتفاقی می افتد What happens if i try to register same major number

  • اگر بخواهم با همین نام ثبت نام کنم چه اتفاقی می افتد What happens if i try to register same name

  • ثبت حداکثر اعداد جزئی Registering Maximum Minor Numbers

  • حداکثر عدد اصلی چیست؟ What is Maximum Major Number

  • تخصیص دینامیک شماره دستگاه Dynamic Allocation of Device Number

  • نمونه ای از تخصیص پویا شماره دستگاه Example of dynamic allocation of device number

  • فراخوانی alloc_chrdev_region در حلقه Calling alloc_chrdev_region in loop

  • دستی ایجاد گره دستگاه Manual Device Node Creation

  • ایجاد خودکار گره دستگاه - class_create Automatic Device Node Creation - class_create

  • ایجاد خودکار گره دستگاه - device_create Automatic Device Node Creation - device_create

  • نمونه ای از ایجاد خودکار گره دستگاه Example of automatic device node creation

  • آزمون 1 Quiz 1

عملیات فایل File Operations

  • مقدمه Introduction

  • ثبت file_operations با کرنل لینوکس Registering file_operations with Linux Kernel

  • cdev_init در مقابل cdev_alloc cdev_init vs cdev_alloc

  • نمونه ماژول هسته لینوکس ثبت عملیات فایل - cdev_alloc Linux Kernel Module example of file operations registrations - cdev_alloc

  • نمونه ماژول هسته لینوکس ثبت عملیات فایل - cdev_init Linux Kernel Module example of file operations registrations - cdev_init

  • شبه دستگاه ها -/dev/null،/dev/zero،/dev/urandom Pseudo Devices - /dev/null, /dev/zero, /dev/urandom

  • راهنمای رانندگان/char/mem.c Walkthrough of drivers/char/mem.c

  • در صورت فورک چند بار باز و رها کردن فراخوانی می شود How many times open and release will be called in case of fork

  • در صورت وجود چندین پردازش، چند بار باز و انتشار فراخوانی می شود How many times open and release will be called in case of multiple processes

  • فایل struct struct file

  • نمونه فایل struct Example of struct file

  • struct inode struct inode

  • نمونه ای از struct inode Example of struct inode

  • نمونه ای از struct inode در مقابل فایل struct Example of struct inode vs struct file

  • وقتی بافر فضای کاربر را در تابع نوشتن چاپ می کنم چه اتفاقی می افتد What happens when i print user space buffer in write function

  • دسترسی به بافر فضای کاربر در فضای کرنل Accessing user space buffer in Kernel space

  • copy_from_user copy_from_user

  • وقتی NULL ptr را در نوشتن فراخوانی سیستم پاس می کنم چه اتفاقی می افتد What happens when i pass NULL ptr in write system call

  • copy_to_user copy_to_user

  • put_user put_user

  • get_user get_user

  • انتقال ساختار از فضای کاربر به فضای هسته و بالعکس Passing structure from user space to kernel space and vice versa

  • آیا می توانم متغیرهای کاربر را روی درایور هیپ به هسته منتقل کنم؟ Can i pass user variables on heap to kernel driver

  • عبور ساختار با یک عضو از پشته و دیگری در پشته Passing structure with one member from stack and other in heap

  • ابزار هسته برای چاپ dev_t - print_dev_t، format_dev_t Kernel utility to print dev_t - print_dev_t, format_dev_t

  • آیا می توانم از strlen در فضای هسته استفاده کنم؟ Can i use strlen in kernel space

  • strnlen_user strnlen_user

  • راه حل عبور ساختار با یک عضو در پشته و دیگری در پشته Solution to passing structure with one member in stack and other in heap

  • مشکل در درایور کاراکتر وقتی کاراکتر به کاراکتر می خوانیم Problem in character driver when we read character by character

  • افزودن پشتیبانی افست در اجرای خواندن و نوشتن Adding offset support in read and write implementation

  • منطق به روز شده برای خواندن/نوشتن بایت های کمتر از درخواستی/در دسترس Updated logic to read/write bytes less than requested/available

  • افزودن پشتیبانی lseek Adding lseek support

  • ایجاد چندین گره دستگاه Creating multiple device nodes

  • container_of macro container_of macro

  • افزودن پشتیبانی برای داده های خصوصی Adding support for private data

  • چه اتفاقی می‌افتد وقتی از فضای کاربر نوشتن را صدا می‌کنم What happens when i call write from user space

IOCTL IOCTL

  • مقدمه Introduction

  • مثال Ioctl - BLKGETSIZE Ioctl example - BLKGETSIZE

  • مثال Ioctl - BLKGETSIZE64 Ioctl example - BLKGETSIZE64

  • روش درایور Ioctl - unlocked_ioctl Ioctl driver method - unlocked_ioctl

  • افزودن سه ioctl در درایور هسته Adding three ioctls in kernel driver

  • نام های نمادین دستورات ioctls Symbolic names to ioctls commands

  • تعریف دستورات ioctl Defining ioctl commands

  • C مثالی از ماکروهای ioctl C Example of ioctl macros

  • ماکروها برای رمزگشایی اطلاعات از دستور ioctl Macros to decode information from ioctl command

  • کد درایور با استفاده از ماکروهای ioctl به روز شد Updated driver code using ioctl macros

  • اگر دستور پشتیبانی نشده از فضای کاربر ارسال شود، مقدار بازگشتی چقدر باید باشد What should be the return value if unsupported command is sent from user space

  • ماکرو access_ok access_ok macro

  • کد درایور با استفاده از ماکرو access_ok به روز شد Updated driver code using access_ok macro

  • سناریوهای ناموفق access_ok Fail scenarios of access_ok

  • چه اتفاقی می‌افتد وقتی یک اندازه متفاوت را در دستور ioctl ارسال می‌کنیم What happens when we pass a different size in ioctl command

  • compat_ioctl compat_ioctl

  • مشکلاتی که هنگام پردازش 32 بیتی سعی در اجرای دستور ioctl دارد Issues when 32-bit process trying to perform ioctl command

  • ارسال سیگنال از ماژول به پردازش Sending a signal from module to process

کنترل دسترسی و قابلیت ها Access Control and Capabilities

  • چند بار یک درایور دستگاه توسط برنامه استفاده می شود How many times a device driver is being used by application

  • فقط به یک فرآیند اجازه دهید از فایل دستگاه در یک زمان استفاده کند Allow only one process to use the device file at a time

  • محدود کردن دسترسی به یک کاربر در یک زمان Restricting access to a single user at a time

  • قابلیت ها Capabilities

  • نمونه ای از استفاده از قابلیت ها - cap_dac_override Example of using capabilities - cap_dac_override

  • نمونه ای از استفاده از قابلیت ها - cap_sys_module Example of using capabilities - cap_sys_module

  • نمونه ای از استفاده از قابلیت ها - cap_sys_admin Example of using capabilities - cap_sys_admin

  • پرچم ها را باز کنید Open Flags

  • اگر با بستن تماس نگیرم و فرآیند خاتمه یابد چه اتفاقی می‌افتد What happens if I don't call close and process terminates

درایور متفرقه Misc Driver

  • مقدمه Introduction

  • نمونه ای از درایور متفرقه Example of Misc Driver

منابع Resources

  • دانلودها Downloads

نمایش نظرات

Udemy (یودمی)

یودمی یکی از بزرگ‌ترین پلتفرم‌های آموزشی آنلاین است که به میلیون‌ها کاربر در سراسر جهان امکان دسترسی به دوره‌های متنوع و کاربردی را فراهم می‌کند. این پلتفرم امکان آموزش در زمینه‌های مختلف از فناوری اطلاعات و برنامه‌نویسی گرفته تا زبان‌های خارجی، مدیریت، و هنر را به کاربران ارائه می‌دهد. با استفاده از یودمی، کاربران می‌توانند به صورت انعطاف‌پذیر و بهینه، مهارت‌های جدیدی را یاد بگیرند و خود را برای بازار کار آماده کنند.

یکی از ویژگی‌های برجسته یودمی، کیفیت بالای دوره‌ها و حضور استادان مجرب و با تجربه در هر حوزه است. این امر به کاربران اعتماد می‌دهد که در حال دریافت آموزش از منابع قابل اعتماد و معتبر هستند و می‌توانند به بهترین شکل ممکن از آموزش‌ها بهره ببرند. به طور خلاصه، یودمی به عنوان یکی از معتبرترین و موثرترین پلتفرم‌های آموزشی آنلاین، به افراد امکان می‌دهد تا به راحتی و با کیفیت، مهارت‌های مورد نیاز خود را ارتقا دهند و به دنبال رشد و پیشرفت شغلی خود باشند.

درایورهای دستگاه کاراکتر در عمق
جزییات دوره
4.5 hours
88
Udemy (یودمی) Udemy (یودمی)
(آخرین آپدیت)
863
4.1 از 5
دارد
دارد
دارد
Linux Trainer
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Linux Trainer Linux Trainer

مربی در آموزش آخر هفته لینوکس