آموزش درایورهای دستگاه لینوکس - ارتباط با سخت‌افزار - آخرین آپدیت

دانلود 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.
  • مدیریت حافظه مپ‌شده: request_mem_region, release_mem_region, ioremap, iounmap, ioread8, ioread16, ioread32, iowrite8, iowrite16, iowrite32.
  • مپ کردن و آنمپ کردن پورت‌های 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

Notes Notes

  • دانلودها Downloads

نمایش نظرات

آموزش درایورهای دستگاه لینوکس - ارتباط با سخت‌افزار
جزییات دوره
3 hours
84
Udemy (یودمی) Udemy (یودمی)
(آخرین آپدیت)
1,619
4.1 از 5
دارد
دارد
دارد
Linux Trainer
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Linux Trainer Linux Trainer

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