การควบคุมการเข้าถึงด้วยความระมัดระวัง (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

กลายเป็น

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

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

กำหนดค่าเอดส์

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

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

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

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

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

ส่วน CAPS ใช้ไวยากรณ์ต่อไปนี้

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

การระบุส่วนที่มี [path] เดียวกันในไฟล์ต่างๆ หลายส่วนเป็นข้อผิดพลาด ใน Python เวอร์ชัน <= 3.2 ไฟล์เดียวกันอาจมีส่วนที่ลบล้างส่วนก่อนหน้า ส่วนใน Python 3.2 ระบบจะตั้งค่าเป็นโหมดที่เข้มงวด
mode โหมดไฟล์ฐาน 8 โหมดไฟล์ฐาน 8 ที่ถูกต้องซึ่งมีตัวเลขอย่างน้อย 3 หลัก หากระบุ 3 ระบบจะใส่ 0 นําหน้า มิเช่นนั้นระบบจะใช้โหมดตามที่เป็นอยู่
user AID_<user> C define สำหรับ AID ที่ถูกต้องหรือชื่อที่จำง่าย (เช่น ยอมรับทั้ง AID_RADIO และ radio) หากต้องการกำหนด AID ที่กําหนดเอง โปรดดูการกําหนดค่าส่วน AID
group AID_<group> เหมือนกับผู้ใช้
caps ตัวพิมพ์ใหญ่* ชื่อตามที่ประกาศใน 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 <number> สตริงตัวเลขสไตล์ 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

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

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

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

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

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 การใช้กฎการจับคู่และการแยกวิเคราะห์แยกต่างหากสำหรับไดเรกทอรีและไฟล์ (ซึ่งอาจใช้นิพจน์ทั่วไปเพิ่มเติมได้) ทำให้ 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 เพื่อเพิ่มการรองรับการล็อกให้ตื่นในไดเรกทอรี device/vendor/device โปรดคำนึงถึงสิ่งต่อไปนี้

  • รายการโครงสร้างแต่ละรายการคือโหมด, uid, gid, ความสามารถ และชื่อ system/core/include/private/android_filesystem_config.h จะรวมอยู่โดยอัตโนมัติเพื่อระบุ #define ของไฟล์ 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() ต้องตรวจสอบการเข้าถึง