Android 15 (รุ่นทดลอง AOSP) และสูงกว่ารองรับการสร้าง Android ด้วยขนาดหน้า 16kB ตัวเลือกนี้ใช้หน่วยความจำเพิ่มเติมแต่ปรับปรุงประสิทธิภาพของระบบ
เพจขนาด 16kB รองรับเฉพาะเป้าหมาย arm64
ที่มีเคอร์เนลขนาด 16kB อย่างไรก็ตาม ยังมีตัวเลือกใน การจำลองพื้นที่ผู้ใช้ 16KB บน x86_64
สำหรับ Cuttlefish
หากต้องการเปิดใช้งานเพจขนาด 16kB ให้ตั้งค่าตัวเลือกการสร้างต่อไปนี้บนอุปกรณ์:
-
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
จะลบการกำหนดPAGE_SIZE
และทำให้ส่วนประกอบต่างๆ กำหนดขนาดหน้าในขณะรันไทม์ -
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
ซึ่งช่วยให้มั่นใจว่าไฟล์แพลตฟอร์ม ELF ถูกสร้างขึ้นด้วยการจัดตำแหน่ง 16kB ขนาดใหญ่เกินความจำเป็นนี้มีไว้สำหรับความเข้ากันได้ในอนาคต ด้วยการจัดตำแหน่ง ELF 16kB เคอร์เนลสามารถรองรับขนาดหน้า 4kB/16kB
ตรวจสอบแฟล็กบิลด์
หลังจากเลือกเป้าหมาย lunch
แล้ว ให้ตรวจสอบว่าตั้งค่าสถานะการสร้างอย่างถูกต้องในสภาพแวดล้อม:
$ source build/envsetup.sh
$ lunch target
$ get_build_var TARGET_MAX_PAGE_SIZE_SUPPORTED
16384
$ get_build_var TARGET_NO_BIONIC_PAGE_SIZE_MACRO
true
หากสองคำสั่งก่อนหน้านี้ส่งคืน 16384
และ true
ตามลำดับ แสดงว่าแฟล็ก build ของคุณได้รับการตั้งค่าอย่างถูกต้อง
สร้างไลบรารีที่ใช้ร่วมกันด้วยการจัดแนว ELF ขนาด 16kB
ในการสร้างไลบรารีที่ใช้ร่วมกันซึ่งเป็นส่วนหนึ่งของ โครงการ Android คุณจะต้องตั้งค่าสถานะการสร้างเหล่านี้ในเป้าหมายของคุณ:
-
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
-
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
หากต้องการสร้างไลบรารีที่ใช้ร่วมกันซึ่งไม่ได้เป็นส่วนหนึ่งของ โครงการ Android คุณต้องส่งแฟล็กตัวเชื่อมโยงนี้:
-Wl,-z,max-page-size=16384