PDA

View Full Version : نوشتن درایور برای یک Network Adapter



shankimout
شنبه 06 بهمن 1386, 11:22 صبح
سلام ، قصد دارم یه network adapter بسازم ، و این دیوایس حتما یه درایور هم میخواد که اونو به سیستم عامل بشناسونه . قبل از اینکه بخواهم طراحی خود دستگاه رو انجام بدم میخوام ببینم نوشتن درایور چقدر طول میکشه ، چقدر اطلاعات میخواد ، و ...

به زبون C و پلاس پلاسش واقفم همچنین یکمی هم جنرال اسمبلی . برای ویندوز هم میخواهم بنویسم .

اول از اینکه من از درایور نویسی هیچ نمیدونم ، از کرنل یه چیزایی میدونم ولی فکر کنم کمه .

این دیوایس ما قراره یه سری اطلاعات رو از طریق یکی از باس های کامپیوتر (x86) بگیره و اونارو مثل یک نتورک اداپتر به سیستم عامل تحویل بده و سیستم عامل قادر باشه پرتکل های مختلف نرم افزاری رو روش پیاده کنه . مثل همین دیوایس های معمول .

---

چه منابع ( ترجیحا online ) معرفی میکنید ؟! اصولش ، مثال ها ، رفرنس ها و ....

و یکم هم توضیح بدید باید چه کنم .

مرسی

Inprise
شنبه 06 بهمن 1386, 11:50 صبح
باید با معماری کرنل ویندوز و توسعه برای کرنل آشنا باشی . باید با برنامه نویسی برای کرنل و محیط DDK آشنا باشی . برای هر دوی این موارد مستندات خوبی وجود داره . برای نوشتن هر چیزی که مرتبط با شبکه هست با ‌NDIS سر و کار داری که معماری پیچیده ای داره . برای نوشتن یک درایور کارت شبکه در واقع باید یک NDIS Miniport Driver بنویسی . برای شروع ، کتاب Windows Internal کنار دستت باشه چون دائما باید بهش مراجعه کنی ، کتابی مثل Programming the Microsoft Windows Driver Model هم برای شروع برنامه نویسی برای کرنل مفید هست . بگذریم از اینکه WDM دیگه قدیمی به حساب میاد و اگر دنبال یک کار خیلی جدی هستی باید WDF رو یاد بگیری ،‌ کتاب Developing Drivers With Windows Driver Foundation میتونه به درد بخوره ( البته من که دو سه سالی درگیر این ماجرا بودم کمی این کتاب رو ورق زدم ، سر درد گرفتم ، یا من سنم داره میره بالا یا دنیا خیلی تغییر کرده یا هر دو !‌ ) . برای محیط توسعه باید DDK‌ و ترجیحا VC 8 رو داشته باشی . اولی مجانی هست و دومی هم یک نسخه مجانی داره که حتی همون هم کافیه . بد نیست که بگردی و Driver Studio ی مرحوم Numega رو پیدا کنی . یک Visual Softice و یک سری مستندات فوق العاده عالی داره که حتما به دردت میخوره . میتونی برای دیباگ از همین ، و یا Windbg استفاده کنی ، و البته یا باید یک کامپیوتر دیگه داشته باشی یا تست و دیباگ رو روی Virtual Machine‌ انجام بدی . در مستندات و مثالهای DDK نحوهء تعامل با NDIS به اندازه کافی توضیح داده شده و مثال Miniport هم داره ( برای یک کارت شبکه با اتصال یو اس بی ) و در بستهء Driver Studio هم کتابخانه ای بنام DriverNetworks هست که NDIS رو کپسوله میکنه و زمان زیادی صرفه جوئی میشه ( البته توسعه اش متوقف شده ! مراقب این مسئله باش ) . برای مدیریت وقفه ها ترجیحا از اسمبلی استفاده کن و نه C . امیدوارم با همین کلید واژه ها مسیر درست رو پیدا کنی

shankimout
شنبه 06 بهمن 1386, 13:23 عصر
ممنون ، اطلاعات خوبی بود .

