การควบคุมการเข้าถึงแบบมีการพิจารณา (DAC)

ออบเจ็กต์ระบบไฟล์และบริการที่เพิ่มลงในการสร้างมักจะต้องมีรหัสที่ไม่ซ้ำกันแยกต่างหาก ซึ่งเรียกว่ารหัส Android (AID) ปัจจุบันทรัพยากรหลายอย่าง เช่น ไฟล์และบริการ ใช้ AID หลัก (ที่ Android กําหนด) โดยไม่จําเป็น ในหลายๆ กรณี คุณสามารถใช้ AID ของ OEM (ที่ OEM กําหนด) แทนได้

Android เวอร์ชันก่อนหน้า (Android 7.x และต่ำกว่า) ขยายกลไก AID โดยใช้ไฟล์ android_filesystem_config.h เฉพาะอุปกรณ์เพื่อระบุความสามารถของระบบไฟล์และ/หรือ AID ของ OEM ที่กำหนดเอง อย่างไรก็ตาม ระบบนี้ใช้งานยากเนื่องจากไม่รองรับการใช้ชื่อที่เข้าใจง่ายสำหรับ AID ของ OEM จึงต้องระบุตัวเลขดิบสำหรับช่องผู้ใช้และกลุ่มโดยไม่มีวิธีเชื่อมโยงชื่อที่เข้าใจง่ายกับ AID ที่เป็นตัวเลข

Android เวอร์ชันใหม่กว่า (Android 8.0 ขึ้นไป) รองรับวิธีการใหม่ในการ ขยายความสามารถของระบบไฟล์ วิธีใหม่นี้รองรับรายการต่อไปนี้

  • ตำแหน่งแหล่งที่มาหลายตำแหน่งสำหรับไฟล์การกำหนดค่า (เปิดใช้การกำหนดค่าบิลด์ที่ขยายได้)
  • การตรวจสอบความสมเหตุสมผลของค่า AID ของ OEM ในเวลาคอมไพล์
  • การสร้างส่วนหัว AID ของ OEM ที่กำหนดเองซึ่งใช้ในไฟล์ต้นฉบับได้ตามต้องการ
  • การเชื่อมโยงชื่อที่จำง่ายกับค่า AID ของ OEM จริง รองรับอาร์กิวเมนต์สตริงที่ไม่ใช่ตัวเลขสำหรับผู้ใช้และกลุ่ม เช่น "foo" แทน "2901"

การปรับปรุงเพิ่มเติมรวมถึงการนำอาร์เรย์ android_ids[] ออกจาก system/core/libcutils/include/private/android_filesystem_config.h ตอนนี้อาร์เรย์นี้ อยู่ใน Bionic ในรูปแบบอาร์เรย์ที่สร้างขึ้นแบบส่วนตัวทั้งหมด โดยมี ตัวช่วยเข้าถึงที่มี getpwnam() และ getgrnam() (ซึ่งมีผลข้างเคียงคือสร้างไบนารีที่เสถียรเนื่องจากมีการแก้ไข AID หลัก) ดูเครื่องมือและไฟล์ README ที่มีรายละเอียดเพิ่มเติมได้ที่ build/make/tools/fs_config

เพิ่มรหัส Android (AID)

Android 8.0 ได้นำอาร์เรย์ android_ids[] ออกจากโครงการโอเพนซอร์ส Android (AOSP) ระบบจะสร้างชื่อที่ใช้งานได้กับ AID จากไฟล์ส่วนหัว system/core/libcutils/include/private/android_filesystem_config.h เมื่อสร้างอาร์เรย์ Bionic android_ids[] แทน เครื่องมือจะเลือกdefineการจับคู่AID_*ใดก็ตาม และ * จะกลายเป็นชื่อตัวพิมพ์เล็ก

ตัวอย่างเช่น ใน private/android_filesystem_config.h

#define AID_SYSTEM 1000

กลายเป็น

  • ชื่อที่จำง่าย: ระบบ
  • uid: 1000
  • gid: 1000

หากต้องการเพิ่ม AID หลักของ AOSP ใหม่ เพียงเพิ่ม #define ลงใน ไฟล์ส่วนหัว android_filesystem_config.h ระบบจะสร้าง AID ในระหว่างการสร้างและทำให้พร้อมใช้งานในอินเทอร์เฟซที่ใช้อาร์กิวเมนต์ผู้ใช้และกลุ่ม เครื่องมือจะตรวจสอบว่า AID ใหม่ไม่ได้อยู่ในช่วง APP หรือ OEM นอกจากนี้ยังจะพิจารณาการเปลี่ยนแปลงในช่วงเหล่านั้น และควร กำหนดค่าใหม่โดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงหรือช่วงใหม่ที่ OEM สงวนไว้

