การออกแบบภาพรวมของ VNDK

อิมเมจระบบสามารถใช้สแนปชอต VNDK ได้เพื่อระบุ VNDK ที่ถูกต้อง ไลบรารีไปยังอิมเมจของผู้ให้บริการแม้ว่าอิมเมจของระบบและของผู้ให้บริการจะสร้างจาก Android เวอร์ชันต่างๆ การสร้างสแนปชอต VNDK ต้องมีการจับภาพ ไลบรารี VNDK เป็นสแนปชอต และทำเครื่องหมายด้วยหมายเลขเวอร์ชัน รูปภาพผู้ให้บริการอาจลิงก์กับ VNDK เวอร์ชันเฉพาะที่ระบุ ABI ที่จำเป็น สำหรับโมดูลในรูปภาพของผู้ให้บริการ อย่างไรก็ตาม ภายใน VNDK เวอร์ชันเดียวกัน ไลบรารี VNDK ต้องเป็น ABI เสถียร

การออกแบบภาพรวมของ VNDK รวมวิธีการสำหรับ กำลังสร้าง ที่สร้างล่วงหน้าของสแนปชอต VNDK จากอิมเมจระบบปัจจุบันและ การติดตั้ง ไลบรารีที่สร้างไว้ล่วงหน้าเหล่านั้นลงในพาร์ติชันระบบของ Android เวอร์ชันใหม่

เกี่ยวกับไลบรารี VNDK

HIDL-HAL เปิดตัวใน Android 8.0 ให้คุณอัปเกรดแยกกันสำหรับพาร์ติชันระบบและผู้ให้บริการ ดองเวียดนาม กำหนดชุดไลบรารี (VNDK-core, VNDK-SP และ LL-NDK) ที่โค้ดของผู้ให้บริการสามารถ ลิงก์และบล็อกผู้ให้บริการไม่ให้ใช้ไลบรารีที่ไม่ได้อยู่ใน VNDK ตั้งค่า ด้วยเหตุนี้ คุณจึงสร้างและเรียกใช้อิมเมจผู้ให้บริการได้ หาก VNDK ที่เหมาะสม ชุดบนอิมเมจของระบบจะมีให้กับอิมเมจผู้ให้บริการ

แกน VNDK

ติดตั้งชุดไลบรารี VNDK-core ใน /system/lib[64]/vndk-${VER} และว่าง เฉพาะสำหรับกระบวนการของผู้ให้บริการที่มีระดับ API เท่ากับ ${VER} กระบวนการของระบบไม่สามารถใช้ไลบรารีเหล่านี้และจะต้อง ใช้ไลบรารีที่ติดตั้งใน /system/lib[64] แทน เพราะ ของข้อจำกัดเนมสเปซที่เข้มงวดสำหรับแต่ละกระบวนการ ไลบรารีแกน VNDK ปลอดภัยจากการโหลดแบบคู่

หากต้องการรวมไลบรารีไว้ใน VNDK-core ให้เพิ่มรายการต่อไปนี้ลงใน Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

ติดตั้งไลบรารี VNDK-SP ใน /system/lib[64]/vndk-sp-${VER} แล้ว และพร้อมใช้งานสำหรับกระบวนการของผู้ให้บริการและกระบวนการของระบบ (ผ่าน SP-HAL ที่ติดตั้งในพาร์ติชันผู้ให้บริการ) ไลบรารี VNDK-SP อาจเป็น แบบโหลดคู่

หากต้องการรวมคลังใน VNDK-SP ให้เพิ่มรายการต่อไปนี้ลงใน Android.bp

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

ติดตั้งไลบรารี LL-NDK ใน /system/lib[64] โมดูลของผู้ให้บริการ สามารถใช้ไลบรารีต้นขั้ว LL-NDK เพื่อเข้าถึงสัญลักษณ์ที่เลือกไว้ล่วงหน้าของ LL-NDK ห้องสมุด ไลบรารี LL-NDK ต้องเข้ากันได้แบบย้อนหลังและมี ABI แบบเสถียรเพื่อ ช่วยให้โมดูลผู้ให้บริการเวอร์ชันเก่าใช้ไลบรารี LL-NDK เวอร์ชันใหม่ได้ เนื่องด้วยลักษณะความมั่นคงของ ABI ของ LL-NDK ภาพรวม VNDK จึง ไม่จำเป็นต้องใส่ไลบรารี LL-NDK สำหรับรูปภาพเก่าของผู้ให้บริการ