برای من فرقی نمیکنه که درایور توی یه محیط قدیمی ساخته بشه یا جدید ، مهم فقط کار کردن روی ویندوز XP هست . اصلا هم دنبال پرفورمنس هم نیستم ، فقط اینکه کاری رو که میخوام برام انجام بده .

به یه سری از تفاوت های اساسی user mode و kernel mode اشنا هستم . DDK رو هم دارم دانلود میکنم.


VC 8 یا VS 8 ?! فرقی نمیکنه چون هردو رو دارم .

Visual Softice دقیقا کاربردش چیه واسه کار ما ؟!

بین دو دیباگر که معرفی کردی کدوم ساده تر بهتر هست و خودت ترجیح میدی ؟!

VM مشکلی نیست .

----


مثال Miniport هم داره ( برای یک کارت شبکه با اتصال یو اس بی )

یحتمل کمک بزرگی میکنه .

--

خوب سوال هامو از همین جا شروع میکنم .

دسترسی به پورت های کامپیوتر در kernel mode مثل user mode هست ؟! مثلا پورت پارالل . منظور برنامه نویسیش نیست ، منظور تکنیک کار هست . مثلا تو user mode با یه سری api یا ... خیلی راحت پورت رو میخونیم ، ولی تصور میکنم که در kernel mode اینطور نیست و مستقیما باید با سخت افزار مربوطه در اتباط بود و در پایین ترین سطحش برنامه نوشت . ایا این تصور درسته ؟!

والا عرضم به حضورتون من یکم عجله دارم ، و شاید حداکثر 2 ماه برای این کار وقت دارم ، برای همینه که فشرده سوال میپرسم .

Inprise
شنبه 06 بهمن 1386, 15:13 عصر
بین دو دیباگر که معرفی کردی کدوم ساده تر بهتر هست و خودت ترجیح میدی ؟!

هر کدوم مزایای خودشون رو دارن . مسئله سادگی چندان اینجا مطرح نیست . منم از هر دو استفاده کردم .


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

بله .


من یکم عجله دارم ، و شاید حداکثر 2 ماه برای این کار وقت دارم

نوشتن چنین کدی ، و تست و عیب یابیش حتی برای کسی که کاملا مسلط هست زمان بیشتری لازم داره .

shankimout
شنبه 06 بهمن 1386, 16:17 عصر
لینکی از driver studio داری ؟!

Inprise
شنبه 06 بهمن 1386, 16:48 عصر
این پروژه متوقف شده و اون شرکت هم دیگه ادامه اش نمیده . روی سایتهای چینی و روسی پیداش میکنی . نگارش 3.2 رو بگیر ، یه Patch هم داره . دویست سیصد مگ باید باشه . ما اینجا لینک Warez مبادله نمیکنیم .

shankimout
شنبه 06 بهمن 1386, 17:36 عصر
گفتم شاید تو pm مبادله کنید .

shankimout
یک شنبه 07 بهمن 1386, 19:59 عصر
اولین چیزی که ناامید کننده هست اینه که ddk هیچ build environment درست درمونی نداره .

باید VS8 رو کانفیگ کنم براش ، اما چطور ؟! فایل تنظیمات اماده واسه انیتگریت کردن ddk تو vs8 نیست بدیم به خوردش تا رستگار بشه ؟!

shankimout
یک شنبه 07 بهمن 1386, 23:53 عصر
سمپل های مربوطه رو هم دیدم ، اونجور که فکر میکردم و میگیفتی پیچیده و سخت هم نیست ، فقط وقت لازم داره که باهاشون اشنا بشی .


باید VS8 رو کانفیگ کنم براش ، اما چطور ؟! فایل تنظیمات اماده واسه انیتگریت کردن ddk تو vs8 نیست بدیم به خوردش تا رستگار بشه ؟!

http://www.hollistech.com/Resources/ddkbuild/ddkbuild.htm

shankimout
سه شنبه 09 بهمن 1386, 13:53 عصر
خوب حالا ما یه درایور رو کامپایل کردیم ، چطور تستش کنیم ؟! یا کارکردش رو ببینیم ؟!

