دوره آموزشی
دوبله زبان فارسی
بررسی عمیق درایورهای دستگاه کاراکتری
✅ سرفصل و جزئیات آموزش
آنچه یاد خواهید گرفت:
- نوشتن درایور دستگاه کاراکتری از ابتدا
- درک عملیات فایل مختلف ارائهشده توسط درایور کاراکتری
پیشنیازهای دوره
- توانایی نوشتن/کامپایل/لود/آنلود ماژولهای Hello World کرنل لینوکس
توضیحات دوره
بروزرسانی شده در 10 اکتبر: بخش دانلودها اضافه شد
از این دوره چه چیزی خواهید آموخت؟
- مقدمهای بر درایورهای کاراکتری
- شماره دستگاه و فایل دستگاه چیست؟
- تخصیص شماره دستگاه - به صورت استاتیک و داینامیک
- ایجاد فایل دستگاه - دستی و خودکار
- ثبت دستگاه کاراکتری و عملیات فایل آن در کرنل
- کپی کردن داده از فضای کاربر به فضای کرنل و برعکس
- درک ساختارهای مختلف - struct file و struct inode
- پیادهسازی عملیات فایل open ،release ،read ،write ،llseek و ioctl
- نحوه ایجاد چندین نود دستگاه و اضافه کردن پشتیبانی برای دادههای خصوصی
- جریان فراخوانی سیستمی write از نقطه ورود فراخوانی سیستمی کرنل تا عملیات فایل write در درایور
- مدیریت تمام موارد خطا در پیادهسازی ioctl
- ارسال سیگنال به فضای کاربر از فضای کرنل
- مکانیسمهای مختلف کنترل دسترسی و قابلیتها
- درایور Misc
APIهای پوشش داده شده در این دوره:
- MAJOR
- MINOR
- MKDEV
- register_chrdev_region
- alloc_chrdev_region
- class_create
- device_create
- class_destroy
- device_destroy
- unregister_chrdev_region
- imajor
- 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 monitor
این دوره برای چه کسانی مناسب است؟
- توسعهدهندگانی که علاقهمند به یادگیری برنامهنویسی کرنل لینوکس هستند.
بررسی عمیق درایورهای دستگاه کاراکتری
-
مقدمهای بر درایورهای دستگاه کاراکتری 03:36
-
لیست کردن دستگاههای کاراکتری و بلوکی 02:28
-
مراحل ثبت یک درایور کاراکتری 00:41
-
شماره دستگاه = Major + Minor 03:32
-
چگونگی انتخاب شماره دستگاه 01:58
-
نوع داده برای شماره دستگاه dev_t 00:50
-
مثالی از ماکروهای MAJOR ،MINOR و MKDEV 03:27
-
فایل /proc/devices 01:03
-
تخصیص استاتیک شمارههای دستگاه 01:36
-
مثال تخصیص استاتیک شمارههای دستگاه 02:26
-
موارد تست روی مثال قبلی 01:58
-
اگر برای ثبت همان شماره Major تلاش کنیم چه اتفاقی میافتد؟ 01:39
-
اگر برای ثبت همان نام تلاش کنیم چه اتفاقی میافتد؟ 01:36
-
ثبت حداکثر شمارههای Minor 03:27
-
حداکثر شماره Major چیست؟ 03:02
-
تخصیص داینامیک شماره دستگاه 00:48
-
مثال تخصیص داینامیک شماره دستگاه 01:54
-
فراخوانی alloc_chrdev_region در حلقه 04:12
-
ایجاد دستی نود دستگاه 03:54
-
ایجاد خودکار نود دستگاه - class_create 04:02
-
ایجاد خودکار نود دستگاه - device_create 02:48
-
مثال ایجاد خودکار نود دستگاه 01:54
-
آزمون 1 None
-
مقدمه 01:46
-
ثبت file_operations در کرنل لینوکس 01:44
-
مقایسه cdev_init و cdev_alloc 01:27
-
مثال ماژول کرنل لینوکس برای ثبت file operations با استفاده از cdev_alloc 03:14
-
مثال ماژول کرنل لینوکس برای ثبت file operations با استفاده از cdev_init 02:33
-
دستگاههای مجازی - /dev/null، /dev/zero، /dev/urandom 04:25
-
بررسی قدمبهقدم فایل drivers/char/mem.c 02:42
-
در صورت fork، توابع open و release چند بار فراخوانی میشوند؟ 04:16
-
در صورت وجود چندین پردازش، توابع open و release چند بار فراخوانی میشوند؟ 01:27
-
ساختار struct file 03:14
-
مثال struct file 02:27
-
ساختار struct inode 03:12
-
مثال struct inode 02:33
-
مثال مقایسه struct inode و struct file 03:28
-
وقتی بافر فضای کاربر را در تابع write چاپ میکنیم چه اتفاقی میافتد؟ 05:27
-
دسترسی به بافر فضای کاربر در فضای کرنل 02:26
-
copy_from_user 02:58
-
وقتی اشارهگر NULL را در فراخوانی سیستمی write پاس میدهیم چه اتفاقی میافتد؟ 01:19
-
copy_to_user 01:41
-
put_user 04:11
-
get_user 02:14
-
پاس دادن ساختار از فضای کاربر به فضای کرنل و برعکس 02:47
-
آیا میتوان متغیرهای کاربر در heap را به درایور کرنل پاس داد؟ 01:52
-
پاس دادن ساختار با یک عضو در stack و دیگری در heap 02:29
-
ابزار کرنل برای چاپ dev_t - توابع print_dev_t و format_dev_t 03:53
-
آیا میتوان از strlen در فضای کرنل استفاده کرد 04:14
-
strnlen_user 02:30
-
راه حل پاس دادن ساختار با یک عضو در stack و دیگری در heap 03:16
-
مشکل درایور کاراکتری زمانی که کاراکتر به کاراکتر میخوانیم 02:33
-
افزودن پشتیبانی از افست در پیادهسازی read و write 05:44
-
منطق بروزرسانی شده برای خواندن/نوشتن بایتهای کمتر از مقدار درخواستشده/موجود 03:51
-
افزودن پشتیبانی lseek 02:17
-
ایجاد چندین نود دستگاه 03:52
-
ماکرو container_of 03:32
-
افزودن پشتیبانی برای داده خصوصی 02:25
-
وقتی write را از فضای کاربر فراخوانی میکنیم چه اتفاقی میافتد؟ 04:26
-
مقدمه 03:54
-
مثال Ioctl - BLKGETSIZE 03:13
-
مثال Ioctl - BLKGETSIZE64 01:16
-
متد درایور Ioctl - unlocked_ioctl 03:26
-
افزودن سه ioctl در درایور کرنل 03:24
-
نامهای نمادین برای فرمان های ioctl 01:58
-
تعریف فرمان های ioctl 06:07
-
مثال C از ماکروهای ioctl 01:52
-
ماکروهایی برای کدگشایی اطلاعات از فرمان ioctl 01:59
-
کد درایور بهروزرسانی شده با استفاده از ماکروهای ioctl 01:59
-
اگر فرمان پشتیبانینشده از فضای کاربر ارسال شود مقدار بازگشتی چه باید باشد؟ 01:34
-
ماکرو access_ok 02:25
-
کد درایور بهروزرسانی شده با استفاده از ماکرو access_ok 02:32
-
سناریوهای شکست access_ok 02:23
-
وقتی سایز متفاوتی را در فرمان ioctl پاس میدهیم چه اتفاقی میافتد؟ 02:41
-
compat_ioctl 06:05
-
مشکلات زمانی که پردازش 32 بیتی تلاش میکند فرمان ioctl را اجرا کند 06:21
-
ارسال سیگنال از ماژول به پردازش 03:39
-
درایور دستگاه چند بار توسط برنامه استفاده میشود؟ 02:34
-
اجازه دادن به تنها یک پردازش برای استفاده از فایل دستگاه در هر زمان 04:59
-
محدود کردن دسترسی به یک کاربر واحد در هر زمان 05:59
-
قابلیتها 05:19
-
مثال استفاده از قابلیتها - cap_dac_override 03:15
-
مثال استفاده از قابلیتها - cap_sys_module 03:14
-
مثال استفاده از قابلیتها - cap_sys_admin 02:55
-
فلگهای Open 05:11
-
اگر تابع close فراخوانی نشود و پردازش خاتمه یابد چه اتفاقی میافتد؟ 01:47
-
مقدمه 05:07
-
مثال درایور Misc 02:05
مشخصات آموزش
بررسی عمیق درایورهای دستگاه کاراکتری
- تاریخ به روز رسانی: 1404/12/10
- سطح دوره:مقدماتی
- تعداد درس:88
- مدت زمان :04:20:31
- حجم :3.23GB
- زبان:دوبله زبان فارسی
- دوره آموزشی:AI Academy