السلام عليكم

اليوم موضوع عن كيفية إيجاد الموديلات الخاصة بالدريفارز و تنصيبها من خلال الكيرنل، و ذلك بسبب كثرة المواضيع التي تبحث عن تعريفات لكروتها و أجهزتها إلخ...

بداية يجب عليك أن تعرف أن هناك طريقة لليو إس بي و للبي سي أي
سنوضح الأن ما أعنيه

لنفرض أن لديك هارد ديسك خارجي أي يعمل من خلال USB

هذا يعني أن أسلوب التعامل معه سيكون مختلفا عن التعامل مع

Network Card مثلاَ

فلكل منهم أسلوب معين و حتى لا تحتار

كود:
lspci
هو لعرض كل الدرايفرز المتصلة عن طريق بي سي أي

كود:
lsusb
هو لعرض الدرايفرز التي تعمل من خلال اليو إس بي.


لينوكس يتعامل مع كل شيء على أنه ملف حتى الدرايفرز و كل شيء بالنسبة له هو ملف لذا ينبغي عليك أن تعرف مكان الملفاتالهامة فيه و مثلاً ملفات الدرايفرز و ملفات الهارد ديسك إلخ..

و حتى لا يختلط الأمر على البعض في هذه الجزئية فالمقصود بكلمة " كل شيء في لينوكس ملف" أي أن النظام يتعامل مع كل شيء على أنه ملف، يتعامل مع الإتصال على أنه ملف و مع الهاردديسك على أنه مجرد ملف و مع كل شيء على أنه مجرد ملف، هذا يعني أن ما تعتبره أنت مجرد إتصال يعتبره لينوكس ملفاً .


ما يهمنا الأن هو التحدث عن الدرايفرز و هو أساس الموضوع

الأن فلتفرض معي التالي :

قمت بشراء كارت صوت جديد بدلاً من القديم و التوزيعة لديك لم يكن بها تعريف كارت الصوت الجديد
للتوضيح أكثر..

أي توزيعة لينوكس بما فيها اللايف سي دي عند بداية تشغيلها تقوم بجمع معلومات عن الدرايفرز الخاصة بك لتقوم بتنصيبها مع الكيرنل و لذا تجد أن دعم العتاد أسهل بكثير من ويندوز و لكن بعد التنصيب لا تقوم التوزيعة بالبحث عن العتاد بنفسها بل يجب عليك أن تقوم بذلك بنفسك، لذا قد تقع يوما ما في هذا المأزق الحلول كثيرة و لربما تكتشف طريقة بنفسك و لتعتبر يومها أن هذا إنجاز كبير و شاركنا به !.

نعود لكارت الصوت الذي لم نجد الدرايفر الخاص به موجودا، فما العمل؟

الحل الأول :

أغلب التوزيعات الحديثة من توزيعات لينوكس تضع ملفاً أسمه "config.gz" و يوجد بهذا الملف الإعدادات الخاصة بالنواة و هذا الملف غالباً ما يكون في مجلد proc و للتأكد من وجوده قم بتنفيذ الأمر
كود:
Guru:~ # ls /proc/config.gz
/proc/config.gz
إن وجدت الملف فهذا يعني أن كل شيء على ما يرام حتى الأن، و إن لم تجده فلا تيأس فسنجده في مكان آخر و هذا المكان قد يختلف عن ما لدي و عن نفسي فقد وجدته في ملف /boot
كود:
Guru:~ # ls /boot/config*
/boot/config-2.6.16.13-4-smp
هذا ملف الإعدادات للكيرنل و الذي هو نفس محتويات الملف الموجود ب/proc/config.gz، الفرق هنا أن هذا الملف يمكن التعديل عليه و عمل إعادة تأهيل للنواة و هذا لا يهم الأن المهم هو أنك ستجد الملف في مكان من التاليين :
كود:
/proc

/boot
الأن ماذا بعد أن وجدت هذا الملف؟

الأن سأفرض أنّك تعمل بالLive cd أو بتوزيعة آخرى على الجهاز المطلوب تعريف كارت الصوت له، ستقوم الأن بنقل ملف إعدادات النواة إلى مجلد النواة لديك، و عندي أنا على سوزي يوجد في
كود:
Guru:~ # ls /usr/src/
linux linux-2.6.16.13-4 linux-2.6.16.13-4-obj linux-2.6.19.2 linux-obj packages
الأن كل ما عليك أن تختار النواة التي تريد العمل بها، و طبعاً يفضل أن تعمل دائماً على آخر إصدار و أنا أخترت أحدث إصدار للعمل به، الأن قم بتنفيذ الأوامر التالية :

