Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

ConfigStore HAL

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

ConfigStore HAL menyediakan sekumpulan API untuk mengakses item konfigurasi hanya-baca yang digunakan untuk mengonfigurasi kerangka Android. Halaman ini menjelaskan desain ConfigStore HAL (dan mengapa properti sistem tidak digunakan untuk tujuan ini); halaman lain di bagian ini merinci antarmuka HAL , implementasi layanan , dan penggunaan sisi klien , semua menggunakan surfaceflinger sebagai contoh. Untuk bantuan dengan kelas antarmuka ConfigStore, lihat Menambahkan Kelas dan Item Antarmuka .

Mengapa tidak menggunakan properti sistem?

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

  • Batas panjang nilai. Properti sistem memiliki batas ketat pada panjang nilainya (92 byte). Selain itu, karena batas ini telah secara langsung diekspos ke aplikasi Android sebagai makro C, menambah panjangnya dapat menyebabkan masalah kompatibilitas dengan versi sebelumnya.
  • Tidak ada jenis dukungan. Semua nilai pada dasarnya adalah string, dan API hanya mengurai string menjadi int atau bool . Tipe data gabungan lainnya (misalnya, array dan struct) harus dikodekan / didekodekan oleh klien (misalnya, "aaa,bbb,ccc" dapat dikodekan sebagai larik tiga string).
  • Timpa. Karena properti sistem hanya-baca diimplementasikan sebagai properti sekali tulis, vendor / ODM yang ingin mengganti nilai hanya baca yang ditentukan AOSP harus mengimpor nilai hanya-baca mereka sendiri sebelum nilai hanya-baca yang ditentukan AOSP. Hal ini, pada gilirannya, menghasilkan nilai yang dapat ditulis ulang yang ditentukan oleh vendor diganti dengan nilai yang ditentukan AOSP.
  • Persyaratan ruang alamat. Properti sistem membutuhkan ruang alamat yang relatif besar dalam setiap proses. Properti sistem dikelompokkan dalam unit prop_area dengan ukuran tetap 128 KB, yang semuanya dialokasikan ke ruang alamat proses meskipun hanya satu properti sistem di dalamnya yang diakses. Ini dapat menyebabkan masalah pada perangkat 32-bit di mana ruang alamat sangat berharga.

Kami berusaha mengatasi batasan 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 semua Android secara real time, dan bahwa ada kebutuhan untuk sistem baru yang didedikasikan untuk mengakses item konfigurasi hanya-baca.

Desain ConfigStore HAL

Desain dasarnya sederhana:

Desain Configstore HAL

Gambar 1. Desain ConfigStore HAL

  • Jelaskan tanda build (saat ini digunakan untuk mengompilasi framework secara bersyarat) di HIDL.
  • Vendor dan OEM memberikan SoC dan nilai khusus perangkat untuk flag build dengan mengimplementasikan layanan HAL.
  • Ubah kerangka kerja untuk menggunakan layanan HAL guna menemukan nilai item konfigurasi pada waktu proses.

Item konfigurasi yang saat ini direferensikan oleh framework disertakan dalam paket HIDL berversi ( android.hardware.configstore@1.0 ). Vendor / OEM memberikan nilai ke item konfigurasi dengan mengimplementasikan antarmuka dalam paket ini, dan framework menggunakan antarmuka ketika 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 flag build harus memiliki kebijakan SELinux yang berbeda, mereka harus dipisahkan ke antarmuka lain . Hal ini memerlukan revisi besar dari android.hardware.configstore package karena antarmuka yang dipisahkan tidak lagi kompatibel dengan versi sebelumnya.