เกี่ยวกับภาพรวม VNDK

Android 8.1 รวม VNDK ไลบรารีที่สร้างขึ้นจากซอร์สโค้ด อย่างไรก็ตาม สำหรับเวอร์ชันที่ใหม่กว่า Android จะต้องบันทึกเวอร์ชัน VNDK แต่ละเวอร์ชันเป็นภาพรวม และระบุเป็น สร้างล่วงหน้าเพื่อเปิดใช้การลิงก์ไปยังอิมเมจผู้ให้บริการเวอร์ชันเก่า

ตั้งแต่ Android 9 เป็นต้นไป Android เวอร์ชันใหม่จะ รวมสแนปชอตของไดเรกทอรี VNDK-core และ VNDK-SP อย่างน้อย 1 รายการสำหรับเวอร์ชันเก่า ในซอร์สโค้ด Android ในเวลาสร้าง สแนปชอตที่จําเป็นจะ ติดตั้งลงใน /system/lib[64]/vndk-${VER} และ /system/lib[64]/vndk-sp-${VER} (ไดเรกทอรีที่ใช้ได้โดย พาร์ติชันผู้ให้บริการ) โดยที่ ${VER} คือตัวแปรสตริงที่ แสดงชื่อเวอร์ชันของสแนปชอต VNDK

เนื่องจากไลบรารีสแนปชอต VNDK อาจแตกต่างกันไปในแต่ละเวอร์ชัน VNDK ดังนั้น VNDK สแนปชอตยังมีการกำหนดค่าเนมสเปซ Linker ที่ติดตั้งเป็น etc/ld.config.${VER}.txt, /etc/llndk.libraries.${VER}.txt และ /etc/vndksp.libraries.${VER}.txt

ตัวอย่าง: อัปเกรดระบบและผู้ให้บริการ รูปภาพ

ไม่ต้องมีสแนปชอต สิ่งที่สร้างโดยไม่มีการกำหนดค่าเพิ่มเติมสำหรับ VNDK

ตัวอย่าง: อัปเกรดอิมเมจระบบเท่านั้น

ต้องมีสแนปชอต VNDK และไฟล์การกำหนดค่าเนมสเปซ Linker สำหรับ อิมเมจผู้ให้บริการในอิมเมจระบบ ไฟล์การกำหนดค่าเนมสเปซ Linker มีการกำหนดค่าโดยอัตโนมัติเพื่อค้นหาไลบรารี VNDK ใน /system/lib[64]/vndk-${VER} และ /system/lib[64]/vndk-sp-${VER}

รูปที่ 1. การอัปเกรดระบบเท่านั้น

ตัวอย่าง: อัปเกรดอิมเมจระบบ การเปลี่ยนแปลงอิมเมจผู้ให้บริการเล็กน้อย

ระบบยังไม่รองรับการสร้างอิมเมจผู้ให้บริการในภาพรวม VNDK คุณจึง ต้องสร้างอิมเมจผู้ให้บริการแยกต่างหากด้วยซอร์สโค้ดเดิม อัปเกรดอิมเมจระบบตามที่อธิบายไว้ในตัวอย่างก่อนหน้านี้

สถาปัตยกรรมสแนปชอต VNDK

หากต้องการให้อิมเมจระบบ Android 9 ใช้งานได้กับ รูปภาพผู้ให้บริการ Android 8.1, สแนปชอต VNDK ที่ตรงกับ Android 8.1 ต้องมีรูปภาพผู้ให้บริการมาพร้อมกับ Android 9 อิมเมจระบบดังที่แสดงด้านล่าง

รูปที่ 2 สถาปัตยกรรมสแนปชอต VNDK

