توسعه دستگاه سفارشی

این صفحه چندین وظیفه را که ممکن است در صورت راه‌اندازی یک سیستم برای دستگاه خودتان نیاز داشته باشید، توضیح می‌دهد.

ایجاد پیکربندی فلش سفارشی

دستورالعمل‌های فست‌بوت در فایلی به نام fastboot-info.txt تعریف شده‌اند. اگر چندین فایل fastboot-info.txt بسازید، چندین فایل fastboot-info.txt در $OUT_DIR خواهید داشت. و $ANDROID_PRODUCT_OUT به جدیدترین فایلی که ساخته‌اید اشاره می‌کند. این صفحه فهرستی از وظایفی را که فست‌بوت باید اجرا کند، ارائه می‌دهد و می‌توان آنها را با استفاده از m fastboot_info بازسازی کرد. می‌توانید با تغییر فایل fastboot-info.txt ، منطق فلش سفارشی را معرفی کنید.

فایل fastboot-info.txt از این دستورات پشتیبانی می‌کند:

  • flash %s : یک پارتیشن مشخص را فلش می‌کند. آرگومان‌های اختیاری شامل --slot-other, filename_path , and --apply-vbmeta` هستند.
  • update-super : پارتیشن super را به‌روزرسانی می‌کند.
  • if-wipe : اگر یک wipe مشخص شده باشد، به صورت مشروط کامپوننت دیگری را اجرا می‌کند.
  • erase %s : یک پارتیشن مشخص را پاک می‌کند (فقط می‌تواند همراه با if-wipe -> استفاده شود، مثلاً if-wipe erase cache ).

تعیین وضعیت قفل فلش

اگر در حال ساخت یک دیمن فلش‌بوت سفارشی (flashbootd) برای یک دستگاه هستید، باید بتوانید بوت‌لودر و وضعیت قفل بوت‌لودر را دریافت کنید. تابع getFlashLockState() @SystemApi وضعیت بوت‌لودر را ارسال می‌کند و رابط برنامه‌نویسی سیستمی PersistentDataBlockManager.getFlashLockState() وضعیت قفل بوت‌لودر را در دستگاه‌های سازگار برمی‌گرداند.

مقدار بازگشتی شرایط
FLASH_LOCK_UNKNOWN فقط توسط دستگاه‌هایی که به اندروید ۷.x یا بالاتر ارتقا می‌دهند و قبلاً از تغییرات بوت‌لودر مورد نیاز برای دریافت وضعیت قفل فلش پشتیبانی نمی‌کردند، در صورتی که از قابلیت قفل/باز کردن قفل فلش پشتیبانی می‌کردند، بازگردانده می‌شود.
  • دستگاه‌های جدیدی که اندروید ۷.x یا بالاتر را اجرا می‌کنند باید در حالت FLASH_LOCK_LOCKED یا FLASH_LOCK_UNLOCKED باشند.
  • دستگاه‌هایی که به اندروید ۷.x یا بالاتر ارتقا می‌یابند و از قابلیت باز کردن/قفل کردن با فلش پشتیبانی نمی‌کنند، باید حالت FLASH_LOCK_LOCKED را برگردانند.
FLASH_LOCK_LOCKED توسط هر دستگاهی که از قفل/باز کردن قفل فلش پشتیبانی نمی‌کند (یعنی دستگاه همیشه قفل است)، یا هر دستگاهی که از قفل/باز کردن قفل فلش پشتیبانی می‌کند و در حالت قفل است، بازگردانده می‌شود.
FLASH_LOCK_UNLOCKED توسط هر دستگاهی که از قفل/باز کردن قفل فلش پشتیبانی می‌کند و در حالت قفل نشده است، بازگردانده می‌شود.

تولیدکنندگان باید مقادیر برگردانده شده توسط دستگاه‌هایی با بوت‌لودرهای قفل شده و قفل نشده را آزمایش کنند. برای مثال، AOSP شامل یک پیاده‌سازی مرجع است که مقداری را بر اساس ویژگی بوت ro.boot.flash.locked برمی‌گرداند. کد نمونه در دایرکتوری‌های زیر قرار دارد:

  • frameworks/base/services/core/java/com/android/server/PersistentDataBlockService.java
  • frameworks/base/core/java/android/service/persistentdata/PersistentDataBlockManager.java