حتما ورژن checked ویندوز لازمه !؟ با این retail های معمولی نمیشه ؟!


--

ویندوز من الا win xp retail x64 هست . در ضمن درایوری هم که تولید شده x86 هست . چطور برای x64 درایور کامپایل کنم ؟! تو make file باید دست برد یا از build env مخصوصش استفاده کرد ؟! ( که همچین چیزی برای ویندوز xp تو پک ddk نیست . برای ویندوز 2003 محیط تولید درایور x64 داره اما برای xp نه ! )

چه کنم inprise خان ؟!

pluskid
دوشنبه 27 اسفند 1386, 19:27 عصر
باید با معماری کرنل ویندوز و توسعه برای کرنل آشنا باشی . باید با برنامه نویسی برای کرنل و محیط DDK آشنا باشی . برای هر دوی این موارد مستندات خوبی وجود داره . برای نوشتن هر چیزی که مرتبط با شبکه هست با ‌NDIS سر و کار داری که معماری پیچیده ای داره . برای نوشتن یک درایور کارت شبکه در واقع باید یک NDIS Miniport Driver بنویسی . برای شروع ، کتاب Windows Internal کنار دستت باشه چون دائما باید بهش مراجعه کنی ، کتابی مثل Programming the Microsoft Windows Driver Model هم برای شروع برنامه نویسی برای کرنل مفید هست . بگذریم از اینکه WDM دیگه قدیمی به حساب میاد و اگر دنبال یک کار خیلی جدی هستی باید WDF رو یاد بگیری ،‌ کتاب Developing Drivers With Windows Driver Foundation میتونه به درد بخوره ( البته من که دو سه سالی درگیر این ماجرا بودم کمی این کتاب رو ورق زدم ، سر درد گرفتم ، یا من سنم داره میره بالا یا دنیا خیلی تغییر کرده یا هر دو !‌ ) . برای محیط توسعه باید DDK‌ و ترجیحا VC 8 رو داشته باشی . اولی مجانی هست و دومی هم یک نسخه مجانی داره که حتی همون هم کافیه . بد نیست که بگردی و Driver Studio ی مرحوم Numega رو پیدا کنی . یک Visual Softice و یک سری مستندات فوق العاده عالی داره که حتما به دردت میخوره . میتونی برای دیباگ از همین ، و یا Windbg استفاده کنی ، و البته یا باید یک کامپیوتر دیگه داشته باشی یا تست و دیباگ رو روی Virtual Machine‌ انجام بدی . در مستندات و مثالهای DDK نحوهء تعامل با NDIS به اندازه کافی توضیح داده شده و مثال Miniport هم داره ( برای یک کارت شبکه با اتصال یو اس بی ) و در بستهء Driver Studio هم کتابخانه ای بنام DriverNetworks هست که NDIS رو کپسوله میکنه و زمان زیادی صرفه جوئی میشه ( البته توسعه اش متوقف شده ! مراقب این مسئله باش ) . برای مدیریت وقفه ها ترجیحا از اسمبلی استفاده کن و نه C . امیدوارم با همین کلید واژه ها مسیر درست رو پیدا کنی

سلام
ممکنه چندتا ازین منبع ها رو که گفتید لینکشو بگذارید یا بگید چه جوری میشه گیرشون آورد

Masoudxb
سه شنبه 28 اسفند 1386, 22:08 عصر
سلام
ممکنه چندتا ازین منبع ها رو که گفتید لینکشو بگذارید یا بگید چه جوری میشه گیرشون آورد


عزیز شما جستجو کردی و پیدا نکردی؟؟ اولا" میتونی Visual Studio و Numega Driver Studio رو از بازار تهیه کنی..
در مورد بقیه هم با یه جستجوی کوچک میتونی همه رو گیر بیاری ، اگه نتونستی ، خصوصی بهم بگو . چون در این انجمن نمیشه لینک این چنین فایلهایی رو علنی گذاشت.