การควบคุมการเข้าถึงตามดุลยพินิจ (DAC)

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

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

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

  • แหล่งที่มาหลายแห่งสำหรับไฟล์การกำหนดค่า (เปิดใช้งานการกำหนดค่าบิลด์ที่ขยายได้)
  • การตรวจสอบความถูกต้องในเวลาการสร้างของค่า OEM AID
  • การสร้างส่วนหัว OEM AID แบบกำหนดเองที่สามารถใช้ในไฟล์ต้นฉบับได้ตามต้องการ
  • การเชื่อมโยงชื่อที่จำง่ายกับค่า OEM AID ที่แท้จริง รองรับอาร์กิวเมนต์สตริงที่ไม่ใช่ตัวเลขสำหรับผู้ใช้และกลุ่ม เช่น "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 Open Source Project (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

กลายเป็น:

  • ชื่อที่เป็นมิตร: ระบบ
  • ไอดี: 1,000
  • กิด: 1,000

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

การกำหนดค่า AID

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

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

การกำหนดค่าส่วนตัวพิมพ์ใหญ่

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

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

ส่วนตัวพิมพ์ใหญ่ใช้ไวยากรณ์ต่อไปนี้:

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

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

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

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

ส่วน AID ประกอบด้วย OEM AID และใช้ไวยากรณ์ต่อไปนี้:

ส่วน ค่า คำนิยาม
[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)

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

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

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

การกำหนดชื่อ OEM AID

หากต้องการกำหนด OEM AID ให้สร้างไฟล์ 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 แบบกำหนดเองของคุณสามารถใช้งานได้โดยระบบในบิลด์ใหม่

การใช้เครื่องช่วย OEM

หากต้องการใช้ OEM AID ในโค้ด 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
    

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

การเชื่อมโยงชื่อที่เป็นมิตร

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

การแปลงจาก AID เป็นชื่อที่เป็นมิตร

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

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

หากต้องการเปิดใช้งานความสามารถของระบบไฟล์ ให้สร้างส่วนตัวพิมพ์ใหญ่ในไฟล์ 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 สามารถจัดการไดเร็กทอรีและไฟล์ในสองตารางที่แตกต่างกัน คำจำกัดความของโครงสร้างใน 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 )

แทนที่ตัวอย่าง

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

  • รายการโครงสร้างแต่ละรายการคือโหมด, uid, gid, ความสามารถ และชื่อ system/core/include/private/android_filesystem_config.h ถูกรวมไว้โดยอัตโนมัติเพื่อจัดเตรียมไฟล์ Manifest #defines ( 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 filesystem
+** 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
  • ขอสงวนสิทธิ์ในการใช้ SELinux Mandatory Access Controls (MAC) กับไฟล์การกำหนดค่าบนระบบเป้าหมาย การใช้งานที่มีไฟล์ปฏิบัติการเป้าหมายแบบกำหนดเองโดยใช้ fs_config() จะต้องรับประกันการเข้าถึง