السلام عليكم ورحمة الله وبركاته …
غالبا عندما تأتي لتعرف قطع العتاد الموجودة على جهازك من خلال لينوكس تتعرف جميعها من خلال لينوكس نفسه والأمور تسير كلها على احسن حال … لكن !!! … بعض الأحيان تجد جهاز عليه مثلا كارت شاشة غريب أو غير مثبت تعريفه داخل التوزيعة التي قمت بتنصيبها … ولهذا ستحتاج أكيد الى تركيب هذا العتاد بنفسك من خلال تركيب الموديول الخاص به الى داخل الكيرنل الذي تعمل عليه … بعض المرات هذا الموديول متوفر وبعض المرات غير متوفر لديك سوى السورس له … هنا يأتي السؤال كيف أقوم ببناء هذا الموديول للكيرنل الحالي من دون أن يكون لدي السورس للكيرنل ؟ هذا ما سأجيب عليه الآن …
أول شي سنحتاج الى تنصيب الكيرنل هيدرز kernel-headers الخاصة بنسخة الكيرنل التي لدينا … ويمكنك إيجادها من هنا أو من هنا طبعا لمن يسأل ما هي الـــ kernel-headers … فهي المكتبات التي تستعملها لغة سي c لتركيب وبناء الكيرنل وغيرها من البرامج … طبعا لمعرفة ما هي نسخة الكيرنل التي لديك نفذ التالي: uanme -r
الآن يجب أن نغيير ال Makefile الخاص بالموديول الذي تريد بناءه لكي يقوم بإستعمال مجلد البناء build الخاصة بالكيرنل الحالي … لمعرفة ما هو المجلد نفذ التالي: ls -d /lib/modules/$(uname -r)/build
هذا سيرجع لك المجلد الذي يحتوي على ملفات البناء الذي سنحتاجها في بناء الموديول module …
الآن لو نفرض إنه الملف الذي لديك هو driver.c … قم بفتح ملف ال Makefile بأي محرر ترغب به … بالنسبة لي دائما أفضل ال vi ولهذا سأكمل عليه كالتالي: vi Makefile
ومن ثم ضع فيه الكود التالي:
obj-m := driver.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
الأن أغلق وأحفظ الملف … وبعد ذلك نفذ الأمر make
ليقوم ببناء ال driver.ko الي هو الموديول المطلوب … الآن قمنا ببناء الكيرنل كل ما علينا فعله هو تركيبه على الكيرنل من خلال الأمر التالي: modprobe driver
أتمنى الشرح مبسط وينال رضاكم وإعجابكم …
أخوكم B!n@ry …