PDA

View Full Version : سوال: نوشتن برنامه برای سخت افزار



morteza147
یک شنبه 11 فروردین 1392, 11:39 صبح
سلام
ببخشین می خواستم ببینم که میشه با دلفی برای سخت افزار برنامه نوشت؟
اگه که میشه راهنمایی بفرمایید و اگه هم نمیشه میدونین با کدوم زبان میشه اینکار رو انجام داد

متشکرم

BORHAN TEC
یک شنبه 11 فروردین 1392, 11:43 صبح
سلام،
اول باید دقیقتر توضیح بدین که منظورتون از "برای سخت افزار" چیه؟
کار با پورتها یا ساخت درایور و یا سیستم های Embedded ؟

morteza147
یک شنبه 11 فروردین 1392, 11:46 صبح
ساخت درایور برای سخت افزار و رد و بدل کردن اطلاعات بین نرم افزار و سخت افزار

بهروز عباسی
یک شنبه 11 فروردین 1392, 11:55 صبح
ساخت درایور برای سخت افزار و رد و بدل کردن اطلاعات بین نرم افزار و سخت افزار
برای درایور نویسی باید C بلد باشی
Delphi با زبون خوش چنین کاری نمیکنه:لبخند: باید با Meerkat (http://www.mediafire.com/?hbhjorv8797k2ee)کار کنی که برای کارهایی کوچیک مناسبه Sampleهم داره.

morteza147
یک شنبه 11 فروردین 1392, 11:59 صبح
C++,C رو که بلدم اما نمیدونم از کجا شروع کنم از چه نرم افزاری برای اینکار استفاده کنم

بهروز عباسی
یک شنبه 11 فروردین 1392, 12:32 عصر
C++,C رو که بلدم اما نمیدونم از کجا شروع کنم از چه نرم افزاری برای اینکار استفاده کنم

اگه بخوای حرفه ای کار کنی باید چیزای بیشتری بدونی :
کتاب های زیر باید بخونی :


Programming.the.Microsoft.Windows.Driver.Model
Windows Internals


توی این وبلاگ توضیح داده
درایور نویسی (http://arcsinos.blogfa.com/post-181.aspx)

اینم یه فیلمه (http://arcsinos.blogfa.com/post-212.aspx)


اینم یه سایت عالی (http://www.osronline.com/)


اینم از من داشته باش
visualddk.sysprogs.org/ (http://barnamenevis.org/visualddk.sysprogs.org/)
کارتو راحت میکنه (توی VS)

Arcsinos
یک شنبه 11 فروردین 1392, 16:55 عصر
با عرض سلام، دوستان لینک فیلم تو وبلاگم مشکل داشت ولی لینک رو اصلاح کردم، بد نیست منم یه نظری بدم: به نظر من بهتره ابتدا کتاب های زیر رو به ترتیب بخونید تا خیلی خوب ویندوز و یا به قولی سیستم عامل رو درک کنید بعد از اون می تونید بزنید تو کار درایور نویسی :

اول کتاب Windows Internals Part1,Part2 که واقعا دل و روده ی ویندوز رو میریزه بیرون(حدود 800+700=1500 صفه)
دوم برای شروع درایور نویسی بهترین کتاب موجود Rootkit Arsenal هست که ساده ترین درایوری که میشه نوشت رو توضیح داده(حدود 1000 صفه)

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

MSK
دوشنبه 12 فروردین 1392, 21:54 عصر
روش استاندارد برای درایور نوشتن و کار با سخت‌افزار WDK (http://en.wikipedia.org/wiki/Windows_Driver_Kit) هستش که مبتنی بر windows api هست. یعنی با delphi هم میتونید با سخت‌افزار کار کنید. باید wdk رو از سایت مایکروسافت دانلود کنید و مثالهاش رو بخونید و خودتون اونها رو به delphi تبدیل کنید.
لینک دانلود wdk این هست: http://msdn.microsoft.com/en-us/library/windows/hardware/gg487428.aspx

بهروز عباسی
پنج شنبه 15 فروردین 1392, 12:15 عصر
هستش که مبتنی بر windows api هستتا جایی که من میدونم Windows API کلاً تویه user-mode هستن و برای Kernel-Mode از system callها استفاده میشه.

Windows Internals :


The Windows application programming interface (API) is the user-mode system programming
interface to the Windows operating system family.



یعنی با delphi هم میتونید با سخت‌افزار کار کنیدفکر نکنم WDK به Delphi ربطی داشته باشه ها...
توی Delphi با ایزارهایی مثل Meerkat (http://www.mediafire.com/?hbhjorv8797k2ee) باید کار کنید که اونا هم در پشت پرده خودشون با ابزارهای Microsoft کار میکنن چون دلفی فقط برنامه های User-Mode تولید میکنه و برای درایور نویسی باید برنامه هامون توی Kernel-Mode اجرا بشن ، خلاصه این که با Delphi (در حالت عادی) نمیشه

Ananas
پنج شنبه 15 فروردین 1392, 14:59 عصر
DirectX








.

بهروز عباسی
پنج شنبه 15 فروردین 1392, 18:05 عصر
DirectX








.
منظورت چیه؟:متعجب:
:متفکر:

MSK
پنج شنبه 29 فروردین 1392, 18:02 عصر
تا جایی که من میدونم Windows API کلاً تویه user-mode هستن و برای Kernel-Mode از system callها استفاده میشه.

Windows Internals :
فکر نکنم WDK به Delphi ربطی داشته باشه ها...
توی Delphi با ایزارهایی مثل Meerkat (http://www.mediafire.com/?hbhjorv8797k2ee) باید کار کنید که اونا هم در پشت پرده خودشون با ابزارهای Microsoft کار میکنن چون دلفی فقط برنامه های User-Mode تولید میکنه و برای درایور نویسی باید برنامه هامون توی Kernel-Mode اجرا بشن ، خلاصه این که با Delphi (در حالت عادی) نمیشه

بله؛ کاملا حق با شماست در مورد تفاوت api و system call . و من هم نمی دونستم که delphi امکان تولید برنامه های kernel-mode رو نداره.
اما شاید اینجا جا داشته باشه که بگم که من خودم با delphi کار نمی کنم و بجاش از FPC (http://freepascal.org/) استفاده می کنم که معادل متن باز delphi هست و اتفاقا امکان تولید باینری های kernel mode رو هم داره:


http://wiki.freepascal.org/Target_NativeNT
http://www.lazarus.freepascal.org/index.php?topic=10513.0

بنابر این شما هم شاید ترجیح بدید که از fpc استفاده کنید به همراه wdk.

بهروز عباسی
جمعه 03 خرداد 1392, 13:56 عصر
با اینکه مدتی از این بحث گذشته ، ولی امروز این مطلب رو دیدم جالب بود .

Can I write Windows drivers with Delphi 2010? (http://stackoverflow.com/questions/2263474/can-i-write-windows-drivers-with-delphi-2010?rq=1)

new delhpi coder
دوشنبه 20 خرداد 1392, 16:38 عصر
سلام به همه
اگه ممکنه کم در مورد تفاوت کرنل-مد و یوزر-مد توضیح بدید و این که چرا دلفی نمی تونه این کدهای کرنل مد رو خودش تولید کنه منظورم به صورت پیشفرضه.
(راستش شاید این سوال کلاً به این بخش مربوط نباشه ولی خب دیدم بحث خوب پیشرفته.)
با تشکر

بهروز عباسی
دوشنبه 20 خرداد 1392, 17:34 عصر
در مورد تفاوت کرنل-مد و یوزر-مد توضیح بدید

راستش مدتی قبل داشتم یه مقاله در این باره می نوشتم خوردم به امتحانات نصفه موند (می ذارم اینجا ) ولی فکر کنم بدک نباشه :(اگه بود شما ببخش:ناراحت:)

ممکن شما این کلمات را شنیده باشید ، Kernel-Mode یا User-Mode . آیا تا به حال به معنای آن هادر دنیای کامپیوتر و برنامه نویسی فکر کرده اید ؟ میدانید تفاوت آن ها چیست؟ کدام یک بهتر است ؟
هم Kernel-Mode و هم User-Mode سطوح دسترسی هستند که هر کدام ویژگی ها و اهداف خاص خود را دارند این سطوح هم به صورت نرم افزاری و هم به صورت سخت افزاری پیاده سازی می شوند، مهم ترین هدف ازایجاد این لایه ها ،امنیت است !بله امنیت.
شما در شکل زیر (شکل سمت چپ) ساختار لایه لایه ای را مشاهده میکنید که با رنگ ها و نوشته های مختلفی از هم جدا شده اند این لایه ها که از این پس آن ها را حلقه ( Ring )می نامیم همان سطوح دسترسی هستند که داخلی ترین حلقه همان Kernel-Mode و حلقه های بیرونی User-Mode است (شکل سمت راست).
105357

همانطور که گفته شد این حلقه ها به صورت سخت افزار ی هم پیاده سازی می شوند ،پردازنده های Intel چهار حلقه را در خود دارند ولی ویندوز به خاطر پشتیبانی از مدل های خاص سخت افزار که هر چهارحلقه را دارا نبوده اندتنها از دو حلقه در معماری خود استفاده میکند Ring 0 و Ring 3 در این معماری هر چه به حلقه های داخلی تر میرویم قدرت بیشتری در در کنترل سیستم و دسترسی به منابع داریم و هر چه از حلقههای داخلی دور تر می شویم قدرت کمتری در کنترل سیستم و دسترسی به منابع داریم.
در کرنل مد شما قادر به انجام هر کاری هستید (به عنوان برنامه نویس) چون امتیازی برابر باهسته سیستم عامل دارید ولی در یوزر مد چنین نیست ؛شما اجازه برقراری مستقیم ارتباط با سخت افزار را ندارید، اجازه دسترسی به حافظه فیزیکی RAM و تغییر آن را ندارید و بسیاری محدودیت های دیگر .
حتما تا اینجای کار متوجه تفاوت این دو حلقه شده اید !منظورم امتیازاتی است که در کنترل سیستم دارند ؛قدرت و امتیاز زیاد Ring0 و قدرت و امتیاز کم Ring3 و شکاف بین این دو این تفاوت همان امنیتی است که در ابتدا گفتم.
ویندوز با این کار بخش های مختلف خود را ایزوله کرده ،هسته و ماژول های حیاتی خود را در Ring0 با بالاترین سطح دستری قرار داده و برنامه های معمولی کاربران را در Ring3 با کمترین سطح دسترسی قرار داده. شاید با خود فکر کنید که این کارباعث افت کارایی برنامه های کاربر و درنتیجه افت بازدهی کل سیستم می شود.
فکر کنیم چنین است !
اگر شما به اندازه انگشتات دست خود برنامه نوشته باشید حتماً متوجه رفتار غیر عادی برخی برنامه ها و کرش شدنشان شده اید. اگر یک برنامه عادی مثلاً Notepad دچار مشکلات آدرس دهی یا ... شود در بدترین حالت
خوش کرش میکند و بسته می شود ولی سیستم عامل چه ؟آیا دچار مشکل می شود ؟؟؟ حالا فرض کنید هم برنامه Notepad و هم هسته ویندوز از یک ناحیه ادرس دهی مشترک در حافظه استفاده می کردند و خراب کاری های Notepad آدرس دهی های سیستم عامل را به هم میزد نتیجه چه بود ؟؟؟ هر بار برنامه ای خراب کاری می کرد سیستم عامل کتلت می شد :لبخند: .
اما به لطف به این ایزوله سازی چنین مشکلاتی رخ نم دهد پس اگر احتمال به افت کارایی هم بدهیم ارزشش را دارد.

نحوه پیاده سازی در ویندوز
در نسخه x86 ویندوز هر پردازش ) Process ( از یک حالت Flat memory در بازه 00000000 تا FFFFFFFF استفاده مکیند( 4گیگابایت میشه )که نمیه پایینی حافظه ؛یعنی از 00000000 تا 7FFFFFFF
(2گیگابایت)برای کد های User-Mode رزرو شده و نیمه بالایی یعنی از 00000000 تا FFFFFFFF هم برای کدهای Kernel-Mode رزور شده .
درواقع اون 4گیگابایت حافظه مجازی به دوبخش بالا و پایین تقسیم میشه (میشه برای افزایش کارایی سیستم های 32 بیتی فضای User-Mode رو تا 3 گیگابایت هم افزایش داد) هر چی تو نمیمه بالایی باشه Kernel-Mode و هرچی توی نمیمه پایینی حافظه باشه User-Mode میشه . و توی سیستم های 64 بیتی هم اون حافظه مجازی از 4گیگابایت به 8ترابایت افزایش پیدا کرده و بازم مثل 22 بیتی دو تکه شده و ... (البته این ساده ترین تعریف بود :متفکر:)و اگر پردازش قصد دست درازی به حافظه Kernel رو داشته باشه ازطرف سیستم عامل باهاش برخورد میشه :شیطان: .


اگه همون کتاب Microsoft Windows Internals رو بخونی به بهترین شکل توضیح داده.

چرا دلفی نمی تونه این کدهای کرنل مد رو خودش تولید کنه منظورم به صورت پیشفرضه.
لینکی که توی پست قبلیم دادم همینو توضیح داده .

امید وارم مطالب گفته شده مفید واقع بشه.
موفق باشید.