كيفية بناء Android Kernel على نظام التشغيل Windows 10

يحتوي Appual's على عدد قليل من الأدلة الرائعة حول تطوير نظام Android ، مثل كيفية إنشاء قرص مدمج مخصص من مشروع Android Open Source Project - لكن هذه الأدلة عادة ما تكون موجهة نحو بيئة بناء Linux خالصة.

في هذا الدليل ، سنعرض لك كيفية إنشاء نواة Android على نظام التشغيل Windows 10 - نعم ، سنظل نستخدم بيئة بناء Linux ، ولكن سيكون نظامًا لينوكس ضمن نظام التشغيل Windows 10. لذلك إذا كنت نظامًا Windows 10 المستخدم المهتم بالتطوير لنظام Android ، اتبع دليلنا بعناية.

في هذا الدليل ، سنتعلم بشكل خاص كيفية إنشاء نواة لأجهزة ARM و MediaTek ، وإضافة ميزات ، ونظرة عامة أساسية على استخدام Git.

المتطلبات

  • نظام التشغيل Windows 10 x64 (مع تحديث Fall Creator)

إعداد بيئة Linux

  1. في Windows 10 ، انتقل إلى الإعدادات> التحديث والأمان> للمطورين> تمكين وضع المطورين.
  2. انتقل الآن إلى لوحة التحكم> البرامج> تشغيل ميزات Windows أو إيقاف تشغيلها> تمكين نظام Windows الفرعي لنظام التشغيل Linux.
  3. إعادة تشغيل جهاز الكمبيوتر الخاص بك.
  4. قم بتشغيل نظام Linux الفرعي ، واتركه يمر بعملية التنزيل. قم بتعيين كلمة مرور ولا تفقدها.
  5. انتقل الآن إلى متجر تطبيقات Windows ، وقم بتنزيل Ubuntu.
  6. قم بتشغيل Ubuntu على سطح مكتب Windows 10 ، وسيطلب اسم مستخدم وكلمة مرور.
  7. في Ubuntu ، ابدأ تشغيل الجهاز الأصلي واكتب الأمر التالي: apt-get update
  8. سوف يستمر هذا في تحديث جميع عمليات repos للتطبيقات والتبعيات.
  9. التالي في نوع المحطة الطرفية: sudo apt-get install -y build-kernel-package libncurses5-dev bzip2
  10. من أجل التحقق من تثبيت جميع التبعيات بشكل صحيح ، اكتب "gcc" في الجهاز الطرفي (بدون علامات اقتباس).
  11. إذا كان "gcc" مثبتًا بالفعل ، فسترى "gcc: خطأ فادح: لا يوجد ملف إدخال"
  12. الآن يمكنك كتابة "جعل" في المحطة. إذا كان "make" مثبتًا بالفعل ، يجب أن تشاهد "make: *** لم يتم تحديد هدف ولم يتم العثور على ملف تعريف. توقف."
  13. اكتب "git" التالي ، وإذا كان "git" مثبتًا بالفعل ، فسترى مجموعة من أوامر git الأساسية.
  14. نحتاج الآن إلى بعض الأدوات (هناك عدة أنواع ، بما في ذلك دول مجلس التعاون الخليجي ولينارو وعدد قليل من الأدوات المخصصة). قد تتطلب بعض الأجهزة سلاسل أدوات مختلفة ، على سبيل المثال ، لن تقوم جميع نواة الجهاز بالتمهيد أو التجميع باستخدام GCC.

لأجهزة أرمينيا

سوف نستخدم GCC 4.7 لهذا.

  1. افتح محطة Linux واكتب: mkdir kernel
  2. اكتب الآن: cd kernel
  3. (ليس من الضروري أن يكون "kernel" ، فهذا من أجل البساطة ، يمكنك تسمية ما تريد).
  4. اكتب الآن: git clone //android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7

لأجهزة ARM 64

تحتاج إلى برنامج مترجم kernel 64 بت لأجهزة ARM 64 ، على سبيل المثال aarch64.

