วิธีสร้างเคอร์เนล 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
- ใน Windows 10 ไปที่การตั้งค่า> อัปเดตและความปลอดภัย> สำหรับนักพัฒนา> เปิดใช้งานโหมดผู้พัฒนา
- ตอนนี้ไปที่แผงควบคุม> โปรแกรม> เปิดหรือปิดคุณสมบัติ Windows> เปิดใช้งานระบบย่อย Windows สำหรับ Linux
- รีบูทพีซีของคุณ
- เรียกใช้ระบบย่อย Linux และอนุญาตให้ผ่านกระบวนการดาวน์โหลด ตั้งรหัสผ่านและอย่าทำมันหาย
- ตอนนี้ไปที่ร้านแอพ Windows แล้วดาวน์โหลด Ubuntu
- เปิดตัว Ubuntu บนเดสก์ท็อป Windows 10 และจะขอชื่อผู้ใช้และรหัสผ่าน
- ใน Ubuntu ให้เปิดใช้งานเทอร์มินัลเนทีฟและพิมพ์คำสั่งต่อไปนี้: apt-get update
- สิ่งนี้จะดำเนินการปรับปรุง repos ทั้งหมดสำหรับแอพและการอ้างอิง
- ถัดไปในประเภทเทอร์มินัล: sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2
- เพื่อตรวจสอบว่ามีการติดตั้งการพึ่งพาทั้งหมดอย่างถูกต้องหรือไม่ให้พิมพ์ 'gcc' ในเทอร์มินัล (ไม่มีเครื่องหมายอัญประกาศ)
- หากติดตั้ง“ gcc” ไว้แล้วคุณจะเห็น“ gcc: ข้อผิดพลาดร้ายแรง: ไม่มีไฟล์อินพุต”
- ตอนนี้คุณสามารถพิมพ์ 'ทำ' ในเทอร์มินัล หากติดตั้ง“ make” แล้วคุณควรเห็น“ make: *** ไม่ระบุเป้าหมายและไม่พบ makefile หยุด."
- ประเภทถัดไป 'git' และหากติดตั้ง“ git” แล้วคุณควรเห็นคำสั่ง git พื้นฐาน
- ตอนนี้เราต้องการเครื่องมือบางอย่าง (มีหลายประเภทรวมถึง GCC, Linaro และเครื่องมือแบบกำหนดเองจำนวนหนึ่ง) อุปกรณ์บางอย่างอาจต้องใช้ Toolchains ที่แตกต่างกันเช่นบางเมล็ดอุปกรณ์จะทำการบู๊ตหรือคอมไพล์ด้วย GCC
สำหรับอุปกรณ์ ARM
เราจะใช้ GCC 4.7 สำหรับสิ่งนี้
- เปิดเทอร์มินัล Linux และพิมพ์: mkdir kernel
- ตอนนี้พิมพ์: cd kernel
- (ไม่จำเป็นต้องเป็น 'เคอร์เนล' นี่คือเพื่อความง่ายคุณสามารถตั้งชื่อได้ตามที่คุณต้องการ)
- ตอนนี้พิมพ์: 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 นี้) คุณควรอ่านบทช่วยสอนทั้งหมด แต่สรุปขั้นตอนเป็นดังนี้:
- วาง 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 ของคุณบูต
การเพิ่มคุณสมบัติให้เคอร์เนลของคุณ
การเพิ่มคุณสมบัติให้เคอร์เนลของคุณเป็นวิธีที่ยอดเยี่ยมในการเติมชีวิตชีวาให้กับมัน มีหลายสิ่งที่คุณสามารถปรับแต่งได้เช่นผู้ควบคุมซีพียู, ตัวกำหนดเวลา 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