ايران ويج

نسخه‌ی کامل: نوشتن درایور برای سخت افزار
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام کسی در باره ی نوشتن درایور چیزی میدونه یا بلده.
اگه بلدید یا اطلاعاتی دارید کمک کنید.Smile
برای PC ؟ چه سیستم عاملی؟
برای ویندوز 7 می خوام
شما sdk ویندوز که شامل - Windows Driver Kit - WDKهست رو برای نسخه ی ویندوز 7 رو دانلود کنید، وبرای یک محیط IDE برای یکپارچه سازی و کمپایل از ویژوال استدیو استفاده کنید،بدون اون هم میتونید ولی بهتره که نصب کنید.
من WDK رو برای ویندوز 7 و همینطور برای ویندوز 8 دانلود کردم.
خودم هم با ویژوال استادیو کار میکنم با زبانهای c++ و c#.
من فقط نمیدونم کد نویسیمو از کجا شروع کنم و چطوری بنیویسم.
اول شما باید مدل درایور رو مشخص کنید

نمونه درایور ها درون پوشه ی محل نصب wdk هست

ولی من برای درایور نویسی از این روش استفاده میکنم:

1-استفاده از ماشین مجازی مجازی
2-استفاده از OSRLoader برای لود و تست درایور
3-استفاده از DbgView
4-استفاده ازNotepad برای کد نویسی (اگه از ویژوال استدیو استفاده میکنید این لازم نیست)


نمونه ی Hello World
1-یک فایل با این نام و پسوند بسازید makefile.def
2-فایل مذکور رو باز کنید و کد زیر رو اضافه کنید:
کد php:
!INCLUDE $(NTMAKEENV)\makefile.def 

3-یک فایل بدون پسوند به نام sources بسازید و کد زیر را درون آن قرار دهید
کد php:
TARGETNAME hello
TARGETPATH 
obj
TARGETTYPE 
DRIVER

INCLUDES   
= %BUILD%\inc
LIBS       
= %BUILD%\lib

SOURCES    
hello.

4-یک فایل با نام hello.c بسازید و کد زیر را درون آن قرار دهید:
کد php:
#include <ntddk.h>