الحصول على الملفات المصدر لجهازك

هذا جزء صعب ، حيث تحتاج إلى العثور على GitHub repo الذي يستضيف مصدر kernel الخاص بك. ستحتاج بالطبع إلى البحث عنها ، على الأرجح يمكن العثور عليها في منتديات XDA.

هنا مثال على مصدر نواة بوابة.

في الجانب العلوي الأيسر ، سترى "الفرع: مكتمل بواسطة xxxx".

هناك إصدارات مختلفة من kernel / project ، مفصولة عادةً بـ "Testing" ، "Beta" ، "Final Release" ، إلخ.

عادة ما تكون مجلدات kernel كما يلي:

  • / arch / arm / configs : يحتوي هذا على ملفات تهيئة متنوعة للجهاز ، مثل المحافظين ، إلخ.
  • / output / arch / arm / boot / : هذا هو المكان الذي سيتم فيه تخزين zimage.
  • build.sh : برنامج نصي من شأنه تبسيط عملية البناء.
  • /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2 : هذا هو عادةً سلسلة أدوات توضع في مصدر kernel ، مما يسهل العثور عليه.

ستحتاج إلى تنزيل مصدر kernel الخاص بك.

افتح محطة Linux وتأكد من أنك في مجلد kernel الذي قمت بإنشائه مسبقًا (cd kernel).

ثم اكتب في المحطة الطرفية: "git clone" URL of github kernel "-b" اسم الفرع "

على سبيل المثال: "git clone //github.com/atxoxx/android_ke…amsung_msm8974 -b xenomTW"

بناء النواة

لتسهيل الأمر ، يمكنك التنقل إلى الموقع في مستكشف الملفات. يجب أن يكون / home / معرف المستخدم / kernel (أو ما سميت باسم مجلد kernel).

يجب أن تشاهد مجلدين في الداخل للحصول على toolchain ومصدر kernel. انتقل داخل مجلد مصدر kernel.

لأجهزة أرمينيا

في محطة ، اكتب الأوامر التالية:

 #! / bin / bash export ARCH = تصدير ذراع CROSS_COMPILE = إخراج mkdir - C $ (pwd) O = إخراج "اسم defconfig والمتغير إذا لزم الأمر" make -j4 -C $ (pwd) O = إخراج 

فيما يلي نظرة عامة على ما تفعله هذه الأوامر ، لتسهيل ذلك في المستقبل.

  • #! / bin / bash: يحكي البرنامج النصي لتشغيله في أمر shell
  • تصدير ARCH = ذراع: تحديد أي نوع بنية النواة هو (على سبيل المثال arm64 الخ)
  • تصدير CROSS_COMPILE = : حدد مكان وجود سلسلة الأدوات. يجب أن يتطابق مع المسار المحدد ، والشرطة في النهاية إلزامية حقًا.
  • إخراج mkdir: هذا بإنشاء دليل لحفظ zimage المترجمة
  • make -C $ (pwd) O = output : تعريف defconfig لتوجيه تجميع kernel.
  • make -j4 -C $ (pwd) O = الإخراج : عندما تبدأ عملية البناء ، يخبرك -j # بمدى سرعة المحاولة والتجميع. عادةً ما تقوم بتعيين هذا الرقم وفقًا لوحدة المعالجة المركزية الخاصة بك. قد يؤدي تعيين -j32 على وحدة المعالجة المركزية للميزانية ، على سبيل المثال ، إلى عدم استقرار كبير.
  • cp output / arch / arm / boot / Image $ (pwd) / arch / arm / boot / zImage : هذا لنقل الصورة إلى المسار الثاني.

مثال آخر:

 #! / bin / bash export ARCH = تصدير ذراع CROSS_COMPILE = $ (pwd) /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2/bin/arm-cortex-linux-gnueabi- جعل إخراج mkdir -C $ (pwd) O = إخراج msm8974_sec_defconfig VARIANT_DEFCONFIG = msm8974_sec_ks01_skt_defconfig SELINUX_DEFCONFIG = selinux_defCONFIG = selinux_defconfig make -j4 -C $ (pwd) 

لأجهزة ARM 64

 #! / bin / bash export ARCH = arm64 export CROSS_COMPILE = "المسار إلى سلسلة الأدوات الخاصة بك" (يجب أن تنتهي بشيء مثل "nameofarch-something-") إخراج mkdir يجعل -C $ (pwd) O = output "اسم defconfig والمتغير إذا لزم الأمر "جعل -J4 -C $ (pwd) O = الإخراج 

لأجهزة Mediatek (MTK)

 #! / bin / bash export CROSS_COMPILE = "المسار إلى سلسلة الأدوات الخاصة بك" (يجب أن ينتهي بشيء مثل "nameofarch-something-") export ARCH = arm ARCH_MTK_PLATFORM = اجعل "اسم defconfig ومتغيرًا إذا لزم الأمر" make -j4 

عندما تكمل الخطوات اللازمة لهندسة kernel الخاصة بك ، يمكنك الكتابة في المحطة الطرفية: sudo bash build.sh

ستقوم بعد ذلك بإدخال كلمة مرور المستخدم الخاصة بك ، وستبدأ عملية التحويل البرمجي.

قد يستغرق الأمر بعض الوقت ولكن عادةً ما لا يستغرق وقتًا طويلاً ، فإن تجميع النواة ليس مثل تجميع ROM Android بالكامل. هذا يعتمد فعلاً على وحدة المعالجة المركزية - على سبيل المثال ، يجب أن يستغرق ظهور AMD Phenom X4 3.4 جيجا هرتز مع 8 جيجابايت من ذاكرة الوصول العشوائي حوالي 10 دقائق من التجميع من البداية إلى النهاية.

عند الانتهاء ، يجب أن تخطرك برسالة مثل "zimage جاهز".

أجهزة ARM و ARM64

انتقل إلى "/ الإخراج / القوس / الذراع / التمهيد /" للعثور على zimage الخاص بك.

أجهزة Mediatek

انتقل إلى "/ arch / arm / boot /" للعثور على zimage.

لن ينتج عن جميع بناءات kernel ملف Zimage ، ويمكن في بعض الأحيان أن يتم بناؤه كتنسيقات صور أخرى.

هام: إذا كنت تريد التحويل البرمجي مرة أخرى ، فمن المستحسن أن تدخل الأوامر لتنظيف وتجعل mrproper قبل أن تبدأ عملية الترجمة مرة أخرى.

صنع الحذاء النواة

هناك خياران لتختار.

يمكنك إما استخدام طريقة anykernel (كما هو محدد بواسطة مستخدم XDA @ osm0sis في سلسلة رسائل XDA هذه). يجب عليك قراءة البرنامج التعليمي بأكمله ، ولكن ملخص الخطوات هو كما يلي:

  1. ضع zImage في الجذر (يجب أن ينتقل dtb و / أو dtbo هنا أيضًا للأجهزة التي تتطلب أجهزة مخصصة ، كل منها سيعود إلى الأصل إن لم يكن مضمنًا)
  2. ضع أي ملفات ramdisk المطلوبة في / ramdisk والوحدات في / الوحدات النمطية (مع المسار الكامل مثل / modules / system / lib / modules)
  3. ضع أي ملفات تصحيح مطلوبة (عادةً ملفات جزئية تتوافق مع الأوامر) في / patch
  4. قم بتعديل anykernel.sh لإضافة اسم kernel الخاص بك ، وموقع قسم التمهيد ، وأذونات ملفات ramdisk المضمنة ، واستخدم طرقًا لأي تعديلات مطلوبة من ramdisk (اختياريًا ، ضع أيضًا ملفات بانر و / أو إصدار في الجذر لعرضها أثناء الفلاش)
  5. `zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md * placeholder`

الطريقة الأخرى المتاحة لديك هي تفريغ boot.img من نفس ROM (مثل CM ، TouchWiz ، EMUI ، وما إلى ذلك) ومن نفس إصدار Android. هل ثم مبادلة Zimage. مرة أخرى ، هذه عملية معقدة بالفعل ويجب عليك قراءة البرنامج التعليمي الدقيق ، ولكن ملخص الخطوات هو:

  1. بفك.
  2. إما استخدام سطر الأوامر "unpackimg" ، أو ببساطة سحب وإفلات الصورة. سيؤدي ذلك إلى تقسيم الصورة وإلغاء فك ramdisk إلى دليل فرعي.
  3. تغيير ramdisk كما تريد.
  4. لا يتطلب البرنامج النصي للدفعة repackimg أي إدخال ، ويعيد ببساطة إعادة تجميع الصورة المجزأة مسبقًا مع ramdisk المعدلة حديثًا باستخدام جميع معلومات الصورة الأصلية (التي تم تقسيمها وحفظها أيضًا).
  5. يقوم البرنامج النصي لتنظيف الدُفعات بإعادة تعيين المجلد إلى حالته الأولية ، وإزالة الدلائل split_img + ramdisk وأي ملفات ramdisk أو ملفات صور جديدة.

قبل أن تقوم بفلاش kernel ، يجب عليك إنشاء نسخة احتياطية من boot.img ، ثم وميض kernel الخاص بك لمعرفة ما إذا كان يسمح لنظام Android الخاص بك بالتشغيل أم لا.

إضافة ميزات إلى نواة الخاص بك

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

مثال على إضافة المحافظ هنا (يطلق على هذا المحافظ اسم Intellimm).

يمكننا أن نرى في المربعات النصية الأولى التي تم تعديلها في "arch / arm / configs /" "msm8974_sec_defconfig" و "cm_msm8974_sec_defconfig".

بين السطور 140 و 141 من هذه الملفات ، تمت إضافة هذا النص: "CONFIG_CPU_FREQ_GOV_INTELLIMM = y"

(هذا الخط مخصص لتمكين Intellimm عندما تقوم بتجميع kernel)

ينطبق نفس الأسلوب على مربعات النص الأخرى (ما تمت إضافته وحذفه وموقعه)

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

لتلخيص ذلك ، فالتزام يتيح لك رؤية كل التغييرات التي تم إجراؤها وكل شيء آخر!

نصائح عامة والخدع

كيفية تغيير اسم وإصدار kernel:

طريقة بسيطة:

تحرير هذا الخط في ملف defconfig الخاص بك:

 "CONFIG_LOCALVERSION =" - "بعد - في defconfig الخاص بك 

مثال: CONFIG_LOCALVERSION = "- XenomTW-3.2.6 ″

الأساليب المتقدمة:

انتقل إلى Makefile في المجلد الجذر لمصدر kernel الخاص بك.

أضف هذه السطور:

 CONFIG_LOCALVERSION = "nameofyourkernel" LOCALVERSION = "versionofyourkernel" 

لا تقم بتعديل الأسطر الإصدار أو PatchLevel أو المستوى الفرعي أو Extversion.

طريقة بديلة:

انتقل إلى البرامج النصية / mkcompile_h وأضف هذه الأسطر:

 LINUX_COMPILE_BY = "nameofyourchoice" LINUX_COMPILE_HOST = "nameofyourchoice" 

حل مشاكل PATH:

إذا واجهت الخطأ "هل المسار صحيح؟" ، فجرب ذلك في محطة Linux:

 "export PATH =" pathtotoolchainlocation "/ bin: $ PATH" 

الوصول إلى مجلدات Ubuntu الخاصة بك من Windows 10

عادة ما يكون طريقك إلى أوبونتو:

C: \ Users "NAME" \ AppData \ Local \ Packages \ CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc \ LocalState \ rootfs \ home

لكن لا يجب عليك تحرير الملفات مباشرة من Windows ، لأن هذا سيؤدي إلى كسر الأذونات على هذه الملفات - ستحتاج بعد ذلك إلى إعادة تعيين الأذونات من داخل Linux Linux.

مقالات مثيرة للاهتمام