البداية في برمجة الأجهزة Hardware وملفات Sys بإستخدام حزمة DriverStudio

عام 0 geek4arab
Spread the love

قد يعتقد الكثير أن البرمجة هي كتابة البرامج للمستخدم , وهي البرامج المرئية في الجهاز فقط
ولكن ماهو المجال الآخر في البرمجة والمسمى ( برمجة الأجهزة )
بإختصار هل سمعت عن تعاريف الأجهزة أو سواقات الأجهزة , وكيف تكتب ؟!
هل سألت نفسك كيف تبرمج الشبكات و بروتوكولات الشبكات و جدار النار والبروكسي و… وهل هي برامج exe أو dll
هل جربت يوم أن تبرمج كود يلتق صورة من كميرا الكمبيوتر , أو هل حاولت الوصول لمحتويات قرص DVD
هذا الموضوع سيفتح لك المجال في برمجة الأجهزة ,,,

لنفهم هذا النوع من البرمجة يجب أن نمر بمراحل ,, المرحلة الأولى
برمجة الأجهزة 16 بت : نظام التشغيل دوس
لو نرجع إلى أيام الشاشة السوداء للنظام الدوس , فإن الإجهزة كانت تبرمج عن طريق المقاطعات
وأتذكر أن أكثر دالة كانت تستخدم في ذلك الوقت الدالة int86 تجدها في ملف الهدر Dos.h أو BIOS.h
على حسب المترجم الذي تستخدم , المهم يمرر لهذة الدالة 3 بارمترات
الأول رقم المقاطعة , الثاني مسجلات المعالج المدخلة , الثالث مخرجات مسجلات المعالج
وتكون طريقة البرمجة بهذا الشكل :

// تعريف لمسجلات المعالج
union REGS in_reg , out_reg;

// القسم الأول للمسجلات العامة
in_reg.h.al
in_reg.h.ah
in_reg.h.bl
in_reg.h.bh
in_reg.h.cl
in_reg.h.ch
in_reg.h.dl
in_reg.h.dh

// القسم الثاني للمسجلات العامة
in_reg.x.ax
in_reg.x.bx
in_reg.x.cx
in_reg.x.dx
in_reg.x.si
in_reg.x.di
in_reg.x.flags
in_reg.x.cflag

// in_reg بعد ذلك تنفذ الدالة وتمثل مسجلات المعالج المدخلات
int86(0x10, &in_reg, &out_reg);


// out_reg بعد تنفيذ الدالة تعود مسجلات المعالج بالمخرجات

تذكر هذة الفكرة جيداً,,, إلى الآن تعتبر صلب الموضوع ,, المهم بعد ذلك ظهرت المرحلة 2

برمجة الأجهزة 32 بت : نظام التشغيل وندوز :
ظهر النظام وندوز بأنواع جديدة من الحماية ومستويات البرمجة وخاصة برمجة الأجهزة
وتغيرت دالة برمجة الأجهزة وتحولت في وندوز إلى الدالة
DeviceIoControl

هذة الدالة لها 8 بارمترات :
1- البارمتر الأول مقبض الجهاز , البارمتر الثاني معرف العملية أو رقم العملية
2- البارمتر الثالث يمثل مؤشر إلى البيانات المدخلة , البارمتر الرابع حجم البيانات المدخلة
3- البارمتر الخامس يمثل مؤشر إلى مخرجات الدالة , السادس يمثل حجم المخرجات
أما البارمتر السابع يمثل القيمة العائدة , والبارمتر الثامن يمثل التزامن (آخر بارمترين غير مهمين )

والآن هل لاحظت شيء غريب ؟! وهو أن الفكرة واحدة منذ أيام نظام الدوس ولم تتغير
الدالة int86 في نظام الدوس( لها رقم مقاطعة – لها مدخلات – لها مخرجات)
الدالة DeviceIoControl في وندوز ( لها مقبض جهاز ومعرف عملية – لها مدخلات- لها مخرجات)

والآن أمثلة بسيطة لنتعرف على دالة برمجة الأجهزة وهي DeviceIoControl
كتبت أمثلة كثيرة في مواضيع سابقة وسؤعيد بعضها , ,, مثال على قرائة بيانات جهاز
كما تلاحظ فإننا نريد قرائة بيانات أي أننا سنقوم بإستخدام مخرجات الدالة فقط , لاحظ الكود

// تعاربف
HANDLE hDevs=(HANDLE)-1;
DISK_GEOMETRY pF={0};
DWORD cb;