กำหนดค่า AID

หากต้องการเปิดใช้กลไก AID ใหม่ ให้ตั้งค่า TARGET_FS_CONFIG_GEN ในไฟล์ BoardConfig.mk ตัวแปรนี้มีรายการไฟล์การกำหนดค่า ซึ่งช่วยให้คุณสามารถผนวกไฟล์ได้ตามต้องการ

ตามธรรมเนียมแล้ว ไฟล์การกำหนดค่าจะใช้ชื่อ config.fs แต่ในทางปฏิบัติ คุณสามารถใช้ชื่อใดก็ได้ config.fs อยู่ใน รูปแบบ ConfigParser ini ของ Pythonและมีส่วน caps (สำหรับการกำหนดค่าความสามารถของระบบไฟล์) และส่วน AIDs (สำหรับการกำหนดค่า AIDs ของ OEM)

กำหนดค่าส่วนขีดจำกัด

ส่วน caps รองรับการตั้งค่าความสามารถของระบบไฟล์ในออบเจ็กต์ระบบไฟล์ภายในบิลด์ (ตัวระบบไฟล์เองก็ต้องรองรับฟังก์ชันนี้ด้วย)

เนื่องจากการเรียกใช้บริการที่เสถียรในฐานะรูทใน Android ทำให้ชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) ล้มเหลว ข้อกำหนดก่อนหน้านี้ในการคงความสามารถไว้ขณะเรียกใช้กระบวนการหรือบริการเกี่ยวข้องกับการตั้งค่าความสามารถ แล้วใช้ setuid/setgid กับ AID ที่เหมาะสมเพื่อเรียกใช้ โดยการใช้ Caps คุณ สามารถข้ามข้อกำหนดเหล่านี้และให้เคอร์เนลจัดการให้คุณได้ เมื่อส่งต่อการควบคุมไปยัง main() กระบวนการของคุณจะมีขีดความสามารถที่จำเป็นอยู่แล้วเพื่อให้บริการใช้ผู้ใช้และกลุ่มที่ไม่ใช่รูทได้ (นี่เป็นวิธีที่แนะนำในการเริ่มต้นบริการที่มีสิทธิ์)

ส่วนการจำกัดการใช้จ่ายใช้ไวยากรณ์ต่อไปนี้

ส่วน ค่านิยม คำจำกัดความ
[path] เส้นทางระบบไฟล์ที่จะกำหนดค่า เส้นทางที่ลงท้ายด้วย / จะถือว่าเป็นไดเรกทอรี ไม่เช่นนั้นจะเป็นไฟล์

การระบุหลายส่วนที่มี [path] เดียวกันในไฟล์ต่างๆ ถือเป็นข้อผิดพลาด ใน Python เวอร์ชัน <= 3.2 ไฟล์เดียวกันอาจมีส่วนที่ลบล้างส่วนก่อนหน้า ใน Python 3.2 จะตั้งค่าเป็นโหมดเข้มงวด
mode โหมดไฟล์ฐานแปด โหมดไฟล์ฐานแปดที่ถูกต้องซึ่งมีอย่างน้อย 3 หลัก หากระบุ 3 ระบบจะนำหน้าด้วย 0 มิฉะนั้นจะใช้โหมดตามที่ระบุ
user AID_<user> ทั้ง C define สำหรับ AID ที่ถูกต้องหรือชื่อที่เข้าใจง่าย (เช่น ทั้ง AID_RADIO และ radio ใช้ได้) หากต้องการ กําหนด AID ที่กําหนดเอง ให้ดูการกําหนดค่า ส่วน AID
group AID_<group> เหมือนกับผู้ใช้
caps cap* ชื่อตามที่ประกาศไว้ใน bionic/libc/kernel/uapi/linux/capability.h โดยไม่มี CAP_ นำหน้า อนุญาตให้ใช้ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ผสมกัน โดยแคปชันอาจเป็น แบบดิบ
  • ไบนารี (0b0101)
  • เลขฐาน 8 (0455)
  • int (42)
  • เลขฐานสิบหก (0xFF)
