🔔 با توجه به بهبود نسبی اینترنت، آمادهسازی دورهها آغاز شده است. به دلیل تداوم برخی اختلالات، بارگذاری دورهها ممکن است با کمی تأخیر انجام شود. مدت اشتراکهای تهیهشده محفوظ است.
لطفا جهت اطلاع از آخرین دوره ها و اخبار سایت در
کانال تلگرام
عضو شوید.
آموزش درایورهای دستگاه لینوکس - ارتباط با سختافزار
- آخرین آپدیت
دانلود Linux Device Drivers - Communicating with Hardware
نکته:
ممکن هست محتوای این صفحه بروز نباشد ولی دانلود دوره آخرین آپدیت می باشد.
نمونه ویدیوها:
توضیحات دوره:
برنامهنویسی هسته لینوکس برای دستگاههای مپشده به I/O و مپشده به حافظه
یادگیری برنامهنویسی پیشرفته هسته لینوکس برای تعامل با سختافزار.
مباحث کلیدی دوره
مپینگ I/O (Input/Output Mapping): درک نحوه ارتباط با سختافزار از طریق پورتهای I/O.
مپینگ حافظه (Memory Mapping): آشنایی با روش دسترسی به دستگاهها از طریق فضای آدرس حافظه.
PCI (Peripheral Component Interconnect): یادگیری نحوه کار با دستگاههای متصل به باس PCI.
ماژولهای هسته برای کیبورد و RTC: توسعه درایورهای هسته برای کنترل صفحه کلید و ساعت بلادرنگ (RTC).
پیشنیازها
توانایی نوشتن، کامپایل، بارگذاری و تخلیه ماژولهای ساده "Hello World" در هسته لینوکس.
آنچه در این دوره خواهید آموخت
دو حالت ارتباط با سختافزار: I/O Mapped IO و Memory Mapped IO.
درایورها/ماژولهای هسته برای I/O Mapped IO شامل: اسپیکر، RTC، کیبورد.
درایورها/ماژولهای هسته برای Memory Mapped IO شامل: مولد عدد تصادفی سختافزاری، GPIO، UART.
دسترسی به I/O Mapped IO و Memory Mapped IO از فضای کاربر (User Space).
آشنایی با PCI و SMBIOS برای مدیریت سختافزار.
APIها، ماکروها و ساختارها
توابع دسترسی به پورتهای I/O: inb, outb, inw, outw, inl, outl و نسخههای بافر شده آنها (_p).
مدیریت منابع سختافزاری: struct resource, request_region, release_region.
مدیریت مجوز دسترسی به پورتها و حافظه: ioperm, iopl, geteuid.
مپ کردن و آنمپ کردن پورتهای I/O و مپ کردن حافظه: ioport_map, ioport_unmap, mmap.
فایلهای مرتبط در لینوکس
/dev/port
/dev/mem
/proc/iomem
/proc/ioports
دستورات مفید در لینوکس
hwclock: مدیریت ساعت سختافزاری.
date: نمایش و تنظیم تاریخ و زمان سیستم.
showkey: نمایش کدهای کلیدهای فشرده شده.
hexdump: نمایش محتویات فایل به صورت هگزادسیمال.
strings: استخراج رشتههای قابل خواندن از فایلهای باینری.
dd: کپی و تبدیل فایلها (کاربرد در دسترسی مستقیم به حافظه).
lspci: لیست دستگاههای متصل به باس PCI.
biosdecode: نمایش اطلاعات BIOS سیستم.
dmidecode: نمایش اطلاعات DMI/SMBIOS سختافزار.
سرفصل ها و درس ها
مقدمه
Introduction
مقدمه
Introduction
رجیسترها در دستگاههای سختافزاری
Registers in Hardware devices
سختافزار چگونه بین پورت IO و دسترسی به حافظه تمایز قائل میشود؟
How does hardware distinguish between port IO and memory access
IO Mapped IO
IO Mapped IO
پورتهای I/O X86
X86 I/O ports
دسترسی به پورتهای I/O
Accessing I/O Ports
درخواست پورتهای I/O
Requesting I/O Ports
مثال ماژول کرنل لینوکس برای درخواست پورتهای I/O
Linux Kernel Module Example for requesting i/o ports
چرا مقدار خوانده شده با مقدار نوشته شده یکی نیست؟
Why read value is not same as write
چرا همه پورتها در /proc/ioports لیست نشدهاند؟
Why all ports are not listed in /proc/ioports
اطلاعات پورتهای I/O پردازنده را کجا پیدا کنیم؟
Where to find information of processor ioports
ماژول کرنل لینوکس برای فعال کردن اسپیکر
Linux Kernel Module to enable the Speaker
لیست پورتها
Ports list
RTC
RTC
مقدمهای بر RTC
Introduction to RTC
پورتها و رجیسترهای RTC قسمت ۱
RTC Ports and Registers Part1
پورتها و رجیسترهای RTC قسمت ۲
RTC Ports and Registers Part2
ماژول کرنل لینوکس در حال ارتباط با RTC
Linux Kernel Module communicating with RTC
مروری بر درایور RTC در کرنل لینوکس
Walkthrough of rtc driver in Linux kernel
ساعت سختافزاری و نرمافزاری
Hardware and software clock
مثال ماژول کرنل لینوکس برای بهروزرسانی زمان
Linux Kernel Module example to update time
Keyboard
Keyboard
مقدمهای بر کیبورد PC
Introduction to PC Keyboard
کدهای اسکن (Scancodes)
Scancodes
چگونه کد اسکن یک کلید را پیدا کنیم
How to find out scancode of a key
تایپماتیک (Typematic)
Typematic
دستور ریست (Reset Command)
Reset Command
پورتهای I/O کیبورد
I/O Ports of keyboard
ماژول کرنل لینوکس در حال ارسال دستورات به کنترلر کیبورد
Linux Kernel Module sending keyboard controller commands
ماژول کرنل لینوکس فعال و غیرفعال کردن ماوس
Linux Kernel Module Enabling and Disabling mouse
ماژول کرنل لینوکس فعال و غیرفعال کردن کیبورد
Linux Kernel Module Enabling and Disabling keyboard
ماژول کرنل لینوکس خواندن بایت دستور پس از غیرفعال کردن کیبورد
Linux Kernel Module reading command byte after disabling keyboard
رجیستر وضعیت (Status Register)
Status Register
ماژول کرنل لینوکس برای چاپ کلیدهای تایپ شده
Linux Kernel Module to print keys typed
ماژول کرنل لینوکس برای روشن کردن LEDهای کیبورد
Linux Kernel Module to turn on keyboard leds
User Space IO Access
User Space IO Access
مقدمه
Introduction
فراخوانی سیستمی ioperm
ioperm system call
اضافه کردن پیام خطا به کاربر عادی
Add an error message to normal user
چه اتفاقی میافتد وقتی ioperm را فراخوانی نمیکنید و از فضای کاربر به پورتهای I/O دسترسی پیدا میکنید؟
What happens when you dont call ioperm and access IO Ports from userspace
دسترسی به رجیسترهای RTC از فضای کاربر
Accessing RTC Registers from user space
iopl
iopl
دسترسی به رجیسترهای RTC پس از iopl
Accessing RTC Registers after iopl
ارسال کلیدها از پروسه فضای کاربر
Pushing keys from user space process
راهاندازی مجدد کامپیوتر با استفاده از پورت کیبورد
Restart Your Computer using keyboard port
راهاندازی مجدد کامپیوتر با استفاده از پورت ریست PCI
Restart Your Computer using Reset PCI Port
فعال و غیرفعال کردن اسپیکر
Enabling and Disabling speaker
تایمرهای 8254 و اسپیکرها
8254 Timers and speakers
/dev/port
/dev/port
Memory Mapped IO
Memory Mapped IO
مقدمه
Introduction
درخواست حافظه I/O
Requesting IO Memory
دسترسی به حافظه I/O
Accessing IO Memory
چرا نمیتوانیم مستقیماً به حافظه I/O دسترسی پیدا کنیم؟
Why cant we directly access IO memory
مثال ماژول کرنل لینوکس که فراخوانی request_mem_region ناموفق است
Linux Kernel Module example calling request mem region failed case
مثال ماژول کرنل لینوکس که فراخوانی request_mem_region موفق است
Linux Kernel Module example calling request mem region success case
مثال ماژول کرنل لینوکس که فراخوانی ioremap و iounmap میکند
Linux Kernel Module example calling ioremap and iounmap
مثال ماژول کرنل لینوکس در حال نوشتن در حافظه
Linux Kernel Module example writing to memory
مثال ماژول کرنل لینوکس که فراخوانی ioread و iowrite میکند
Linux Kernel Module example calling ioread and iowrite
مولد عدد تصادفی سختافزاری
Hardware Random Number Generator
رجیسترها در مولد عدد تصادفی سختافزاری
Registers in Hardware Random Number Generator
دسترسی به پورتها به عنوان حافظه I/O
Ports access as IO Memory
دسترسی به حافظه نقشهبندی شده I/O از فضای کاربر
Accessing memory mapped io from user space
CONFIG_STRICT_DEVMEM
CONFIG_STRICT_DEVMEM
ابزار devmem
devmem utility
پیادهسازی ساده ابزار devmem در c
Simple implementation of devmem utility in c
کد بهروز شده برای چاپ رشته
Updated code to print string
پیکربندی GPIO با استفاده از devmem
Configure GPIO using devmem
RTC روی QEMU ARM
RTC on qemu arm
تخلیه دادههای BIOS در فایل
Dump BIOS data on file
نوشتن رشته در حافظه RAM و خواندن مجدد آن
Writing string into RAM and reading back
SMBIOS
SMBIOS
مقدمه
Introduction
جدول نقطه ورود SMBIOS
SMBIOS Entry Point Table
تجزیه جدول نقطه ورود
Parsing Entry Point Table
dmidecode
dmidecode
biosdecode
biosdecode
PCI
PCI
مقدمه
Introduction
فضای آدرس PCI
PCI Address Space
فضای پیکربندی PCI
PCI Configuration Space
چگونه به رجیسترها در فضای پیکربندی PCI دسترسی پیدا کنیم
How to access registers in PCI Configuration Space
lspci
lspci
دسترسی به فضای آدرس پیکربندی از ماژول کرنل لینوکس
Access configuration address space from Linux Kernel Module
ماژول کرنل لینوکس برای چاپ کل فضای آدرس
Linux Kernel Module to print full address space
چه اتفاقی میافتد وقتی سعی میکنیم دستگاهی را بخوانیم که وجود ندارد؟
What happens when we try to read a device which doesnt exist
رجیسترهای آدرس پایه (Base Address Registers)
Base Address Registers
آدرس پایه رجیستر آدرس پایه
Base Address of Base Address Register
مقدار حافظه مصرف شده توسط دستگاه PCI را پیدا کنید
Find out amount of memory consumed by PCI Device
مقدمهای بر PCI Express
Introduction to PCI Express
نمایش نظرات