Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

ConfigStore HAL

Android 8.0 perpecahan yang monolitik Android OS menjadi generik ( system.img ) dan perangkat keras khusus ( vendor.img dan odm.img ) partisi. Sebagai hasil dari perubahan ini, kompilasi bersyarat harus dihapus dari modul yang diinstal ke partisi sistem dan modul tersebut harus menentukan konfigurasi sistem saat runtime (dan berperilaku berbeda tergantung pada konfigurasi itu).

ConfigStore HAL menyediakan satu set API untuk mengakses item konfigurasi hanya-baca yang digunakan untuk mengonfigurasi framework Android. Halaman ini menjelaskan desain ConfigStore HAL (dan mengapa properti sistem tidak digunakan untuk tujuan ini); halaman lain di bagian rinci ini antarmuka HAL , pelaksanaan pelayanan , dan penggunaan client-side , semua menggunakan surfaceflinger sebagai contoh. Untuk bantuan dengan kelas antarmuka ConfigStore, lihat Menambahkan Antarmuka Kelas dan Produk .

Mengapa tidak menggunakan properti sistem?

Kami mempertimbangkan untuk menggunakan properti sistem tetapi menemukan beberapa masalah mendasar, termasuk:

  • Batas panjang pada nilai. Properti sistem memiliki batasan ketat pada panjang nilainya (92 byte). Selain itu, karena batas ini telah terpapar langsung ke aplikasi Android sebagai makro C, menambah panjangnya dapat menyebabkan masalah kompatibilitas mundur.
  • Tidak ada dukungan jenis. Semua nilai-nilai dasarnya string, dan API hanya mengurai string menjadi int atau bool . Tipe data senyawa lainnya (misalnya, array dan struct) harus dikodekan / diterjemahkan oleh klien (misalnya, "aaa,bbb,ccc" dapat dikodekan sebagai array dari tiga senar).
  • Menimpa. Karena properti sistem baca-saja diimplementasikan sebagai properti tulis-sekali, vendor/ODM yang ingin mengganti nilai baca-saja yang ditentukan AOSP harus mengimpor nilai baca-saja mereka sendiri sebelum nilai baca-saja yang ditentukan AOSP. Ini, pada gilirannya, menghasilkan nilai yang dapat ditulis ulang yang ditentukan oleh vendor yang ditimpa oleh nilai yang ditentukan oleh AOSP.
  • Alamat kebutuhan ruang. Properti sistem membutuhkan ruang alamat yang relatif besar dalam setiap proses. Sifat-sifat sistem dikelompokkan dalam prop_area unit dengan ukuran tetap 128 KB, semua yang dialokasikan untuk ruang alamat proses bahkan jika hanya sistem properti tunggal di dalamnya sedang diakses. Ini dapat menyebabkan masalah pada perangkat 32-bit di mana ruang alamat sangat berharga.

Kami berusaha mengatasi keterbatasan ini tanpa mengorbankan kompatibilitas, tetapi tetap khawatir bahwa properti sistem tidak dirancang untuk mendukung pengaksesan item konfigurasi hanya-baca. Akhirnya kami memutuskan bahwa properti sistem lebih cocok untuk berbagi beberapa item yang diperbarui secara dinamis di seluruh Android secara real time, dan bahwa ada kebutuhan untuk sistem baru yang didedikasikan untuk mengakses item konfigurasi hanya-baca.

Desain HAL ConfigStore

Desain dasarnya sederhana:

Desain HAL Configstore

Desain Gambar 1. ConfigStore HAL

  • Jelaskan flag build (saat ini digunakan untuk mengompilasi kerangka kerja secara kondisional) di HIDL.
  • Vendor dan OEM menyediakan SoC dan nilai khusus perangkat untuk membangun flag dengan mengimplementasikan layanan HAL.
  • Ubah kerangka kerja untuk menggunakan layanan HAL guna menemukan nilai item konfigurasi saat runtime.

Item konfigurasi saat ini direferensikan oleh kerangka kerja termasuk dalam paket HIDL berversi ( android.hardware.configstore@1.0 ). Vendor/OEM memberikan nilai ke item konfigurasi dengan mengimplementasikan antarmuka dalam paket ini, dan kerangka kerja menggunakan antarmuka saat perlu mendapatkan nilai untuk item konfigurasi.

Pertimbangan keamanan

Bendera build yang ditentukan dalam antarmuka yang sama dipengaruhi oleh kebijakan SELinux yang sama. Jika satu atau lebih membangun bendera harus memiliki kebijakan SELinux yang berbeda, mereka harus dipisahkan ke antarmuka yang lain. Ini dapat memerlukan revisi utama dari android.hardware.configstore package sebagai interface terpisah tidak lagi mundur-kompatibel.