แยกตัวพิมพ์ใหญ่หลายตัวโดยใช้การเว้นวรรค

ดูตัวอย่างการใช้งานได้ที่การใช้ความสามารถของระบบไฟล์

กำหนดค่าส่วน AID

ส่วน AID มี AID ของ OEM และใช้ไวยากรณ์ต่อไปนี้

ส่วน ค่านิยม คำจำกัดความ
[AID_<name>] <name> มีอักขระในชุด ตัวพิมพ์ใหญ่ ตัวเลข และขีดล่างได้ ระบบจะใช้เวอร์ชันตัวพิมพ์เล็กเป็น ชื่อที่จำง่าย ไฟล์ส่วนหัวที่สร้างขึ้นสำหรับการรวมโค้ดจะใช้ AID_<name>

การระบุหลายส่วนที่มีAID_<name>เดียวกันถือเป็นข้อผิดพลาด (ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่โดยมีข้อจำกัดเดียวกันกับ[path])

<name> ต้องขึ้นต้นด้วยชื่อพาร์ติชันเพื่อให้แน่ใจว่าไม่ขัดแย้งกับแหล่งที่มาอื่นๆ
value <หมายเลข> สตริงตัวเลขรูปแบบ C ที่ถูกต้อง (ฐานสิบหก ฐานแปด ฐานสอง และฐานสิบ)

การระบุหลายส่วนที่มีตัวเลือกค่าเดียวกันถือเป็นข้อผิดพลาด

ต้องระบุตัวเลือกค่าในช่วงที่สอดคล้องกับพาร์ติชัน ที่ใช้ใน <name> รายการพาร์ติชันที่ถูกต้องและช่วงที่เกี่ยวข้อง จะกำหนดไว้ใน system/core/libcutils/include/private/android_filesystem_config.h ตัวเลือกมีดังนี้
  • พาร์ติชันของผู้ให้บริการ
    • AID_OEM_RESERVED_START(2900) - AID_OEM_RESERVED_END(2999)
    • AID_OEM_RESERVED_2_START(5000) - AID_OEM_RESERVED_2_END(5999)
  • พาร์ติชันระบบ
    • AID_SYSTEM_RESERVED_START(6000) - AID_SYSTEM_RESERVED_END(6499)
  • พาร์ติชัน ODM
    • AID_ODM_RESERVED_START(6500) - AID_ODM_RESERVED_END(6999)
  • การแบ่งส่วนผลิตภัณฑ์
    • AID_PRODUCT_RESERVED_START(7000) - AID_PRODUCT_RESERVED_END(7499)
  • พาร์ติชัน System_ext
    • AID_SYSTEM_EXT_RESERVED_START(7500) - AID_SYSTEM_EXT_RESERVED_END(7999)

ดูตัวอย่างการใช้งานได้ที่การกำหนดชื่อ AID ของ OEMและการใช้ AID ของ OEM

ตัวอย่างการใช้

ตัวอย่างต่อไปนี้จะอธิบายรายละเอียดวิธีกำหนดและใช้ AID ของ OEM และวิธี เปิดใช้ความสามารถของระบบไฟล์ ชื่อ AID ของ OEM ([AID_name]) ต้องขึ้นต้นด้วยชื่อพาร์ติชัน เช่น "vendor_" เพื่อให้แน่ใจว่าชื่อจะไม่ขัดแย้งกับชื่อ AOSP ในอนาคต หรือพาร์ติชันอื่นๆ

กำหนดชื่อ AID ของ OEM

หากต้องการกำหนด AID ของ OEM ให้สร้างไฟล์ config.fs แล้วตั้งค่า AID เช่น ใน device/x/y/config.fs ให้ตั้งค่าต่อไปนี้

[AID_VENDOR_FOO]
value: 2900

หลังจากสร้างไฟล์แล้ว ให้ตั้งค่าตัวแปร TARGET_FS_CONFIG_GEN และชี้ไปยังตัวแปรนั้นใน BoardConfig.mk เช่น ใน device/x/y/BoardConfig.mk ให้ตั้งค่าต่อไปนี้

TARGET_FS_CONFIG_GEN += device/x/y/config.fs

ตอนนี้ระบบโดยรวมสามารถใช้ AID ที่กำหนดเองของคุณได้แล้วในบิลด์ใหม่

ใช้ AID ของ OEM

