لطفا جهت اطلاع از آخرین دوره ها و اخبار سایت در
کانال تلگرام
عضو شوید.
درایورهای دستگاه کاراکتر در عمق
Character Device Drivers in deep
نکته:
آخرین آپدیت رو دریافت میکنید حتی اگر این محتوا بروز نباشد.
نمونه ویدیوها:
توضیحات دوره:
برنامه نویسی کرنل لینوکس - درایورهای دستگاه کاراکتر نوشتن درایور دستگاه کاراکتر از ابتدا درک عملیات فایل های مختلف ارائه شده توسط درایور کاراکتر پیش نیازها:باید قادر به نوشتن/کامپایل/بارگیری/بارگیری ماژول های Hello World Linux Kernel
به روز شده در 10 اکتبر: بخش دانلودها اضافه شد
از این دوره چه چیزی یاد خواهید گرفت؟
معرفی درایورهای کاراکتر
شماره دستگاه و فایل دستگاه چیست
تخصیص شماره دستگاه - به صورت ایستا و پویا
ایجاد فایل دستگاه - به صورت دستی (mknod) و خودکار (udev)
ثبت دستگاه کاراکتر و عملکرد فایل آن با Kernel
کپی کردن داده ها از فضای کاربر به فضای هسته و بالعکس
آشنایی با ساختارهای مختلف - فایل struct و struct inode
نمونه ای از ایجاد خودکار گره دستگاه
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
نمایش نظرات