كود:
uru:/usr/src # cd linux-2.6.19.2/
Guru:/usr/src/linux-2.6.19.2 # cp /boot/config-2.6.16.13-4-smp .config .
الذي قمنا به هو أني قمت بنقل ملف الإعدادات إلى مجلد النواة و قمت بتسميته بـ .config . و الأن ستقوم بعمل إعادة تأهيل للنواة أو بمعنى أوضح recompile .

كود:
make menuconfig
و من ثم سنقوم بإختيار "Load an Alternate Configuration File"

سيظهر لك التالي :
كود:
Enter the name of the configuration file you wish │
│ to load. Accept the name shown to restore the │
│ configuration you last retrieved. Leave blank to │
│ abort.
الأن قم بوضع أسم ملف الإعدادات ألا و هو : .config

و من ثم فلتكمل تنصيب النواة و يوجد مواضيع عديدة تشرح التنصيب أبحث عنها و سأذكر الخطوات دون تفصيل :

كود:
make "or make bzImage * "

make modules
make modules install
make install"**
"

* الأمر make bzImage هو الdefault للأجهزة التي تعمل بمعالج i386

** لا يعمل هذا الأمر في كل التوزيعات و يمكن الإستغناء عنه بنسخ ملف الimage و تعديل ملف menu.lst الخاص بgrub يدوياً، عموما كما قلت إن كنت لا تعرف كيف تنصب الكيرنل فهناك مواضيع عديدة تشرح ذلك.

الأن بعد الإنتهاء من الخطوات السابقة ستجد أن كارت الصوت سيعمل و التعريف الخاص به موجود، لكن هذه الخطوات قد تأخذ وقتاً طويلاً خاصة لمن لا يريد إعادة بناء النواة أو بناء موديلات عديدة، أو لا يوجد لديك مثلاً live cd أو أنك لم تجد ملف config للنواة أن أنك لا تروقك هذه الطريقة عموما! فما العمل؟ تابع معي.


الحل الثاني

الأن أنت تبحث عن حل لا يكلفك مشقّة البحث عن ملف النواة أو عن أخذ وقت طويل ما يقارب الساعة لبناء النواة، الحل يكمن في مدى معرفتك بملفات اللينوكس أو الunix-like عموماً.

على أي حال حتى لا تشعر بنوع من التعقيد أحفظ التالي :

ملف /sys/class هو الذي يوجد به كل الموديلات لكل أنواع الكروت و يوجد به تفصيلات عن الكروت فمثلاً ستجد ملف أسمه net و هو مسؤول عن كارت الشبكة، و ستجد ملف أسمه usb_devices و هو مسؤول عن اليو إس بي لديك و مثلاً ستجد ملف sound و هو مسؤول عن كارت الصوت و ما يتعلق به.

كل أسم من هذه الملفات يعبر عنه و عموماً ذكرت لك أهم الملفات التي ستحتاجها و في مثالنا اليوم فنحن نبحث عن كارت صوت إذن سيكون إستخدامنا لملف sound .
كود:
cd /sys/class/sound
الأن ستجد أمامك ملفات عديدة فلا تصدم من ذلك أو تشعر بالتعقيد مع قراءة هذه الورقة مرتين ستشعر أنه لا يوجد أي نوع من التعقيد، ما ظهر لي في توزيعتي هو التالي :
كود:
Guru:/sys/class/sound # ls
adsp audio controlC0 dsp mixer pcmC0D0c pcmC0D0p pcmC0D1c pcmC0D2c pcmC0D2p seq timer
لا إرادياً عندما رأيت كلمة audio و أنا أبحث عن كارت الصوت وجدت نفسي أدخل له ، أرأيت أن الأمر سهل؟ أنت ببساطة تبحث عن تعريف لكارت الصوت إذن فأنت تبحث عن audio، الأن ماذا بعد ذلك؟
كود:
Guru:/sys/class/sound # ls audio
dev device uevent
عند رؤيتك لكلمة device و رأيت أنها تشير إلى link آخر فهذا يعني أنك وصلت للمراد و أقتربت من النهاية الأن قم بتنفيذ الأمر التالي :
كود:
basename `readlink /sys/class/sound/audio/device/driver/module`
هذا الأمر قمنا بإستخدام basename معه وهي تعني أن تتجاهل كل الdirs و أن تظهر النهاية فقط، يعني على سبيل المثال لو قمت بتنفيذ
كود:
basename /root/linux-2.6.19.2
linux-2.6.19.2
ظهر لك أسم الملف الأخير دون الملف السابق له أو الذي هو بداخله، عموماً هذا الأمر لتسهيل عملية معرفة أسم الموديل فقط و يمكنك أن لا تستخدمه و إن كنت أحبذ ذلك ، الأن الأمر بات واضحاً فقد قمنا بعرض قيمة الsymbolic link من خلال الأمر readlink .