หากต้องการใช้ AID ของ OEM ในโค้ด C ให้ใส่ oemaids_headers ใน Makefile ที่เชื่อมโยง และเพิ่ม #include "generated_oem_aid.h" จากนั้นเริ่มใช้ตัวระบุที่ประกาศ ตัวอย่างเช่น ใน my_file.c ให้เพิ่มข้อมูลต่อไปนี้

#include "generated_oem_aid.h"


If (ipc->uid == AID_VENDOR_FOO) {
  // Do something
...

เพิ่มโค้ดต่อไปนี้ในไฟล์ Android.bp ที่เชื่อมโยง

header_libs: ["oemaids_headers"],

หากคุณใช้ไฟล์ Android.mk ให้เพิ่มข้อมูลต่อไปนี้

LOCAL_HEADER_LIBRARIES := oemaids_headers

ใช้ชื่อที่จำได้ง่าย

ใน Android 9 คุณสามารถใช้ชื่อที่เข้าใจง่ายสำหรับอินเทอร์เฟซที่รองรับชื่อ AID ได้ เช่น

  • ในchownคำสั่งใน some/init.rc ให้ทำดังนี้
    chown vendor_foo /vendor/some/vendor_foo/file
    
  • ในserviceในsome/init.rc
    service vendor_foo /vendor/bin/foo_service
        user vendor_foo
        group vendor_foo
    

เนื่องจาก /vendor/etc/passwd และ /vendor/etc/group เป็นผู้ทำการแมปภายในจากชื่อที่จำง่ายไปยัง uid จึงต้องติดตั้งพาร์ติชันของผู้ให้บริการ

เชื่อมโยงชื่อที่จำง่าย

Android 9 รองรับการเชื่อมโยง ชื่อที่จำง่ายกับค่า AID ของ OEM จริง คุณสามารถใช้อาร์กิวเมนต์สตริงที่ไม่ใช่ตัวเลข สำหรับผู้ใช้และกลุ่มได้ เช่น "vendor_foo" แทน "2901"

แปลงจาก AID เป็นชื่อที่จำได้ง่าย

สำหรับ AID ของ OEM, Android 8.x กำหนดให้ใช้ oem_#### กับ getpwnam และฟังก์ชันที่คล้ายกัน รวมถึงในที่ที่จัดการการค้นหาด้วย getpwnam (เช่น สคริปต์ init) ใน Android 9 คุณสามารถ ใช้ getpwnam และ getgrnam ใน Bionic เพื่อ แปลงจากรหัส Android (AID) เป็นชื่อที่เข้าใจง่ายและในทางกลับกัน

ใช้ความสามารถของระบบไฟล์

หากต้องการเปิดใช้ความสามารถของระบบไฟล์ ให้สร้างส่วน caps ในไฟล์ config.fs ตัวอย่างเช่น ใน device/x/y/config.fs ให้เพิ่มส่วนต่อไปนี้

[system/bin/foo_service]
mode: 0555
user: AID_VENDOR_FOO
group: AID_SYSTEM
caps: SYS_ADMIN | SYS_NICE

หลังจากสร้างไฟล์แล้ว ให้ตั้งค่า TARGET_FS_CONFIG_GEN เพื่อชี้ไปยังไฟล์นั้นใน BoardConfig.mk เช่น ใน device/x/y/BoardConfig.mk ให้ตั้งค่าต่อไปนี้

TARGET_FS_CONFIG_GEN += device/x/y/config.fs

เมื่อมีการเรียกใช้บริการ vendor_foo บริการจะเริ่มต้น ด้วยความสามารถ CAP_SYS_ADMIN และ CAP_SYS_NICE โดยไม่มีการเรียกใช้ setuid และ setgid นอกจากนี้ นโยบาย SELinux ของบริการ vendor_foo ไม่จำเป็นต้องใช้ความสามารถ setuid และ setgid อีกต่อไป และสามารถลบได้

กำหนดค่าการลบล้าง (Android 6.x-7.x)

Android 6.0 ได้ย้าย fs_config และคำจำกัดความของโครงสร้างที่เกี่ยวข้อง (system/core/include/private/android_filesystem_config.h) ไปยัง system/core/libcutils/fs_config.c ซึ่งสามารถอัปเดตหรือ ลบล้างได้โดยไฟล์ไบนารีที่ติดตั้งใน /system/etc/fs_config_dirs และ /system/etc/fs_config_files การใช้กฎการจับคู่และการแยกวิเคราะห์แยกกัน สำหรับไดเรกทอรีและไฟล์ (ซึ่งอาจใช้รูปแบบ glob เพิ่มเติม) ช่วยให้ Android จัดการไดเรกทอรีและไฟล์ใน 2 ตารางที่แตกต่างกันได้ คำจำกัดความของโครงสร้างใน system/core/libcutils/fs_config.c ไม่ เพียงอนุญาตให้รันไทม์อ่านไดเรกทอรีและไฟล์เท่านั้น แต่โฮสต์ยังใช้ ไฟล์เดียวกันในระหว่างเวลาบิลด์เพื่อสร้างอิมเมจระบบไฟล์เป็น ${OUT}/system/etc/fs_config_dirs และ ${OUT}/system/etc/fs_config_files ได้ด้วย

แม้ว่าวิธีการลบล้างในการขยายระบบไฟล์จะถูกแทนที่ด้วย ระบบการกำหนดค่าแบบแยกส่วนที่เปิดตัวใน Android 8.0 แต่คุณก็ยังใช้วิธีการเก่าได้ หากต้องการ ส่วนต่อไปนี้จะอธิบายรายละเอียดวิธีกำหนดและรวม ไฟล์การลบล้าง รวมถึงวิธีกำหนดค่าระบบไฟล์

สร้างไฟล์ลบล้าง

คุณสร้างไฟล์ไบนารีที่จัดแนว /system/etc/fs_config_dirsและ /system/etc/fs_config_filesได้โดยใช้เครื่องมือ fs_config_generateใน build/tools/fs_config เครื่องมือนี้ใช้libcutilsฟังก์ชันไลบรารี (fs_config_generate()) เพื่อจัดการข้อกำหนด DAC ลงในบัฟเฟอร์ และกำหนดกฎสำหรับไฟล์รวมเพื่อกำหนดกฎ DAC

หากต้องการใช้ ให้สร้างไฟล์รวมใน device/vendor/device/android_filesystem_config.h ซึ่งทำหน้าที่เป็นการลบล้าง ไฟล์ต้องใช้รูปแบบ structure fs_path_configที่กำหนดไว้ใน system/core/include/private/android_filesystem_config.h โดยมีการเริ่มต้นโครงสร้างต่อไปนี้สำหรับสัญลักษณ์ไดเรกทอรีและไฟล์

  • สำหรับไดเรกทอรี ให้ใช้ android_device_dirs[]
  • สำหรับไฟล์ ให้ใช้ android_device_files[]

เมื่อไม่ได้ใช้ android_device_dirs[] และ android_device_files[] คุณสามารถกำหนด NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_DIRS และ NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_FILES ได้ (ดูตัวอย่างด้านล่าง) นอกจากนี้ คุณยังระบุไฟล์แทนที่ ได้โดยใช้ TARGET_ANDROID_FILESYSTEM_CONFIG_H ในการกำหนดค่าบอร์ด โดยมีชื่อฐานที่บังคับเป็น android_filesystem_config.h

รวมไฟล์การลบล้าง

หากต้องการรวมไฟล์ ให้ตรวจสอบว่า PRODUCT_PACKAGES มี fs_config_dirs และ/หรือ fs_config_files เพื่อให้สามารถ ติดตั้งไฟล์เหล่านั้นใน /system/etc/fs_config_dirs และ /system/etc/fs_config_files ตามลำดับ ระบบบิลด์ ค้นหา android_filesystem_config.h ที่กำหนดเองใน $(TARGET_DEVICE_DIR) ซึ่งมี BoardConfig.mk อยู่ หากไฟล์นี้อยู่ที่อื่น ให้ตั้งค่าตัวแปรการกำหนดค่าบอร์ด TARGET_ANDROID_FILESYSTEM_CONFIG_H เพื่อชี้ไปยังตำแหน่งนั้น

กำหนดค่าระบบไฟล์

วิธีกำหนดค่าระบบไฟล์ใน Android 6.0 ขึ้นไป

  1. สร้างไฟล์ $(TARGET_DEVICE_DIR)/android_filesystem_config.h
  2. เพิ่ม fs_config_dirs และ/หรือ fs_config_files ไปยัง PRODUCT_PACKAGES ในไฟล์การกำหนดค่าบอร์ด (เช่น $(TARGET_DEVICE_DIR)/device.mk)

ตัวอย่างการลบล้าง

ตัวอย่างนี้แสดงแพตช์สำหรับการลบล้าง daemon system/bin/glgps เพื่อเพิ่มการรองรับ Wake Lock ในไดเรกทอรี device/vendor/device โปรดคำนึงถึงสิ่งต่อไปนี้

  • แต่ละรายการในโครงสร้างคือโหมด, uid, gid, ความสามารถ และชื่อ system/core/include/private/android_filesystem_config.h จะรวมโดยอัตโนมัติเพื่อให้ #defines ของไฟล์ Manifest (AID_ROOT, AID_SHELL, CAP_BLOCK_SUSPEND)
  • ส่วน android_device_files[] มีการดำเนินการเพื่อ ระงับการเข้าถึง system/etc/fs_config_dirs เมื่อไม่ได้ระบุ ซึ่งทำหน้าที่เป็นการป้องกัน DAC เพิ่มเติมในกรณีที่ไม่มีเนื้อหาสำหรับการลบล้างไดเรกทอรี อย่างไรก็ตาม การป้องกันนี้ไม่แข็งแรง หากใครก็ตามมีสิทธิ์ควบคุม /system ก็มักจะทำอะไรก็ได้ตามที่ต้องการ
diff --git a/android_filesystem_config.h b/android_filesystem_config.h
new file mode 100644
index 0000000..874195f
--- /dev/null
+++ b/android_filesystem_config.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+/* This file is used to define the properties of the file system
+** images generated by build tools (eg: mkbootfs) and
+** by the device side of adb.
+*/
+
+#define NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_DIRS
+/* static const struct fs_path_config android_device_dirs[] = { }; */
+
+/* Rules for files.
+** These rules are applied based on "first match", so they
+** should start with the most specific path and work their
+** way up to the root. Prefixes ending in * denotes wildcard
+** and will allow partial matches.
+*/
+static const struct fs_path_config android_device_files[] = {
+  { 00755, AID_ROOT, AID_SHELL, (1ULL << CAP_BLOCK_SUSPEND),
"system/bin/glgps" },
+#ifdef NO_ANDROID_FILESYSTEM_CONFIG_DEVICE_DIRS
+  { 00000, AID_ROOT, AID_ROOT, 0, "system/etc/fs_config_dirs" },
+#endif
+};


diff --git a/device.mk b/device.mk
index 0c71d21..235c1a7 100644
--- a/device.mk
+++ b/device.mk
@@ -18,7 +18,8 @@ PRODUCT_PACKAGES := \
     libwpa_client \
     hostapd \
     wpa_supplicant \
-    wpa_supplicant.conf
+    wpa_supplicant.conf \
+    fs_config_files

 ifeq ($(TARGET_PREBUILT_KERNEL),)
 ifeq ($(USE_SVELTE_KERNEL), true)

ย้ายข้อมูลระบบไฟล์จากรุ่นก่อนหน้า

เมื่อย้ายข้อมูลระบบไฟล์จาก Android 5.x และรุ่นก่อนหน้า โปรดทราบว่า Android 6.x

  • นำการรวม โครงสร้าง และคำจำกัดความแบบอินไลน์บางรายการออก
  • ต้องอ้างอิงถึง libcutils แทนที่จะเรียกใช้โดยตรง จาก system/core/include/private/android_filesystem_config.h ไฟล์ปฏิบัติการส่วนตัวของผู้ผลิตอุปกรณ์ที่ขึ้นอยู่กับ system/code/include/private_filesystem_config.h สำหรับไฟล์หรือ โครงสร้างไดเรกทอรี หรือ fs_config ต้องเพิ่ม libcutils การอ้างอิงไลบรารี
  • ต้องใช้สำเนาสาขาแบบส่วนตัวของผู้ผลิตอุปกรณ์ของ system/core/include/private/android_filesystem_config.h ที่มี เนื้อหาเพิ่มเติมในเป้าหมายที่มีอยู่เพื่อย้ายไปยัง device/vendor/device/android_filesystem_config.h
  • ขอสงวนสิทธิ์ในการใช้การควบคุมการเข้าถึงที่จำเป็น (MAC) ของ SELinux กับ ไฟล์การกำหนดค่าในระบบเป้าหมาย การติดตั้งใช้งานที่มี ไฟล์ปฏิบัติการเป้าหมายที่กำหนดเองโดยใช้ fs_config() ต้องตรวจสอบว่ามีการเข้าถึง