بسم الله الرحمن الرحيم
---------------------------
اولا أنا آسف جدا على العنوان التهكمى بس لو تلاحظوا القسم ده كله عناوين مكررة _مع احترامى للكلام المكتوب_ لأنه غرضه الإفادة
بس انا شايف من وجهة نظرى الشخصية ان القسم ده بدأت الأعضاء تعيد فى الكلام المكتوب بطريقة مملة _وياريت كلامى برده ميزعلش حد_ لانى عارف انهم غرضهم يفيدو المبتدئين .....
لكن بدأت الاعضاء تخلط بين مجرد عمل ست اب عادى للكيرنل من اى package manager سواء rpm او depian package او حتى slackware package وده مجرد ست اب عادى لكيرنل جديد وخلاص دون الاستفادة الفعلية من امكاناته ولا الحصول على سرعة إضافية وبين عمل compiling و configuration لل kernel
انا شايف ان موضوع عمل كومبايل للكيرنل اللى القسم معمول علشانه وبرده مع احترامى مقدمش اى فكرة غير ان العضو ياخد ملف ال config من الكيرنل القديم ويحطه فى الجديد ويعمل كومبايل وبكدة الموضوع بقة اسمه عمل كومبايل للكيرنل .....!!!!
ده مش تحامل طبعا على الأعضاء ... انا نفسى لما كنت بتسأل كنت بجاوب بنفس الاجابة دى بس المشكلة اللى ظهرت حاليا مع كثرة المواضيع هنا فى المنتدى هى انه مفيش مناقشة لوجه الاستفادة من تعديل الكيرنل وخصائصه وازالة الحاجات اللى ملهاش لازمة والدريفرات اللى انت مش محتاجها وال file systems اللى انت مش ناوى تشتغل عليها !!!
للأسف الموضوع ده شائك وصعب اى عضو يحاول شرحه لطوله .... ده غير انه اساسا عمل كومبايل للكيرنل محدش هيعلمه لحد ... عايز تعمل ادخل فى الموضوع واعمل وجرب وهتفشل عشر مرات فى الاول بس هتخرج من كل تجربة بمعلومات مفيدة .
أم أن الموضوع ان العضو اللى بيسأل عن عمل الكومبايل للكيرنل عايز حاجة تيك اواى ؟!!!! ولا هو اساسا فكر فيه ليه من البداية ؟
انت راجل بتتعلم لينيكس عايز تعمل كومبايل للكيرنل ولا عايز تعمله ست اب وتضحط على نفسك وتقول انا عملت compile ?!!!
ممكن حد يقوللى من فضلكم ايه فايدة ان كل الكلام مقصور على نقل ملف الكونفيج وعمل كومبايل للكيرنل الجديد .... طيب يبقى انا استفدت ايه ؟
مجرد سد لثغرات امنية دون تحسين فى الاداء .
وطبعا الرجالة مقصروش فى الشرح والتوضيح ولكن دون الدخول فى المنطقة الشائكة وهى عمل ال configuration
طيب العضو المحترم اللى بيتعلم لينيكس لانه real operating system هيخسر ايه لما الكبيرنل يعمله configuration و ميظبطش معاه ؟
الاجابة : الخسارة = 0
والاستفادة : لا حدود لها
توزيعات البوت لوودر فيها grub هتضيف الكيرنل اوتوماتيك للقايمة الرئيسية يعنى لو حصلت مشكلة هتقدر تدخل على الكيرنل القديم وحتى اللى البوت لودر فيها lilo محتاجة جهد بسيط جدا برده والامر فيها مش معضلة
كل الحكاية انك هتضيع وقت فى الكومبايل للكيرنل علشان تقرأ ال help وتبحث على النت وتشوف ايه اللى هتحتاجه او لا .
وعلى فكرة ممكن سيادتك وانت بتعمل كومبايل للكيرنل تعمل trick ظريفة جدا وسهلة وهى كالتالى :
من المعروف ان الكيرنل لما بيلاقى تعارض ما اثناء الكومبايل او خاصية قديمة انت مختارها هيظهرلك رسالة تحذير او error اصثناء الكومبايل والكومبايلبينج هيستمر عادى يبقى سيادتك اثناء ال compile تعمل
وفايدته يخلى اى error بدل ما يظهر على الشاشة وانت متقدرش تشوفه كويس انه يتخزن فى ملف error-file وطبعا بالتالى الأشياء اللى هتظهر على الشاشة هى فقط ال output العادى بدون اى errors ولكن بعد ما يخلص اتلكومبايبل هتقدر تشوف الاخطاء وتعرفها من الملف ده وأيضا تعرف اماكن الاخطاء وعلى الرغم من سهولة الطريقة الا انها فعالة بطريقة لا تتخيلها وتخبرك بالاخطاء و بالاختيارات اللى انت اخترتها وملهاش لازمة depricated choices
رسائل الخطا طبعا بتبين لك الخطأ فى اى section فى ال configuration وبعد ما تعدل الاخطاء دى هتلاقى الكيرنل بتاعك بيتعمل له comiplng smoothly يعنى تحس انه الشاشة مبيظهرش فيها اخطاء .
هناك بعض الملحوظات ممكن الناس اللى عندها خبرة تقدر تحطها للمبتدئين واعتقد الناس اتكلمت عن بعض الاشياء فى مواضيع سابقة منها على سبيل المثال لا الحصر :
حاول تخلى كل الدريفرات تعمل ك module ولو فيه عندك اختيار لدرايفر ك module او ك built in فى الكيرنل بستحسن انك تخليه module ليه ؟ علشان كل ما صغر حجم الكيرنل كل ما ازدادت سرعته وتحميله فى ال memory أسرع والاهم انه تخلص امن اى اى حاجة ملهاش لازمة واصبحت الموديولز مبنية خارجه يعنى مش جزء منه وبالتالى ال kernel نفسه ملهوش دعوة بال modules غير انه بيستدعيها ويشغلها وطبعا كل ما قلت ال builtins قلت ال bugs
مش معنى كلامى انك تروح وتخلى ال file systm اللى انت بتستخدمه يتبنى ك module .... لا طبعا دى حاجة لازم تتبنى ك built in ليه ؟
لان ده ال file system بتاع النظام او بمعنى آخر بتاع ال root partition اللى هتشتغل عليه واللى لازم يتعمله Mount قبل اى file system تانى فى ال fstab
طيب لما الكيرنل يبدأ يتحمل فى الذاكرة ويتولى مقاليد الأمور ويحاول يدخل على ال root partition فى البداية ويعمله mount علشان هو ده البارتيشن اللى عليه النظام ... طبعا مش هيقدر "مع العلم انه اساسا مش هيقدر يستخدم اى module فى العملية دى لان ال modules مش متحملة فى الذاكرة واساسا مكانها على ال root partition " تبقى الخلاصة ان ال file system لازم يبقى built in وإلا هتواجه مشاكل وطبعا الكيرنل مش هيشتغل
الابتعاد عن اى حاجة فيها debugging لانها هتكبر حجم الكيرنل على الفاضى وسيادتك مش شغال professional programmer او kernel developper علشان تستفاد من معلومات ال debugging لانها هتسبب كبر حجم الكيرنل بطريقة ملفتة مما يؤثر على اداؤه وفى النهاية لا انا ولا انت بنحتاجها .
برده هتلاقى قسم اسمه kernel hacking فى ال configuration متخترش منه حاجة يعنى بالعربى سيبك منه مش هيفيدك وطالما مش عارف ايه اهميته يبقى مش هيفيدك ... وتضمينه فى الكيرنل بيأثر على حجم وسرعة الكيرنل
معظم الاقسام سهلة بس اقسام networking وال device drivers هى اللى محتاج تركيز ,ولكن على حسب نوع اتصالك اضف الدرايفر مثلا ال connection بتاعك 10/100 mbs يبقى انت مش محتاج تضيف 1000 فى الكيرنل وبالنسبة لل device driver فقط الكارت الخاص بك يعنى لو realteak يبقى realteak فقط هو اللى تختاره ومتخترش حاجة تانية
مثلا واحد ال controller فى جهازه ATA/IDE ميجيش اثناء عمل ال configuration وميخترش ال controller مثلا serial ATA يبقى الكيرنل مش هيشتغل وهكذا ايضا إذا فعل العكس
واحد تانى بالنسبة لتعاريف الصوت حاطط درايفرات كتير وملهاش لازمة ... يبقى الافضل يشوف نوع كارت الصوت الخاص به ويضيفه ويشيل الباقى
واحد تانى قالك انا عندى كارت شاشة نيفيديا وتعريفه اللى فى الكيرنل مش كويس فقام بإلغاء كل الاختيارات من قسم VGA على امل انه هيقدر يعرف الكارت بالدرايفر الخاص به ونسى طبعا انه يتأكد ان ال module الخاص بالمنفذ agp تمت إضافته !!!!! وبالتالى تنتج مشاكل كبيرة جدا
واحد أخير قام بالعمل على خير وجه ولكنه نسى إضافة الموديولز الخاصة بال firewall
واحد بيضيف دعم لل ram اللى حجمها كبير 3 جيجا مثلا وهو رامته 256 ميجا بايتس يبقى ايه وجه الاستفادة ؟
واحد معندوش اى اجهزة usb وضايف دعم لل usb !!!!
فيه حاجة تانية برده ... هتلاقى الkernel فيه encoding للغات المستخدمة او اللى انت ناوى تخليه يدعمها حط دعم لل encoding اللى انت هتحتاجه وشيل بقية ال encodings يعنى مثلا cp-256 الخاص بالعربى و ال utf-8 وال iso8859-6 الخاص بالعربى انت هتحتاجه وكذلك هتحتاج الانجليزى iso-8859-1 ولو واحد فيكم مغرم بالمواقع الصينية والروسية مثلا وعايز الط يتعرض بطريقة كويسة لما يدخلها مينساش يحط الدعم فى الكيرنل واعتقد انه الدعم فيه اختيارين يا اما module يا لما built in
طبعا خلينا مع ال modules ا;ز حتى على الاقل حط ال encoding اللى استخدامك له قليل ك Module والاساسيين built in .... يعنى المسألة قياسية بالنسبة لك واستخدام ال modules زى ما احنا عارفين افضل .
فيه جزئية تانية بالنسبة للناس اللى بتواجه مشكلة تعاريف ازى الصوت مثلا وعايزة تضيفه بتضطر احيانا لعمل configuration اللكيرنل واضافة الموديول الخاص بالتعريف وغعادة كومبايل _للموديولز فقط_ وليس للكيرنل كله ولكن هناك أيضا طرق بسيطة لعمل كومبايل ل module بعينه بدون الحاجة لعمل كومبايلينج للموديولز كلها يعنى بمعنى اوضح لو عفت مكان الموديول فى السورس وحبيت تعمله كومبايل المفروض هتروح فى مساره وتعمل make module-name.c ولكن Make هيدى error لان make فى الحالة دى مش هيشتغل بينما لو عملت make modules وخلاص هتشتغل وتعمل compile لكل ال modules والحل بسيط وإن كنت مش متذكر الامر حاليا اللى يخليك تعمل compile لملف سورس خاص ب module دون الدخول فى عمل قثreconfiguration للكيرنل وطبعا بعد ما الامر ده يتنفذ بنجاح ممكن تعمل modprobe او Insmod للملف ال binary الناتج من الكومبايلينج .
هحاول إن شاء الله اجيب الامر ده واحطه هنا
طبعا اساسا لازم تاخد ملف الكونفيج القديم من الكيرنل القديم وتحطه فى الجديد قفى الاول وده شىء كويس لانه بيوفرلك بداية قوبة بمعنى ان الملف ده هيخليلك الكيرنل الجديد يشتغل يبقى لما تيجى تعدل فى الكيرنل الجديد يبقى انت بتحاول تشيل الزيادات ولو تركت بعض الاشياء الزائدة اللى انت مش فاهم معناها يبقى مش مشكلة اما لو بدأ تعمل configuration من الصفر فده مشكلة خاصة للمبتدئين لانهم هيقابلوا حاجات كتير مش فاهمين معناها فى الاول ولو تركوها فالموضوع مهدد بالفشل
المهم خلاثصة القول ان العملية ممارسة لا اكثر
ملاحظات
للاعضاء المبتدئين الكيرنل بعد ما يتعمل له COMPILE تلاقيه فى boot/ واسمه فى الغالب vmlinuz وهو ملف binary زيه زى اى برنامج معموله كومبايل
ال Modules الخاصة بالكيرنل 2.6 امتدادها ko والكيرنلات القديمة 2.4 الموديولز امتدادها o فقط
طبعا الموديولز بعد عمل compile لها وتحولها لملفات binary بيتم نسخها للمسار lib/modules/kernel-version/ وعلشان كدة لما يكون عندك مشكلة فى الموديولز وبتعمل كيرنل جديد او إعادة configuration للقديم ممكن تمسح الفولدر ده خالص وبعد ما ال compiling يتم هتلاقى عندك fresh copy من ال Modules
اساسا لو موضوع ال compile للكيرنل نجح المفروض تمسح فولدر السورس القديم وفولدر ال modules القديم طالما مفيش اى حاجة للكيرنل القديم وازالة الكيرنل نفسه من boot/ ومن ال boot menu
احيانا برده بيقابل الناس مشاكل مع تعريف كروت الشاشة من نوع نيفيديا على انظمة فيدورا انه يلاقى فيه تعارض والدرايفر مش راضى يتعمل له كومبال علشان يكون module وده نتيجة ان الكيرنل نفسه بيبقى قديم ومعموله كومبايل ب إصدارة معينة من gcc لانه طبعا احنا عارفين انه اثناء تستيب النسخة البرنامج المسؤول عن الت اب بينسخ كيرنل معمول له كومبايل جاهز لمساره الصحيح وطبعا معمول كومبايل فى الشركة وبإصدارة معينة من gcc او الكومبايلر وبالتالى انت ممكن يكون عندك على النظام نفسه اصدارة احدث من gcc غير اللى تم بها عمل كومبايل للكيرنل وبالتلى لما تحاول تعمل تستيب للدرايفر النظام بيدور على سورس الكيرنل وبيبنى موديول يعنى بيعمل كومبايل للدرايفر ويبنى موديول باستخدام النسخة الحالية من gcc على النظام ولما كان الكيرنل نفسه معموله كومبايل ب Gcc آخر فمعنى كدة انه هيحصل نعارض بين كل من ال modules القديمة وال module الجديد اللى هيتم بناؤه لانه هيتم بطريقة مختلفة قليلا والحل طبعا انك تعمل recompile للكيرنل وطبعا ده لما هيحصل هيحصل باستخدام gcc الحالى على النظام فلما تيجى تستب الدرايفر مش هيحصل تعارض لانه الكيرنل نفسه هيبقى مبنى باستخدام نفس ال Gcc على النظام
ملفات السورس الخاصة بالكيرنل مهمة فقط لو ناوى بعد كدة تستب اى درايفر زى نبيفيديا مثلا لانه بيحتاجها علشان يعمل بناء لل module غير كدة ممكن تحذفها بامان لانها هتبقى واخدة مساحة على الفاضى مع العلم انك لو مسحتها مش هتقدر تعمل كومبايل للكيرنل تانى
ملحوظة أخيرة :
الأعضاء مشكورين ذاكرين حاجات كتير من اللى مذكورة هنا ولكن الفكرة والدافع اللى خلانى اكتب الموضوع ان معظم اللى كتبوا عن الموضوع محاولوش يخوضوا التجربة نفسها ..... يعنى بيتكلموا نظريا فقط
يعنى مثلا مسألة ال file system كلنا عارفين انه لازم built in بس حد جرب يعملها ؟
حد جرب يشيل دعم ال reiserfs لو مش هيستخدمه ؟
حد شال ال debugging information من ال file system لانه شايف انه مش هيحتاجها ؟
حد بيشتكى ان الكيرنل بيقعد نص ساعة يعمل كومبايل مثلا وبياخد وقت فى حين انه ممكن ياخد عشر دقائق على الأكثر ؟!
كفاية كدة
وارجو ان يكون حد استفاد ويبدأ يخوض فى تجربة بناء الكيرنل
---------------------------
اولا أنا آسف جدا على العنوان التهكمى بس لو تلاحظوا القسم ده كله عناوين مكررة _مع احترامى للكلام المكتوب_ لأنه غرضه الإفادة
بس انا شايف من وجهة نظرى الشخصية ان القسم ده بدأت الأعضاء تعيد فى الكلام المكتوب بطريقة مملة _وياريت كلامى برده ميزعلش حد_ لانى عارف انهم غرضهم يفيدو المبتدئين .....
لكن بدأت الاعضاء تخلط بين مجرد عمل ست اب عادى للكيرنل من اى package manager سواء rpm او depian package او حتى slackware package وده مجرد ست اب عادى لكيرنل جديد وخلاص دون الاستفادة الفعلية من امكاناته ولا الحصول على سرعة إضافية وبين عمل compiling و configuration لل kernel
انا شايف ان موضوع عمل كومبايل للكيرنل اللى القسم معمول علشانه وبرده مع احترامى مقدمش اى فكرة غير ان العضو ياخد ملف ال config من الكيرنل القديم ويحطه فى الجديد ويعمل كومبايل وبكدة الموضوع بقة اسمه عمل كومبايل للكيرنل .....!!!!
ده مش تحامل طبعا على الأعضاء ... انا نفسى لما كنت بتسأل كنت بجاوب بنفس الاجابة دى بس المشكلة اللى ظهرت حاليا مع كثرة المواضيع هنا فى المنتدى هى انه مفيش مناقشة لوجه الاستفادة من تعديل الكيرنل وخصائصه وازالة الحاجات اللى ملهاش لازمة والدريفرات اللى انت مش محتاجها وال file systems اللى انت مش ناوى تشتغل عليها !!!
للأسف الموضوع ده شائك وصعب اى عضو يحاول شرحه لطوله .... ده غير انه اساسا عمل كومبايل للكيرنل محدش هيعلمه لحد ... عايز تعمل ادخل فى الموضوع واعمل وجرب وهتفشل عشر مرات فى الاول بس هتخرج من كل تجربة بمعلومات مفيدة .
أم أن الموضوع ان العضو اللى بيسأل عن عمل الكومبايل للكيرنل عايز حاجة تيك اواى ؟!!!! ولا هو اساسا فكر فيه ليه من البداية ؟
انت راجل بتتعلم لينيكس عايز تعمل كومبايل للكيرنل ولا عايز تعمله ست اب وتضحط على نفسك وتقول انا عملت compile ?!!!
_ انا لا اقصد احدا بهذه الجملة فقط اريد بها العموم والشمول __
مجرد سد لثغرات امنية دون تحسين فى الاداء .
وطبعا الرجالة مقصروش فى الشرح والتوضيح ولكن دون الدخول فى المنطقة الشائكة وهى عمل ال configuration
طيب العضو المحترم اللى بيتعلم لينيكس لانه real operating system هيخسر ايه لما الكبيرنل يعمله configuration و ميظبطش معاه ؟
الاجابة : الخسارة = 0
والاستفادة : لا حدود لها
توزيعات البوت لوودر فيها grub هتضيف الكيرنل اوتوماتيك للقايمة الرئيسية يعنى لو حصلت مشكلة هتقدر تدخل على الكيرنل القديم وحتى اللى البوت لودر فيها lilo محتاجة جهد بسيط جدا برده والامر فيها مش معضلة
كل الحكاية انك هتضيع وقت فى الكومبايل للكيرنل علشان تقرأ ال help وتبحث على النت وتشوف ايه اللى هتحتاجه او لا .
وعلى فكرة ممكن سيادتك وانت بتعمل كومبايل للكيرنل تعمل trick ظريفة جدا وسهلة وهى كالتالى :
من المعروف ان الكيرنل لما بيلاقى تعارض ما اثناء الكومبايل او خاصية قديمة انت مختارها هيظهرلك رسالة تحذير او error اصثناء الكومبايل والكومبايلبينج هيستمر عادى يبقى سيادتك اثناء ال compile تعمل
make 2> error-file
رسائل الخطا طبعا بتبين لك الخطأ فى اى section فى ال configuration وبعد ما تعدل الاخطاء دى هتلاقى الكيرنل بتاعك بيتعمل له comiplng smoothly يعنى تحس انه الشاشة مبيظهرش فيها اخطاء .
هناك بعض الملحوظات ممكن الناس اللى عندها خبرة تقدر تحطها للمبتدئين واعتقد الناس اتكلمت عن بعض الاشياء فى مواضيع سابقة منها على سبيل المثال لا الحصر :
حاول تخلى كل الدريفرات تعمل ك module ولو فيه عندك اختيار لدرايفر ك module او ك built in فى الكيرنل بستحسن انك تخليه module ليه ؟ علشان كل ما صغر حجم الكيرنل كل ما ازدادت سرعته وتحميله فى ال memory أسرع والاهم انه تخلص امن اى اى حاجة ملهاش لازمة واصبحت الموديولز مبنية خارجه يعنى مش جزء منه وبالتالى ال kernel نفسه ملهوش دعوة بال modules غير انه بيستدعيها ويشغلها وطبعا كل ما قلت ال builtins قلت ال bugs
مش معنى كلامى انك تروح وتخلى ال file systm اللى انت بتستخدمه يتبنى ك module .... لا طبعا دى حاجة لازم تتبنى ك built in ليه ؟
لان ده ال file system بتاع النظام او بمعنى آخر بتاع ال root partition اللى هتشتغل عليه واللى لازم يتعمله Mount قبل اى file system تانى فى ال fstab
طيب لما الكيرنل يبدأ يتحمل فى الذاكرة ويتولى مقاليد الأمور ويحاول يدخل على ال root partition فى البداية ويعمله mount علشان هو ده البارتيشن اللى عليه النظام ... طبعا مش هيقدر "مع العلم انه اساسا مش هيقدر يستخدم اى module فى العملية دى لان ال modules مش متحملة فى الذاكرة واساسا مكانها على ال root partition " تبقى الخلاصة ان ال file system لازم يبقى built in وإلا هتواجه مشاكل وطبعا الكيرنل مش هيشتغل
الابتعاد عن اى حاجة فيها debugging لانها هتكبر حجم الكيرنل على الفاضى وسيادتك مش شغال professional programmer او kernel developper علشان تستفاد من معلومات ال debugging لانها هتسبب كبر حجم الكيرنل بطريقة ملفتة مما يؤثر على اداؤه وفى النهاية لا انا ولا انت بنحتاجها .
برده هتلاقى قسم اسمه kernel hacking فى ال configuration متخترش منه حاجة يعنى بالعربى سيبك منه مش هيفيدك وطالما مش عارف ايه اهميته يبقى مش هيفيدك ... وتضمينه فى الكيرنل بيأثر على حجم وسرعة الكيرنل
معظم الاقسام سهلة بس اقسام networking وال device drivers هى اللى محتاج تركيز ,ولكن على حسب نوع اتصالك اضف الدرايفر مثلا ال connection بتاعك 10/100 mbs يبقى انت مش محتاج تضيف 1000 فى الكيرنل وبالنسبة لل device driver فقط الكارت الخاص بك يعنى لو realteak يبقى realteak فقط هو اللى تختاره ومتخترش حاجة تانية
مثلا واحد ال controller فى جهازه ATA/IDE ميجيش اثناء عمل ال configuration وميخترش ال controller مثلا serial ATA يبقى الكيرنل مش هيشتغل وهكذا ايضا إذا فعل العكس
واحد تانى بالنسبة لتعاريف الصوت حاطط درايفرات كتير وملهاش لازمة ... يبقى الافضل يشوف نوع كارت الصوت الخاص به ويضيفه ويشيل الباقى
واحد تانى قالك انا عندى كارت شاشة نيفيديا وتعريفه اللى فى الكيرنل مش كويس فقام بإلغاء كل الاختيارات من قسم VGA على امل انه هيقدر يعرف الكارت بالدرايفر الخاص به ونسى طبعا انه يتأكد ان ال module الخاص بالمنفذ agp تمت إضافته !!!!! وبالتالى تنتج مشاكل كبيرة جدا
واحد أخير قام بالعمل على خير وجه ولكنه نسى إضافة الموديولز الخاصة بال firewall
واحد بيضيف دعم لل ram اللى حجمها كبير 3 جيجا مثلا وهو رامته 256 ميجا بايتس يبقى ايه وجه الاستفادة ؟
واحد معندوش اى اجهزة usb وضايف دعم لل usb !!!!
فيه حاجة تانية برده ... هتلاقى الkernel فيه encoding للغات المستخدمة او اللى انت ناوى تخليه يدعمها حط دعم لل encoding اللى انت هتحتاجه وشيل بقية ال encodings يعنى مثلا cp-256 الخاص بالعربى و ال utf-8 وال iso8859-6 الخاص بالعربى انت هتحتاجه وكذلك هتحتاج الانجليزى iso-8859-1 ولو واحد فيكم مغرم بالمواقع الصينية والروسية مثلا وعايز الط يتعرض بطريقة كويسة لما يدخلها مينساش يحط الدعم فى الكيرنل واعتقد انه الدعم فيه اختيارين يا اما module يا لما built in
طبعا خلينا مع ال modules ا;ز حتى على الاقل حط ال encoding اللى استخدامك له قليل ك Module والاساسيين built in .... يعنى المسألة قياسية بالنسبة لك واستخدام ال modules زى ما احنا عارفين افضل .
فيه جزئية تانية بالنسبة للناس اللى بتواجه مشكلة تعاريف ازى الصوت مثلا وعايزة تضيفه بتضطر احيانا لعمل configuration اللكيرنل واضافة الموديول الخاص بالتعريف وغعادة كومبايل _للموديولز فقط_ وليس للكيرنل كله ولكن هناك أيضا طرق بسيطة لعمل كومبايل ل module بعينه بدون الحاجة لعمل كومبايلينج للموديولز كلها يعنى بمعنى اوضح لو عفت مكان الموديول فى السورس وحبيت تعمله كومبايل المفروض هتروح فى مساره وتعمل make module-name.c ولكن Make هيدى error لان make فى الحالة دى مش هيشتغل بينما لو عملت make modules وخلاص هتشتغل وتعمل compile لكل ال modules والحل بسيط وإن كنت مش متذكر الامر حاليا اللى يخليك تعمل compile لملف سورس خاص ب module دون الدخول فى عمل قثreconfiguration للكيرنل وطبعا بعد ما الامر ده يتنفذ بنجاح ممكن تعمل modprobe او Insmod للملف ال binary الناتج من الكومبايلينج .
هحاول إن شاء الله اجيب الامر ده واحطه هنا
طبعا اساسا لازم تاخد ملف الكونفيج القديم من الكيرنل القديم وتحطه فى الجديد قفى الاول وده شىء كويس لانه بيوفرلك بداية قوبة بمعنى ان الملف ده هيخليلك الكيرنل الجديد يشتغل يبقى لما تيجى تعدل فى الكيرنل الجديد يبقى انت بتحاول تشيل الزيادات ولو تركت بعض الاشياء الزائدة اللى انت مش فاهم معناها يبقى مش مشكلة اما لو بدأ تعمل configuration من الصفر فده مشكلة خاصة للمبتدئين لانهم هيقابلوا حاجات كتير مش فاهمين معناها فى الاول ولو تركوها فالموضوع مهدد بالفشل
المهم خلاثصة القول ان العملية ممارسة لا اكثر
ملاحظات
للاعضاء المبتدئين الكيرنل بعد ما يتعمل له COMPILE تلاقيه فى boot/ واسمه فى الغالب vmlinuz وهو ملف binary زيه زى اى برنامج معموله كومبايل
ال Modules الخاصة بالكيرنل 2.6 امتدادها ko والكيرنلات القديمة 2.4 الموديولز امتدادها o فقط
طبعا الموديولز بعد عمل compile لها وتحولها لملفات binary بيتم نسخها للمسار lib/modules/kernel-version/ وعلشان كدة لما يكون عندك مشكلة فى الموديولز وبتعمل كيرنل جديد او إعادة configuration للقديم ممكن تمسح الفولدر ده خالص وبعد ما ال compiling يتم هتلاقى عندك fresh copy من ال Modules
اساسا لو موضوع ال compile للكيرنل نجح المفروض تمسح فولدر السورس القديم وفولدر ال modules القديم طالما مفيش اى حاجة للكيرنل القديم وازالة الكيرنل نفسه من boot/ ومن ال boot menu
احيانا برده بيقابل الناس مشاكل مع تعريف كروت الشاشة من نوع نيفيديا على انظمة فيدورا انه يلاقى فيه تعارض والدرايفر مش راضى يتعمل له كومبال علشان يكون module وده نتيجة ان الكيرنل نفسه بيبقى قديم ومعموله كومبايل ب إصدارة معينة من gcc لانه طبعا احنا عارفين انه اثناء تستيب النسخة البرنامج المسؤول عن الت اب بينسخ كيرنل معمول له كومبايل جاهز لمساره الصحيح وطبعا معمول كومبايل فى الشركة وبإصدارة معينة من gcc او الكومبايلر وبالتالى انت ممكن يكون عندك على النظام نفسه اصدارة احدث من gcc غير اللى تم بها عمل كومبايل للكيرنل وبالتلى لما تحاول تعمل تستيب للدرايفر النظام بيدور على سورس الكيرنل وبيبنى موديول يعنى بيعمل كومبايل للدرايفر ويبنى موديول باستخدام النسخة الحالية من gcc على النظام ولما كان الكيرنل نفسه معموله كومبايل ب Gcc آخر فمعنى كدة انه هيحصل نعارض بين كل من ال modules القديمة وال module الجديد اللى هيتم بناؤه لانه هيتم بطريقة مختلفة قليلا والحل طبعا انك تعمل recompile للكيرنل وطبعا ده لما هيحصل هيحصل باستخدام gcc الحالى على النظام فلما تيجى تستب الدرايفر مش هيحصل تعارض لانه الكيرنل نفسه هيبقى مبنى باستخدام نفس ال Gcc على النظام
ملفات السورس الخاصة بالكيرنل مهمة فقط لو ناوى بعد كدة تستب اى درايفر زى نبيفيديا مثلا لانه بيحتاجها علشان يعمل بناء لل module غير كدة ممكن تحذفها بامان لانها هتبقى واخدة مساحة على الفاضى مع العلم انك لو مسحتها مش هتقدر تعمل كومبايل للكيرنل تانى
ملحوظة أخيرة :
الأعضاء مشكورين ذاكرين حاجات كتير من اللى مذكورة هنا ولكن الفكرة والدافع اللى خلانى اكتب الموضوع ان معظم اللى كتبوا عن الموضوع محاولوش يخوضوا التجربة نفسها ..... يعنى بيتكلموا نظريا فقط
يعنى مثلا مسألة ال file system كلنا عارفين انه لازم built in بس حد جرب يعملها ؟
حد جرب يشيل دعم ال reiserfs لو مش هيستخدمه ؟
حد شال ال debugging information من ال file system لانه شايف انه مش هيحتاجها ؟
حد بيشتكى ان الكيرنل بيقعد نص ساعة يعمل كومبايل مثلا وبياخد وقت فى حين انه ممكن ياخد عشر دقائق على الأكثر ؟!
كفاية كدة
وارجو ان يكون حد استفاد ويبدأ يخوض فى تجربة بناء الكيرنل
تعليق