VOID Unload(IN PDRIVER_OBJECT pDriverObject)
{
 
DbgPrint("Driver Unloaded.\n");
 return;
}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObjectIN PUNICODE_STRING regPath)
{
 
DbgPrint("Hello World!.\n");
 
pDriverObject->DriverUnload Unload;

 return 
STATUS_SUCCESS;


5-برای ساخت درایور مورد نظر از طریق cmd وارد مسیر نصب WDk شوید برای مثال :
کد php:
CD C:\WinDDK\7600.16385.1
6 -همه ی فایل هایی رو که ساختید رو درون یک پوشه به نام Hello بریزید و با دستور build درایور رو بسازید
7-مثال:
کد php:
C:\WinDDK\7600.16385.1\src\Drivers\hellobuild 
8-وقتی که درایور ساخته شد (hello.cat,hello.inf,hello.sys) برای ساین و اجرا از OSRLoader استفاده کنید و با DBGWIVE پیام "سلام دنیا"رو برای لود و آن لود رو ببینید


با استفاده از سیمبل های تولید شده میتونید درایورتون رو دیباگ کنید
http://www.iranled.com/forum/thread-24707.html

تاپیک بالا یکمی روش بحث شده

نتیجه گیری خودم. از اوضاع:
نوشتن داریور ، نباید قسمتی از پروژه باشه، بلکه خودش باید هدف جداباشه که باید دنبال بشه

اگه زمان کافی برای صرف کردن ندارین، بهتره سمت سخت افزار از آیسی هایی استفاده کنید که برای ارتباط با pc, درایور با مستندات و sdk, و... داشته باشه


(از اینجا به بعد ممکنه اطلاعاتی که میدم، اشتباه باشن)
درایور ها ۲ نوع بودن، یکی user mode, و دیگری kernel mode

یوزر مد، برای برنامه نویسیش میشد از یه سری کتاب خونه سطح بالاتر استفاده کرد که کار رو ساده تر میکرد، به شرطی که سخت افزار شما در دسته بندی های آماده ، جایگاهی داشت!

یعنی مثلا وبکم باشه، که یه کلاس آماده براش موجوده


تعامل با api ها در سمت user mode ، کمتر بودش نسبت به kernel mode

اگه قبلا با دات نت کد میزدید، به آشنایی با ساختار و کلیات api نیاز دارید

همونطورم که اشاره شد، visual studio فکر کنم از ورژن ۱۱ به بعد، skd دایور هارو پشتیبانی میکنه و لازم نیست یه ide دیگه کار کنید.

همینا بودن...
موفق باشین
خیلی ممنون از راهنمایی خییییلی عالی تون
ولی اگر مثلاً ما سخت افزاری داشته باشیم که بخواییم ازش اطلاعاتی بگیریم یا اطلاعاتی بدیم چطور میشه.
این کار هم مثل ،مثال بالا میشه؟
نه!!
این یک مثال فقط نمایش یک رشته به همراه بارگذاری یک نمونه درایور بود

برای ساخت درایور باید به این نکته توجه کرد که این درایور برای چه هدفی است!برای چه سیستم عاملی!و از چه پروتکلی استفاده میکنه. اساسا میخواییم در سطح کاربر درایور بنویسیم یافقطدر سطح کرنل؟ یا هردو؟ یعنی فقط یک درایور راه انداز باشه یا کاربر هم بتونه با هاش تبادل اطلاعات کنه؟

شما همه ی مثال هایی رو که لازم دارید در پوشه ی src در محل نصب wdk رو یکجا دارید!فقط کافی ست دستور build رو اجرا کنید تا درایور مربوطه کمپایل بشه.ودر قسمت user mode شما وقتی که پروژه رو کمپایل کنید یک exe.tester خواهید داشت که درایور رو کنترل میکنه و باهاش ارتباط برقرار میکنه (اطلاعات میفرسته یا میگیره)

به هرحال
یک آموزش ساخت درایور درست میکنم همچنین نحوه ی برقراری ارتباط از سطح کاربر به سطح کرنل
(۲۶-آذر-۱۳۹۳, ۱۹:۲۴:۳۸)salehjg نوشته است: [ -> ]http://www.iranled.com/forum/thread-24707.html

تاپیک بالا یکمی روش بحث شده

نتیجه گیری خودم. از اوضاع:
نوشتن داریور ، نباید قسمتی از پروژه باشه، بلکه خودش باید هدف جداباشه که باید دنبال بشه

اگه زمان کافی برای صرف کردن ندارین، بهتره سمت سخت افزار از آیسی هایی استفاده کنید که برای ارتباط با pc, درایور با مستندات و sdk, و... داشته باشه


(از اینجا به بعد ممکنه اطلاعاتی که میدم، اشتباه باشن)
درایور ها ۲ نوع بودن، یکی user mode, و دیگری kernel mode

یوزر مد، برای برنامه نویسیش میشد از یه سری کتاب خونه سطح بالاتر استفاده کرد که کار رو ساده تر میکرد، به شرطی که سخت افزار شما در دسته بندی های آماده ، جایگاهی داشت!

یعنی مثلا وبکم باشه، که یه کلاس آماده براش موجوده


تعامل با api ها در سمت user mode ، کمتر بودش نسبت به kernel mode

اگه قبلا با دات نت کد میزدید، به آشنایی با ساختار و کلیات api نیاز دارید

همونطورم که اشاره شد، visual studio فکر کنم از ورژن ۱۱ به بعد، skd دایور هارو پشتیبانی میکنه و لازم نیست یه ide دیگه کار کنید.

همینا بودن...
موفق باشین

اساس کار همینه :)
کسایی که دیوایس درایور مینویسن معمولا کتابخانه رو هم خودشون مینویسن یا به قیمت بالایی میخرن(برای کارهای حرفه ای)معمولا زیاد از api های عمومی ویندوز استفاده نمیکنن،وهرتکنولوژی sdk خودشو داره.
دوست عزیز از راهنمایی بسیار مفیدتون خیلی ممنون
ببخشید خیلی دیر جواب دادم اینترنتم تموم شده بود
از راهنمایی تون استفاده می کنم
در مورد API ها هم اطلاعاتی دارم چون قبلاً با VB6.0 کار میکردم و از API هاش استفاده می کردم

خیلی ممنون از راهنماییت