การควบคุมการเข้าถึงด้วยความระมัดระวัง (DAC)

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

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

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

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

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

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

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

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

#define AID_SYSTEM 1000

เปลี่ยนเป็น:

  • ชื่อที่จำง่าย: ระบบ
  • uid: 1,000
  • ตาราง: 1,000

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

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

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

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

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

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

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

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

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

มีข้อผิดพลาดในการระบุหลายส่วนที่มีส่วนเดียวกัน [path] ในไฟล์ต่างๆ ใน Python เวอร์ชัน <= 3.2 พารามิเตอร์ ไฟล์เดียวกันอาจมีส่วนที่ลบล้างส่วนก่อนหน้า ใน Python 3.2 ตั้งค่าเป็นโหมดเข้มงวด
mode โหมดไฟล์ฐานแปด โหมดไฟล์ฐานแปดที่ถูกต้องอย่างน้อย 3 หลัก หากระบุ 3 จะเป็น นำหน้าด้วย 0 ระบบจะใช้โหมดอื่นตามที่เป็นอยู่
user AID_<ผู้ใช้> C define สำหรับ AID ที่ถูกต้องหรือชื่อที่จำง่าย (เช่น ยอมรับทั้ง AID_RADIO และ radio) ถึง ระบุ AID ที่กำหนดเอง โปรดดูการกำหนดค่า ส่วน AID
group AID_<กลุ่ม> เหมือนกับผู้ใช้
caps ตัวพิมพ์ใหญ่* ชื่อตามที่ประกาศไว้ใน bionic/libc/kernel/uapi/linux/capability.h โดยไม่มี CAP_ นำ อนุญาตให้ใช้ตัวพิมพ์ใหญ่-เล็ก การกำหนดขีดจำกัดสามารถ ข้อมูลดิบ:
  • เลขฐานสอง (0b0101)
  • ฐานแปด (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(2,900) - AID_OEM_RESERVED_END(2999)
    • AID_OEM_RESERVED_2_START(5,000) - AID_OEM_RESERVED_2_END(5,999)
  • พาร์ติชันของระบบ
    • AID_SYSTEM_RESERVED_START(6,000) - AID_SYSTEM_RESERVED_END(6499)
  • พาร์ติชัน ODM
    • AID_ODM_RESERVED_START(6,500) - AID_ODM_RESERVED_END(6,999)
  • การแบ่งส่วนผลิตภัณฑ์
    • AID_PRODUCT_RESERVED_START(7000) - AID_PRODUCT_RESERVED_END(7499)
  • พาร์ติชัน System_ext
    • AID_SYSTEM_EXT_RESERVED_START(7,500) - AID_SYSTEM_EXT_RESERVED_END(7,999)

ดูตัวอย่างการใช้งานได้ที่การกำหนด 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 AID

หากต้องการใช้ 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 คุณสามารถใช้ชื่อที่จำง่ายสำหรับ อินเทอร์เฟซที่รองรับชื่อเอดส์ เช่น

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

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

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

  • แต่ละรายการโครงสร้างคือโหมด, uid, gid, ความสามารถ และชื่อ system/core/include/private/android_filesystem_config.h คือ รวมโดยอัตโนมัติเพื่อให้ไฟล์ 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 ทรัพยากร Dependency ของไลบรารี
  • ต้องใช้สำเนาสาขาส่วนตัวของผู้ผลิตอุปกรณ์ system/core/include/private/android_filesystem_config.h ด้วย เนื้อหาพิเศษจากเป้าหมายที่มีอยู่ที่จะย้ายไป device/vendor/device/android_filesystem_config.h
  • สงวนสิทธิ์ที่จะใช้การควบคุมการเข้าถึงที่จำเป็น (MAC) ของ SELinux ในระบบเป้าหมาย การใช้งานที่มี ไฟล์ปฏิบัติการเป้าหมายที่ใช้ fs_config() ต้องตรวจสอบการเข้าถึง