Appual's มีคำแนะนำที่ดีบางประการเกี่ยวกับการพัฒนา Android เช่น How to Build a Custom 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
- ใน Windows 10 ให้ไปที่การตั้งค่า> การอัปเดตและความปลอดภัย> สำหรับนักพัฒนา> เปิดใช้งานโหมดนักพัฒนาซอฟต์แวร์
- ไปที่แผงควบคุม> โปรแกรม> เปิดหรือปิดคุณลักษณะของ Windows> เปิดใช้งานระบบย่อย Windows สำหรับ Linux
- รีบูตพีซีของคุณ
- เปิดระบบย่อย Linux และอนุญาตให้เข้าสู่กระบวนการดาวน์โหลด ตั้งรหัสผ่านแล้วอย่าทำหาย
- ไปที่ Windows app store แล้วดาวน์โหลด Ubuntu
- เปิด Ubuntu บนเดสก์ท็อป Windows 10 และจะขอชื่อผู้ใช้และรหัสผ่าน
- ใน Ubuntu ให้เปิดเทอร์มินัลดั้งเดิมแล้วพิมพ์คำสั่งต่อไปนี้:apt-get update
- การดำเนินการนี้จะดำเนินการอัปเดต repos ทั้งหมดสำหรับแอปและการอ้างอิง
- ถัดไปในประเภทเทอร์มินัล:sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2
- ในการตรวจสอบว่าการขึ้นต่อกันทั้งหมดได้รับการติดตั้งอย่างถูกต้องหรือไม่ ให้พิมพ์ 'gcc' ในเทอร์มินัล (ไม่มีเครื่องหมายคำพูด)
- หากติดตั้ง “gcc” แล้ว คุณจะเห็น “gcc :fatal error :no input file”
- ตอนนี้คุณสามารถพิมพ์ 'make' ในเทอร์มินัลได้ หากติดตั้ง "make" แล้ว คุณจะเห็น "make:*** ไม่ได้ระบุเป้าหมายและไม่พบ makefile หยุด"
- ประเภทถัดไป 'git' และ iff "git" ได้รับการติดตั้งแล้ว คุณควรเห็นคำสั่ง git พื้นฐานจำนวนมาก
- ตอนนี้ เราต้องการ toolchains (มีหลายประเภท รวมทั้ง GCC, Linaro และแบบกำหนดเองจำนวนหนึ่ง) อุปกรณ์บางอย่างอาจต้องใช้ toolchains ที่แตกต่างกัน ตัวอย่างเช่น ไม่ใช่ทุกอุปกรณ์ที่จะบู๊ตหรือคอมไพล์ด้วย GCC
สำหรับอุปกรณ์ ARM
เราจะใช้ GCC 4.7 สำหรับสิ่งนี้
- เปิดเทอร์มินัล Linux และพิมพ์:mkdir kernel
- ตอนนี้พิมพ์:cd kernel
- (ไม่จำเป็นต้องเป็น 'เคอร์เนล' นี่เป็นเพียงความเรียบง่าย คุณสามารถตั้งชื่ออะไรก็ได้ตามต้องการ)
- พิมพ์:git clone https://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 :ประกอบด้วยไฟล์กำหนดค่าต่างๆ สำหรับอุปกรณ์ เช่น Governor เป็นต้น
- /output/arch/arm/boot/ :นี่คือที่ที่ zimage จะถูกเก็บไว้
- build.sh :สคริปต์ที่จะทำให้ขั้นตอนการสร้างง่ายขึ้น
- /arm-cortex-linux-gnueabi-linaro_5.2-205.11-2 :โดยทั่วไปจะเป็น toolchain ที่วางอยู่ในเคอร์เนลซอร์ส ซึ่งทำให้ค้นหาได้ง่ายขึ้น
คุณจะต้องดาวน์โหลดแหล่งเคอร์เนลของคุณ
เปิดเทอร์มินัล Linux และตรวจสอบให้แน่ใจว่าคุณอยู่ในโฟลเดอร์เคอร์เนลที่คุณสร้างไว้ก่อนหน้านี้ (cd kernel)
จากนั้นพิมพ์เทอร์มินัล:“git clone “URL ของเคอร์เนล github” -b “ชื่อสาขา”
ตัวอย่างเช่น:“git clone https://github.com/atxxxx/android_ke…amsung_msm8974 -b xenomTW”
สร้างเคอร์เนล
เพื่อให้ง่ายขึ้น คุณสามารถนำทางไปยังตำแหน่งในตัวสำรวจไฟล์ ควรเป็น /home/user ID/kernel (หรืออะไรก็ตามที่คุณตั้งชื่อโฟลเดอร์เคอร์เนล)
คุณควรเห็นสองโฟลเดอร์ภายใน สำหรับ toolchain และแหล่งเคอร์เนล เข้าไปในโฟลเดอร์ต้นทางของเคอร์เนล
สำหรับอุปกรณ์ ARM
ในเทอร์มินัล พิมพ์คำสั่งต่อไปนี้:
#!/bin/bashexport ARCH=armexport CROSS_COMPILE=mkdir outputmake -C $(pwd) O=output "ชื่อของ defconfig และตัวแปรหากจำเป็น"make -j4 -C $(pwd) O=output
นี่คือภาพรวมของสิ่งที่คำสั่งเหล่านี้ทำ เพื่อทำให้สิ่งนี้ง่ายขึ้นในอนาคต
- #!/bin/bash: บอกให้สคริปต์ทำงานในคำสั่งเชลล์
- ส่งออก ARCH=arm: การกำหนดประเภทของสถาปัตยกรรมเคอร์เนล (เช่น arm64 เป็นต้น)
- ส่งออก CROSS_COMPILE= :ค้นหาว่า toolchain อยู่ที่ไหน ต้องตรงกับเส้นทางที่แน่นอน และเครื่องหมายขีดสุดท้ายบังคับจริงๆ
- ผลลัพธ์ mkdir: สิ่งนี้จะสร้างไดเร็กทอรีสำหรับบันทึก zimage ที่คอมไพล์แล้ว
- make -C $(pwd) O=output :กำหนด defconfig เพื่อเป็นแนวทางในการคอมไพล์เคอร์เนล
- make -j4 -C $(pwd) O=output :เมื่อกระบวนการสร้างเริ่มต้นขึ้น -j# จะบอกว่าพยายามรวบรวมและรวบรวมได้เร็วเพียงใด โดยปกติ คุณจะตั้งค่าตัวเลขนี้ตาม CPU ของคุณ ตัวอย่างเช่น การตั้งค่าบน -j32 บน CPU ราคาประหยัด อาจทำให้เกิดความไม่เสถียรอย่างมาก
- เอาต์พุต cp/arch/arm/boot/Image $(pwd)/arch/arm/boot/zImage :ใช้สำหรับย้ายรูปภาพไปยังเส้นทางที่สอง
อีกตัวอย่างหนึ่ง:
#!/bin/bashexport ARCH=armexport CROSS_COMPILE=$(pwd)/arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2/bin/arm-cortex-linux-gnueabi-mkdir outputmake -C $ (pwd) O=output msm8974_sec_defconfig VARIANT_DEFCONFIG=msm8974_sec_ks01_skt_defconfig SELINUX_DEFCONFIG=selinux_defconfigmake -j4 -C $(pwd) O=outputcp output/arch/arm/boot/Image $(pwd)/zarch/สำหรับอุปกรณ์ ARM 64
#!/bin/bashexport ARCH=arm64export CROSS_COMPILE="path to your toolchain" (ต้องลงท้ายด้วย "nameofarch-something-")mkdir outputmake -C $(pwd) O=output "ชื่อ defconfig และตัวแปรหากจำเป็น" make -j4 -C $(pwd) O=outputสำหรับอุปกรณ์ Mediatek (MTK)
#!/bin/bashexport CROSS_COMPILE="พาธไปยัง toolchain ของคุณ" (ต้องลงท้ายด้วย "nameofarch-something-")export ARCH=arm ARCH_MTK_PLATFORM=make "ชื่อ defconfig และตัวแปร ถ้าจำเป็น" make - j4เมื่อคุณทำตามขั้นตอนที่จำเป็นสำหรับสถาปัตยกรรมเคอร์เนลเสร็จแล้ว คุณสามารถพิมพ์เทอร์มินัล:sudo bash build.sh
จากนั้นคุณจะต้องป้อนรหัสผ่านผู้ใช้ของคุณและกระบวนการรวบรวมจะเริ่มขึ้น
อาจใช้เวลาสักครู่แต่โดยทั่วไปแล้วจะใช้เวลาไม่นาน การคอมไพล์เคอร์เนลไม่เหมือนกับการคอมไพล์ Android ROM ทั้งหมด สิ่งนี้ขึ้นอยู่กับ CPU จริงๆ ตัวอย่างเช่น AMD Phenom X4 3.4GHz พร้อม RAM 8GB ควรใช้เวลาประมาณ 10 นาทีในการรวบรวมตั้งแต่ต้นจนจบ
เมื่อเสร็จแล้ว ควรแจ้งให้คุณทราบด้วยข้อความเช่น “zimage พร้อม”
อุปกรณ์ ARM และ ARM64
ไปที่ “/Output/arch/arm/boot/” เพื่อค้นหา zimage ของคุณ
อุปกรณ์ Mediatek
ไปที่ “/arch/arm/boot/” เพื่อค้นหา zimage ของคุณ
ไม่ใช่ว่าการสร้างเคอร์เนลทั้งหมดจะส่งผลให้ไฟล์ Zimage บางครั้งสามารถสร้างเป็นรูปแบบภาพอื่นๆ ได้
สำคัญ:หากคุณกำลังจะคอมไพล์อีกครั้ง ขอแนะนำให้คุณป้อนคำสั่ง make clean และ make mrproper ก่อนที่คุณจะเริ่มกระบวนการคอมไพล์อีกครั้ง
การทำเคอร์เนลบูต
มีสองตัวเลือกให้คุณเลือก
คุณสามารถใช้เมธอด anykernel (ตามที่กำหนดโดยผู้ใช้ XDA @osm0sis ในเธรด XDA นี้) คุณควรอ่านบทช่วยสอนทั้งหมด แต่สรุปขั้นตอนมีดังนี้:
- วาง zImage ไว้ในรูท (dtb และ/หรือ dtbo ควรไปที่นี่สำหรับอุปกรณ์ที่ต้องการตัวกำหนดเอง แต่ละอันจะสำรองไปที่ต้นฉบับหากไม่ได้รวมไว้)
- วางไฟล์ ramdisk ที่จำเป็นใน /ramdisk และโมดูลใน /modules (พร้อมพาธแบบเต็ม เช่น /modules/system/lib/modules)
- วางไฟล์แพตช์ที่จำเป็น (โดยทั่วไปไฟล์บางส่วนที่ไปกับคำสั่ง) ใน /patch
- แก้ไข anykernel.sh เพื่อเพิ่มชื่อเคอร์เนลของคุณ ตำแหน่งพาร์ติชั่นสำหรับเริ่มระบบ การอนุญาตสำหรับไฟล์ ramdisk ที่รวมอยู่ และใช้เมธอดสำหรับการแก้ไข ramdisk ที่จำเป็น (หรืออาจวางไฟล์แบนเนอร์และ/หรือเวอร์ชันในรูทเพื่อแสดงสิ่งเหล่านี้ ขณะใช้แฟลช)
- `zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md *placeholder'
วิธีอื่นที่คุณมีคือการแตกไฟล์ boot.img จาก ROM เดียวกัน (เช่น CM, TouchWiz, EMUI เป็นต้น) และ Android เวอร์ชันเดียวกัน จากนั้นคุณจะสลับ Zimage อีกครั้ง นี่เป็นกระบวนการที่ซับซ้อนจริงๆ และคุณควรอ่านบทช่วยสอนที่แน่นอน แต่สรุปขั้นตอนคือ:
- เปิดเครื่องรูด
- ใช้บรรทัดคำสั่ง “unpackimg
” หรือเพียงแค่ลากและวางรูปภาพ การดำเนินการนี้จะแบ่งรูปภาพและแตกไฟล์ ramdisk ไปยังไดเร็กทอรีย่อย - เปลี่ยน ramdisk ตามที่คุณต้องการ
- สคริปต์แบตช์ repackimg ไม่ต้องการอินพุตใดๆ และเพียงรวม zImage ที่แยกไว้ก่อนหน้านี้เข้ากับ ramdisk ที่แก้ไขใหม่ที่แพ็กใหม่โดยใช้ข้อมูลรูปภาพดั้งเดิมทั้งหมด (ซึ่งถูกแยกและบันทึกด้วย)
- ชุดสคริปต์การล้างข้อมูลรีเซ็ตโฟลเดอร์เป็นสถานะเริ่มต้น โดยลบไดเร็กทอรี split_img+ramdisk และ ramdisk หรือไฟล์รูปภาพที่แพ็กใหม่
ก่อนที่คุณจะแฟลชเคอร์เนล คุณควรสร้างข้อมูลสำรองของสต็อก boot.img จากนั้นจึงแฟลชเคอร์เนลเพื่อดูว่าอนุญาตให้ระบบ Android บูตได้หรือไม่
การเพิ่มคุณสมบัติให้กับเคอร์เนลของคุณ
การเพิ่มคุณสมบัติให้กับเคอร์เนลของคุณเป็นวิธีที่ยอดเยี่ยมในการเพิ่มสีสัน มีหลายสิ่งที่คุณปรับแต่งได้ เช่น ผู้ควบคุม CPU, ตัวกำหนดตารางเวลา IO, การโอเวอร์คล็อก GPU, การปรับปรุงเสียง ฯลฯ
ตัวอย่างการเพิ่มผู้ว่าราชการอยู่ที่นี่ (ผู้ว่าราชการนี้มีชื่อรหัสว่า Intellimm)
เราจะเห็นได้ในกล่องข้อความ 2 กล่องแรกที่ได้รับการแก้ไขใน “arch/arm/configs/” “msm8974_sec_defconfig” และ “cm_msm8974_sec_defconfig”
ระหว่างบรรทัดที่ 140 และ 141 ของไฟล์นี้ มีการเพิ่มข้อความนี้ :“CONFIG_CPU_FREQ_GOV_INTELLIMM=y”
(บรรทัดนี้ใช้สำหรับเปิดใช้งาน Intellimm เมื่อคุณรวบรวมเคอร์เนล)เทคนิคเดียวกันนี้ใช้กับกล่องข้อความอื่นๆ (สิ่งที่เพิ่มและลบและเป็นตำแหน่ง)
ไฟล์มากหรือน้อยสามารถแก้ไข เพิ่มหรือลบได้ ทั้งนี้ขึ้นอยู่กับคุณสมบัติที่คุณเพิ่ม
สรุปได้ว่า Commit ให้คุณเห็นการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นและทุกอย่างอื่น ๆ!
เกร็ดความรู้ทั่วไป
วิธีเปลี่ยนชื่อเคอร์เนลและเวอร์ชัน:
วิธีง่ายๆ:
แก้ไขบรรทัดนี้ในไฟล์ defconfig ของคุณ:
"CONFIG_LOCALVERSION="-" หลัง - ใน defconfig ของคุณตัวอย่าง:CONFIG_LOCALVERSION=”-XenomTW-3.2.6″
วิธีการขั้นสูง:
ไปที่ Makefile ในโฟลเดอร์รูทของแหล่งเคอร์เนลของคุณ
เพิ่มบรรทัดเหล่านี้:
CONFIG_LOCALVERSION="nameofyourkernel"LOCALVERSION="versionofyourkernel"ห้ามแก้ไขบรรทัด Version, PatchLevel, Sublevel หรือ Extraversion
วิธีอื่น:
ไปที่ scripts/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