الأن نعود للأمر و ننفذه :
كود:
Guru:/sys/class/sound # basename `readlink /sys/class/sound/audio/device/driver/module`
snd_hda_intel
`
ما ظهر لك هو snd_hda_intel و هو أسم كارت الصوت الخاص بي أنا قد لا يظهر لك أنت طبعاً لأنك قد تكون مستخدماً لكارت صوت آخر.

الأن نذهب إلى مجلد الكيرنل لدينا :
كود:
/ cd usr/src/linux-2.6.19.2
و ننفذ الأمر التالي :
كود:
find -type f -name Makefile | xargs grep -i "snd_hda_intel"
ما سيظهر لك هو التالي :
كود:
Guru:/usr/src/linux-2.6.19.2 # find -type f -name Makefile | xargs grep -i "snd_hda_intel"
./sound/pci/hda/Makefile:obj-$(CONFIG_SND_HDA_INTEL) += snd-hda-intel.o snd-hda-codec.o
ما يهمنا هو ما بعد كلمة CONFIG_ و هو SND_HDA_INTEL و أخيراً! هذا هو أسم موديل كارت الصوت بالنواة، كان من الممكن أن لا يتطابق مع الأسم الذي ظهر لنا من خلال أمر "basename `readlink /sys/class/sound/audio/device/driver/module`" أي إنها مصادفة و يجب عليك أن تكمل الطريقة لأخرها مثلما فعلنا هنا.

ملاحظة في الأمر


find -type f -name Makefile | xargs grep -i "snd_hda_intel"

قمت بوضع snd_hda_intel، قم أنت بإستبدال هذه القيمة بما سيظهر لك من ناتج أمر " basename `readlink /sys/class/sound/audio/device/driver/module`"

الأن أوشكت على الإنتهاء قم بتنفيذ الأمر التالي في مجلد النواة

make menuconfig

و من ثم قم بالضغط على زر "/" أو حرف "ظ" لمن لديه كيبورد عربي، سيظهر لك نافذة للبحث الأن أكتب فيه ما ظهر لك ألا وهو

SND_HDA_INTEL

و أضغط Enter سيظهر لك التالي :
اقتباس:

│ Symbol: SND_HDA_INTEL [=m] │
│ Prompt: Intel HD Audio │
│ Defined at sound/pci/Kconfig:480 │
│ Depends on: !M68K && SOUND!=n && PCI && SND │
│ Location: │
│ -> Device Drivers │
│ -> Sound │
│ -> Advanced Linux Sound Architecture │
│ -> Advanced Linux Sound Architecture (SND [=m]) │
│ -> PCI devices │
│ Selects: SND_PCM
الأن أنت تعرف مكان هذا الدرايفر من خلال الخريطة التي أتضحت لك ، ستذهب على الترتيب إلى التالي :

1- Device Drivers
2- Sound
3- Advanced Linux Sound Architecture
4- Advanced Linux Sound Architecture (SND [=m])
5-PCI devices

ومن ثم ستجد Intel HD Audio قم بالتعليم عليها و كما تلاحظ معي فإن Intel HD Audio هو الأسم الذي ظهر بجوار كلمةPrompt و هو ما يجب أن تفعّله من النواة .

الأن فلتقم بحفظ ما فعلت في النواة و من ثم

كود:
make modules
make modules_install
make install
reboot -n
ثم أستمّتع بتشغيل الصوت لديك!



هناك طرق أخرى كما أشرت في بداية الموضوع يمكنك إكتشافها، كما أن هناك طرق لمن لا يمتلك أي توزيعة أخرى و يبحث عن موديل للنواة و سأتطرق لشرح هذا الأمر في موضوع منفصل و لكن في قسم الخوادم لأنه سيكون مفيداً أكثر لمدراء الخوادم، و حتى ذلك الحين أرجو أن لا تيّأسوا من قراءة الموضوع مراراً و تكراراً حتى تتقن الأمر، مع العلم بأن هذا المقال أو الورقة مهمة جداً لكل من يبحث عن كيفية التعامل بإحتراف مع الموديلات و النواة و هو للمحترفين بصفة خاصة و للجميع بصفة عامة .


يحق لأي شخص نقل الموضوع و تعديله و حتى يمكنه وضع أسمه مكان أسمي و فعل أي شيء يريده حتى لو قال أنه هو من أخترع النواة لا يهم كل ذلك.. المهم هو أن ينتشر الموضوع.


ملاحظة أخيرة: كل ما جاء في الموضوع إجتهاد شخصي من خلال التجربة على النواة و قراءة مستنداتها و هو موضوع لم أراه ولو حتى باللغة الإنجليزية .


و السلام ختام .