การออกแบบภาพรวม VNDK มีวิธีดังต่อไปนี้

  • การสร้างภาพรวมสำหรับ VNDK-core และ VNDK-SP ห้องสมุด Android 9 มีสคริปต์ สามารถใช้สร้างภาพรวมของบิลด์ VNDK ปัจจุบัน สคริปต์นี้รวมกลุ่มทั้งหมด ห้องสมุดใน /system/lib[64]/vndk-28 และ /system/lib[64]/vndk-sp-28 ที่สร้างขึ้นด้วย เป็นภาพรวม VNDK โดยที่ 28 คือ VNDK Android 9 สแนปชอตยังมี Linker ไฟล์การกำหนดค่าเนมสเปซ /etc/ld.config.28.txt /etc/llndk.libraries.28.txt และ /etc/vndksp.libraries.28.txt ระบบจะใช้สแนปชอตที่สร้างขึ้น ที่มี Android เวอร์ชันใหม่กว่า (เวอร์ชันสูงกว่า Android 9)
  • การติดตั้งไลบรารี VNDK-core และ VNDK-SP ที่สร้างไว้ล่วงหน้าจาก ภาพรวม ใน Android 9 สแนปชอต VNDK มี ชุดห้องสมุดที่ใช้ VNDK-core ที่สร้างไว้ล่วงหน้าและชุดของห้องสมุด VNDK-SP รวมทั้ง เป็นไฟล์การกำหนดค่าเนมสเปซของ Linker เมื่อคุณแสดงรายการ VNDK เวอร์ชันสแนปชอตที่จะติดตั้ง ณ เวลาที่สร้างการติดตั้งอิมเมจของระบบ ไลบรารีสแนปชอต VNDK ไปยัง /system/lib[64]/vndk-${VER} และ ไดเรกทอรี /system/lib[64]/vndk-sp-${VER} และ Linker ไฟล์การกำหนดค่าเนมสเปซสำหรับสแนปชอต VNDK เหล่านั้น ไดเรกทอรี /etc

การกำหนดเวอร์ชัน VNDK

Android แต่ละรุ่นมีสแนปชอต VNDK เพียงรายการเดียว และใช้เวอร์ชัน SDK เป็น เวอร์ชัน VNDK (ซึ่งหมายความว่าเวอร์ชัน VNDK มีจำนวนเต็ม เช่น 27 สำหรับ Android 8.1) เวอร์ชัน VNDK จะได้รับการแก้ไขเมื่อเวอร์ชัน Android คือ เผยแพร่แล้ว จัดเก็บเวอร์ชัน VNDK ที่พาร์ติชันผู้ให้บริการใช้ โดยอัตโนมัติในพร็อพเพอร์ตี้ ro.vndk.version ซึ่งอ่านได้ ในรันไทม์ จากนั้นระบบจะใช้เวอร์ชันนี้ในการระบุเวอร์ชัน VNDK ของผู้ให้บริการ สำหรับไลบรารีบางรายการและระบุเวอร์ชันสแนปชอต VNDK สำหรับเนมสเปซ การกำหนดค่า

สร้างไลบรารี VNDK

คำสั่ง make vndk จะสร้างไลบรารีที่มี vndk: { enabled: true, … } รวมถึงทรัพยากร Dependency และเนมสเปซ ใหม่ หากตั้งค่า BOARD_VNDK_VERSION := current ไว้ ไลบรารีเหล่านี้สร้างขึ้นด้วยคำสั่ง make

เนื่องจากบิลด์นี้ไม่ได้ติดตั้งไลบรารี VNDK จากสแนปชอต ไลบรารี VNDK ที่ติดตั้งไว้ไม่เสถียร ABI แต่ในกรณีที่เวอร์ชัน Android มีการเผยแพร่ ABI สำหรับ VNDK เวอร์ชันปัจจุบันได้รับการแก้ไขแล้ว ในจุดนี้ คุณสามารถ ความเสียหาย ABI เป็นข้อผิดพลาดของรุ่น ดังนั้นแพตช์สำหรับเวอร์ชัน Android ต้องไม่ เปลี่ยน ABI สำหรับห้องสมุด VNDK