// إنشاء مقبض للجهاز من خلال تمرير إسمة
hDevs = CreateFile(“\\\\.\\C:”, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

// قرائة بيانات من خلال الجهاز
DeviceIoControl (hDevs, IOCTL_DISK_GET_DRIVE_GEOMETRY,
NULL, 0, &pF, sizeof(pF), &cb, NULL);

// بعد تنفيذ الدالة ستحمل البنية بالمعلومات
pF.BytesPerSector = عدد البايتات في كل قطاع
pF.SectorsPerTrack= عدد القطاعات في كل تجمع


بدئنا بإنشاء مقبض للجهاز وإسم الملف :C وهذا الإسم عبارة عن عن برنامج مقيم في الذاكرة
ويسمى برنامج للهاردوير وليس للمستخدم ( وهذا النوع من البرامج هو محور حديثنا )
هذا الإسم في الذاكرة يسمى رمز الجهاز ,, وهو يدل بدورة على معرف الجهاز ؟!
لاحظ هذا الجدول لرمز الأجهزة ومعرف الأجهزة :

// القرص الصلب
C: = “\\Device\\HarddiskVolume1”
D: = “\\Device\\HarddiskVolume2”

// القرص المضغوط – السي دي
F: = “\\Device\\CdRom0”

//المنافذ
COM1 = “\\Device\\Serial0”
LPT1 = “\\Device\\Parallel0

// الأجهازة الطرفية
DISPLAY1 = “\\Device\\Video0”
sysaudio = “\\Device\\sysaudio”
Scanner = “\\Device\\Scanner”
HCD0 = “\\Device\\USB0-0″

// الشبكات والبروتوكولات
Tcp =”\\Device\\Tcp”
Ip =”\\Device\\Ip”

بعد ذلك نستخدم الدالة DeviceIoControl ونمرر لها مقبض الجهاز ومعرف العملية
ويمثل معرف العملية IOCTL_DISK_GET_DRIVE_GEOMETRY وهو يساوي الرقم 70000
وتلاحظ أننا في قسم المدخلات كتبنا NULL و0 أي أننا لانريد إستخدام أي مدخلات
وكتبنا البنية في قسم المخرجات , وبعد تنفيذ الدالة سيتم كتابة المعلومات في محتويات البنية
——————–
ماسبق عبارة عن توضيح لطرق التعامل مع برامج الهاردوير وكيفية الإستفادة منها
ولكن كيف يتم كتابة برامج الهاردوير وتعاريف الأجهزة وهي الملفات ذات الإمتداد vxd , drv ,sys
أولاً : تحتاج لبيئة تطوير الأجهزة وتسمى DDK ولها أكثر من إصدار أحدثها DDK 2003
المهم أنظمة وندوز مي و 2000 فما فوق تقبل DDK 2000 وهذة رابط التحميل
http://www.vckbase.com/tools/drv/win2kddk.exe
أما عن نظام وندوز 98
http://www.vckbase.com/tools/drv/98ddk.exe

بعد أن تقوم بتثبيت بيئة التطوير , فإن الترجمة وبناء ملفات المعلومات inf و تسجيل الأجهزة
سيكون بشكل يدوي من خلال نظام الدوس ويتطلب خبرة وفهم لطريقة عمل سواقات الأجهزة
ولكن الجديد في عالم البرمجة مثل حزمة DriverStudio لا تتطلب أي خبرة وتقوم ببناء
الهيكل الأساسي بكل بساطة وبطريقة أسرع ووقت أقل ( وستكون الأمثلة على هذة الحزمة )
تجد نسخة من DriverStudio
http://www.vckbase.com/tools/drv/NuMega.DriverStudio.v2.5.RC1.ZIP
———————————————-
بعد أن تخزن الأدوات ,,, تابع المثال الأول >>>>
///////////////////////////////////////////////////////
في هذا المثال سنكتب الهيكل الأساسي لبرنامج نظام ,, بإستخدام الحزمة DriverStudio لنوفر الوقت
في البداية يجب أن تترجم عدة ماكتب أساسية لتوفير ال class الخاصة لبرمجة الأجهزة ,, تجدها في هذا المسار للنسخة 3.0
C:\Program Files\Compuware\SoftICE Driver Suite\DriverWorks\source

والمكاتب عبارة عن أكثر من مشروع ,, ما عليك إلى تشغيل الفيجول سي وإختيار المشروع VdwLibs.dsw
وقم بترجمتة بهذة الطريقة من قائمة Build ثم إختر Batch Build تظهر لك نافذة بها أنواع التعليمات
حدد ماتريد أو إختر الكل ثم إضغط Build إنتظر حتى يتم إنشاء كل المكاتب lib وبهذا نكون قد إنهيناء بناء المكاتب

والآن لاحظ السهولة في إنشاء ملف نظام أو سواقة جهاز ,, من قائمة Start إختر برامج
إختر الحزمة Compuware SoftICE Driver Suite بعد ذلك إختر تطوير Develop
الآن يوجد أكثر من برنامج , , الأول DDK Build Settings تحدد في هذا البرنامج المسارات
إذا ثبت حزمة DDk أولاً بالتأكيد لا تحتاج كتابة شيء هنا لأن برنامج درايفر ستيديو يتعرف على المسارات تلقائياً
وإذا لم تثبت DDK قبل DriverStudio عدل في هذا البرنامج ,,, فقط إبحث عن المسارات

البرنامج الثاني وهو صانع الكود الأساسي لأي سواقة أو جهاز وهو البرنامج Driver Wizard
شاهد المثال التالي ,, شغل Driver Wizard وتابع ,,,

//

//

//

//

//

//

//

//

//

//
ولآن تجد المشروع والشفرة المصدرية في الملف التالي:
FirstDev.zip
وينقسم إلى قسمين
المشروع sys = الكود و سواقة الجهاز
المشروع exe = عبارة عن ملف تنفيذي يختبر السواقة ويمرر لها البارمترات

ملاحظ لتثبيت السواقة وتشغيلها ,, تجد في نفس الحزمة البرنامج EzDriverInstaller فقط إختر ملف inf
ليتم تثبيت سواقة النظام ,,,

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة