วิธีสร้างเคอร์เนล Android บน Windows 10

Appual's มีคำแนะนำที่ดีเกี่ยวกับการพัฒนา Android เช่นวิธีสร้าง ROM แบบกำหนดเองจาก Android Open Source Project - แต่คำแนะนำเหล่านี้มักจะมุ่งสู่สภาพแวดล้อมการสร้าง Linux บริสุทธิ์

ในคู่มือนี้เราจะแสดงวิธีสร้างเคอร์เนล Android บน Windows 10 - ใช่เราจะยังคงใช้สภาพแวดล้อมการสร้าง Linux แต่จะเป็นระบบย่อย 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-essential kernel-package libncurses5-dev bzip2
  10. เพื่อตรวจสอบว่ามีการติดตั้งการพึ่งพาทั้งหมดอย่างถูกต้องหรือไม่ให้พิมพ์ 'gcc' ในเทอร์มินัล (ไม่มีเครื่องหมายอัญประกาศ)
  11. หากติดตั้ง“ gcc” ไว้แล้วคุณจะเห็น“ gcc: ข้อผิดพลาดร้ายแรง: ไม่มีไฟล์อินพุต”
  12. ตอนนี้คุณสามารถพิมพ์ 'ทำ' ในเทอร์มินัล หากติดตั้ง“ make” แล้วคุณควรเห็น“ make: *** ไม่ระบุเป้าหมายและไม่พบ makefile หยุด."
  13. ประเภทถัดไป 'git' และหากติดตั้ง“ git” แล้วคุณควรเห็นคำสั่ง git พื้นฐาน
  14. ตอนนี้เราต้องการเครื่องมือบางอย่าง (มีหลายประเภทรวมถึง GCC, Linaro และเครื่องมือแบบกำหนดเองจำนวนหนึ่ง) อุปกรณ์บางอย่างอาจต้องใช้ Toolchains ที่แตกต่างกันเช่นบางเมล็ดอุปกรณ์จะทำการบู๊ตหรือคอมไพล์ด้วย GCC

สำหรับอุปกรณ์ ARM

เราจะใช้ GCC 4.7 สำหรับสิ่งนี้

  1. เปิดเทอร์มินัล Linux และพิมพ์: mkdir kernel
  2. ตอนนี้พิมพ์: cd kernel
  3. (ไม่จำเป็นต้องเป็น 'เคอร์เนล' นี่คือเพื่อความง่ายคุณสามารถตั้งชื่อได้ตามที่คุณต้องการ)
  4. ตอนนี้พิมพ์: git clone //android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7

สำหรับอุปกรณ์ ARM 64

คุณต้องมีคอมไพเลอร์เคอร์เนล 64 บิตสำหรับอุปกรณ์ ARM 64 เช่น aarch64

รับไฟล์ซอร์สสำหรับอุปกรณ์ของคุณ

นี่เป็นส่วนที่ยุ่งยากเนื่องจากคุณต้องหา GitHub repo ที่โฮสต์เคอร์เนลของคุณ แน่นอนคุณจะต้องค้นหามันเป็นไปได้มากว่ามันสามารถพบได้ในฟอรั่ม XDA

นี่คือตัวอย่างแหล่ง Git เคอร์เนล

ที่ด้านซ้ายบนคุณจะเห็น“ สาขา: เสร็จสมบูรณ์โดย xxxx”

เคอร์เนล / โปรเจ็กต์มีหลายเวอร์ชั่นซึ่งมักจะคั่นด้วย“ การทดสอบ”, “ เบต้า”, “ การวางจำหน่ายครั้งสุดท้าย” ฯลฯ

โดยทั่วไปโฟลเดอร์เคอร์เนลจะเป็นดังนี้:

  • / arch / arm / configs : ประกอบด้วยไฟล์ config ต่าง ๆ สำหรับอุปกรณ์เช่นผู้ว่าราชการจังหวัด ฯลฯ
  • / output / arch / arm / boot / : นี่คือตำแหน่งที่ zimage จะถูกเก็บไว้
  • build.sh : สคริปต์ที่จะทำให้กระบวนการสร้างง่ายขึ้น
  • /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2 : โดยทั่วไปนี่คือ toolchain ที่วางอยู่ในเคอร์เนลซอร์สดังนั้นจึงง่ายต่อการค้นหา

คุณจะต้องดาวน์โหลดซอร์สเคอร์เนลของคุณ

เปิดเทอร์มินัล Linux และตรวจสอบให้แน่ใจว่าคุณอยู่ในโฟลเดอร์เคอร์เนลที่คุณสร้างไว้ก่อนหน้านี้ (cd kernel)

จากนั้นพิมพ์เทอร์มินัล:“ git clone” URL ของเคอร์เนล github” -b“ ชื่อของสาขา”

ตัวอย่างเช่น:“ git clone //github.com/atxoxx/android_ke … samsung_msm8974 -b xenomTW”

สร้างเคอร์เนล

เพื่อให้ง่ายขึ้นคุณสามารถนำทางไปยังตำแหน่งในตัวสำรวจไฟล์ ควรเป็น / home / ID ผู้ใช้ / เคอร์เนล (หรือสิ่งที่คุณตั้งชื่อโฟลเดอร์เคอร์เนล)

คุณควรเห็นสองโฟลเดอร์ด้านในสำหรับ toolchain และเคอร์เนลซอร์ส เข้าไปในโฟลเดอร์ซอร์สเคอร์เนล

สำหรับอุปกรณ์ ARM

ในเทอร์มินัลพิมพ์คำสั่งต่อไปนี้:

 #! / bin / bash การส่งออก ARCH = การส่งออกแขน CROSS_COMPILE = เอาต์พุต mkdir ทำให้ -C $ (pwd) O = เอาต์พุต "ชื่อของ defconfig และตัวแปรหากจำเป็น" make -j4 -C $ (pwd) O = เอาต์พุต 

นี่คือภาพรวมของสิ่งที่คำสั่งเหล่านี้ทำเพื่อให้ง่ายขึ้นในอนาคต

  • #! / bin / bash: บอกให้สคริปต์รันในคำสั่งเชลล์
  • เอ็กซ์พอร์ต ARCH = arm: การกำหนดว่าสถาปัตยกรรมเคอร์เนลชนิดใดที่เป็น (ตัวอย่างเช่น arm64 เป็นต้น)
  • ส่งออก CROSS_COMPILE = : ค้นหาตำแหน่งที่ toolchain อยู่ มันจะต้องตรงกับเส้นทางที่แน่นอนและเส้นประในที่สุดก็จำเป็นจริง ๆ
  • เอาต์พุต mkdir: สิ่งนี้จะสร้างไดเร็กทอรีสำหรับการบันทึก zimage ที่คอมไพล์แล้ว
  • make -C $ (pwd) O = เอาต์พุต : การกำหนด defconfig สำหรับการรวบรวมเคอร์เนล
  • ทำให้ -j4 -C $ (pwd) O = เอาต์พุต : เมื่อกระบวนการสร้างเริ่มขึ้น -j # บอกว่าจะลองและคอมไพล์ได้เร็วแค่ไหน โดยทั่วไปคุณตั้งค่าหมายเลขนี้ตาม CPU ของคุณ ยกตัวอย่างเช่นการตั้งค่า -j32 บน CPU ของงบประมาณอาจทำให้เกิดความไม่เสถียรอย่างมาก
  • เอาท์พุท cp / arch / arm / boot / Image $ (pwd) / arch / arm / boot / zImage : นี่คือการย้ายภาพไปยังเส้นทางที่สอง

ตัวอย่างอื่น:

 #! / bin / bash export ARCH = การส่งออก arm CROSS_COMPILE = $ (pwd) /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2/bin/arm-cortex-linux-gnueabi- mkdir เอาต์พุต (pwd) O = เอาท์พุท msm8974_sec_defconfig VARIANT_DEFCONFIG = msm8974_sec_ks01_skt_defconfig SELINUX_DEFCONFIG = selinux_defconfig เอาท์พุท / arch / แขน / ภาพ / $ pwd / s / m / s 

สำหรับอุปกรณ์ ARM 64

 #! / bin / bash export ARCH = arm64 export CROSS_COMPILE = "path to toolchain ของคุณ" (ต้องจบด้วยบางอย่างเช่น "nameofarch-something-" -) mkdir เอาท์พุททำให้ -C $ (pwd) O = output "ชื่อของ defconfig และตัวแปรหากจำเป็น "make -j4 -C $ (pwd) O = เอาต์พุต 

สำหรับอุปกรณ์ Mediatek (MTK)

 #! / bin / bash export CROSS_COMPILE = "เส้นทางไปยัง toolchain ของคุณ" (ต้องจบด้วยบางอย่างเช่น "nameofarch-something-") export ARCH = arm ARCH_MTK_PLATFORM = make "ชื่อ defconfig และตัวแปรถ้าจำเป็น" make -j4 

เมื่อคุณทำขั้นตอนที่จำเป็นสำหรับสถาปัตยกรรมเคอร์เนลเสร็จแล้วคุณสามารถพิมพ์ในเทอร์มินัล: sudo bash build.sh

จากนั้นคุณจะป้อนรหัสผ่านผู้ใช้ของคุณและกระบวนการรวบรวมจะเริ่มขึ้น

อาจใช้เวลาสักครู่ แต่โดยทั่วไปจะใช้เวลาไม่นานการรวบรวมเคอร์เนลไม่เหมือนกับการรวบรวมรอม Android ทั้งหมด นี่ขึ้นอยู่กับ CPU จริง ๆ - ตัวอย่างเช่น AMD Phenom X4 3.4GHz พร้อม RAM 8GB ควรใช้เวลาประมาณ 10 นาทีในการรวบรวมตั้งแต่ต้นจนจบ

เมื่อเสร็จแล้วควรแจ้งให้คุณทราบด้วยข้อความเช่น“ zimage is ready”

อุปกรณ์ ARM และ ARM64

ไปที่“ / Output / arch / arm / boot /” เพื่อค้นหา zimage ของคุณ

อุปกรณ์ Mediatek

ไปที่“ / arch / arm / boot /” เพื่อค้นหา zimage ของคุณ

การสร้างเคอร์เนลไม่ทั้งหมดจะส่งผลให้ไฟล์ Zimage บางครั้งก็สามารถสร้างเป็นรูปแบบภาพอื่น ๆ

สิ่งสำคัญ: ถ้าคุณกำลังจะคอมไพล์อีกครั้งขอแนะนำให้คุณป้อนคำสั่งที่ทำให้สะอาดและทำให้ mrproper ก่อนที่คุณจะเริ่มกระบวนการรวบรวมอีกครั้ง

ทำให้ Kernel Boot

มีสองตัวเลือกให้คุณเลือก

คุณสามารถใช้เมธอด anykernel (ตามที่กำหนดโดย XDA user @ osm0sis ในเธรด XDA นี้) คุณควรอ่านบทช่วยสอนทั้งหมด แต่สรุปขั้นตอนเป็นดังนี้:

  1. วาง zImage ลงในรูท (dtb และ / หรือ dtbo ควรไปที่นี่ด้วยสำหรับอุปกรณ์ที่ต้องใช้ที่กำหนดเองแต่ละอันจะย้อนกลับไปที่เดิมหากไม่รวม
  2. วางไฟล์ ramdisk ที่ต้องการใน / ramdisk และโมดูลใน / modules (พร้อมพา ธ แบบเต็มเช่น / modules / system / lib / modules)
  3. วางไฟล์ปะแก้ที่ต้องการ (โดยทั่วไปคือไฟล์บางส่วนที่ไปพร้อมกับคำสั่ง) ใน / patch
  4. แก้ไข anykernel.sh เพื่อเพิ่มชื่อเคอร์เนลตำแหน่งพาร์ทิชันสำหรับบูตสิทธิ์สำหรับไฟล์ 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 ไม่จำเป็นต้องป้อนข้อมูลและเพียงแค่รวม zImage แยกก่อนหน้านี้อีกครั้งด้วย ramdisk ที่ดัดแปลงใหม่ซึ่งบรรจุโดยใช้ข้อมูลรูปภาพต้นฉบับทั้งหมด
  5. สคริปต์แบตช์การล้างข้อมูลจะรีเซ็ตโฟลเดอร์เป็นสถานะเริ่มต้นโดยลบไดเร็กทอรี split_img + ramdisk และไฟล์ ramdisk หรือรูปภาพที่บรรจุใหม่

ก่อนที่คุณจะกะพริบเคอร์เนลของคุณคุณควรสร้างการสำรองข้อมูล boot.img ของคุณจากนั้นแฟลชเคอร์เนลของคุณเพื่อดูว่าจะอนุญาตให้ระบบ Android ของคุณบูต

การเพิ่มคุณสมบัติให้เคอร์เนลของคุณ

การเพิ่มคุณสมบัติให้เคอร์เนลของคุณเป็นวิธีที่ยอดเยี่ยมในการเติมชีวิตชีวาให้กับมัน มีหลายสิ่งที่คุณสามารถปรับแต่งได้เช่นผู้ควบคุมซีพียู, ตัวกำหนดเวลา IO, โอเวอร์คล็อก GPU, การปรับปรุงเสียง ฯลฯ

ตัวอย่างสำหรับการเพิ่มผู้ว่าการอยู่ที่นี่ (ผู้ว่าราชการคนนี้มีชื่อรหัส Intellimm)

เราสามารถเห็นได้ใน 2 กล่องข้อความแรกที่ใน“ arch / arm / configs /”“ msm8974_sec_defconfig” และ“ cm_msm8974_sec_defconfig” ได้รับการแก้ไข

ระหว่างบรรทัดที่ 140 ถึง 141 ของไฟล์นี้ข้อความนี้ถูกเพิ่ม:“ CONFIG_CPU_FREQ_GOV_INTELLIMM = y”

(บรรทัดนี้ใช้สำหรับเปิดใช้งาน Intellimm เมื่อคุณรวบรวมเคอร์เนลของคุณ)

เทคนิคเดียวกันนี้ใช้กับกล่องข้อความอื่น ๆ (สิ่งที่ถูกเพิ่มและลบและที่ตั้ง)

คุณสามารถแก้ไขเพิ่มหรือลบไฟล์ได้หลายอย่างขึ้นอยู่กับคุณสมบัติที่คุณเพิ่ม

เพื่อที่จะสรุปมันคอมมิทให้คุณเห็นการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นและทุกอย่างอื่น!

เคล็ดลับและเทคนิคทั่วไป

วิธีเปลี่ยนชื่อเคอร์เนลและเวอร์ชั่น:

วิธีการง่าย ๆ :

แก้ไขบรรทัดนี้ในไฟล์ defconfig ของคุณ:

 "CONFIG_LOCALVERSION =" - "after - ใน defconfig ของคุณ 

ตัวอย่าง: CONFIG_LOCALVERSION =” - XenomTW-3.2.6″

วิธีการขั้นสูง:

นำทางไปยัง Makefile ในโฟลเดอร์รูทของเคอร์เนลต้นทางของคุณ

เพิ่มบรรทัดเหล่านี้:

 CONFIG_LOCALVERSION = "nameofyourkernel" LOCALVERSION = "versionofyourkernel" 

ห้ามแก้ไขบรรทัดเวอร์ชัน, PatchLevel, Sublevel หรือ Extraversion

ทางเลือกวิธีการ:

ไปที่สคริปต์ / mkcompile_h และเพิ่มบรรทัดเหล่านี้:

 LINUX_COMPILE_BY = "nameofyourchoice" LINUX_COMPILE_HOST = "nameofyourchoice" 

การแก้ปัญหา PATH:

หากคุณพบข้อผิดพลาด“ เส้นทางของคุณถูกต้องหรือไม่” ให้ลองวิธีนี้ในเทอร์มินัล Linux:

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

การเข้าถึงโฟลเดอร์ Ubuntu ของคุณจาก Windows 10

เส้นทางของคุณไปยัง Ubuntu โดยทั่วไปควรเป็น:

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

แต่คุณไม่ควรแก้ไขไฟล์โดยตรงจาก Windows เพราะโดยทั่วไปแล้วจะเป็นการละเมิดสิทธิ์ของไฟล์เหล่านั้น - คุณจะต้องรีเซ็ตสิทธิ์จากภายในเทอร์มินัล Linux

บทความที่น่าสนใจ