كيفية بناء موديل بدون وجود ملفات السورس للكيرنل

السلام عليكم ورحمة الله وبركاته …

غالبا عندما تأتي لتعرف قطع العتاد الموجودة على جهازك من خلال لينوكس تتعرف جميعها من خلال لينوكس نفسه والأمور تسير كلها على احسن حال … لكن !!! … بعض الأحيان تجد جهاز عليه مثلا كارت شاشة غريب أو غير مثبت تعريفه داخل التوزيعة التي قمت بتنصيبها … ولهذا ستحتاج أكيد الى تركيب هذا العتاد بنفسك من خلال تركيب الموديول الخاص به الى داخل الكيرنل الذي تعمل عليه … بعض المرات هذا الموديول متوفر وبعض المرات غير متوفر لديك سوى السورس له … هنا يأتي السؤال كيف أقوم ببناء هذا الموديول للكيرنل الحالي من دون أن يكون لدي السورس للكيرنل ؟ هذا ما سأجيب عليه الآن …

أول شي سنحتاج الى تنصيب الكيرنل هيدرز 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

أتمنى الشرح مبسط وينال رضاكم وإعجابكم …
أخوكم [email protected]