يمكنك تحديث وحدات HAL الموجودة مسبقًا إلى وحدات HIDL HAL عن طريق تحويل الرأس في hardware/libhardware/include/hardware
.
باستخدام c2hal
تتولى أداة c2hal
معظم أعمال التحويل، مما يقلل من عدد التغييرات اليدوية المطلوبة. على سبيل المثال، لإنشاء ملف HIDL .hal
لـ NFC HAL:
make c2hal
c2hal -r android.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport -p android.hardware.nfc@1.0 hardware/libhardware/include/hardware/nfc.h
تضيف هذه الأوامر ملفات في hardware/interfaces/nfc/1.0/
. سيؤدي تشغيل hardware/interfaces/update-makefiles.sh
من الدليل $ANDROID_BUILD_TOP إلى إضافة ملف makefile المطلوب إلى HAL. من هنا، يمكنك إجراء تغييرات يدوية لتحويل HAL بشكل كامل.
أنشطة c2hal
عند تشغيل c2hal
، يتم نقل كل شيء في ملف الرأس إلى ملفات .hal
.
يحدد c2hal
البنيات التي تحتوي على مؤشرات دالة في ملف الرأس المقدم ويحول كل بنية إلى ملف واجهة منفصل. على سبيل المثال، يتم تحويل alloc_device_t
إلى وحدة IAllocDevice
HAL (في الملف IAllocDevice.hal
).
يتم نسخ كافة أنواع البيانات الأخرى إلى ملف types.hal
. يتم نقل تعريفات الجنيه إلى التعدادات، ويتم نسخ العناصر التي ليست جزءًا من HIDL أو غير قابلة للتحويل (مثل إعلانات الوظائف الثابتة) إلى التعليقات المميزة بالنص " NOTE
".
الأنشطة اليدوية
لا تعرف أداة c2hal
ما يجب فعله عندما تواجه بنيات معينة. على سبيل المثال، لا يوجد لدى HIDL مفهوم للمؤشرات الأولية؛ ولهذا السبب، عندما يواجه c2hal
مؤشرًا في ملفات الرأس، فإنه لا يعرف ما إذا كان يجب تفسير المؤشر كمصفوفة أو كمرجع لكائن آخر. المؤشرات الفارغة أيضًا معتمة بالمثل.
يجب إزالة الحقل مثل int reserved[7]
يدويًا أثناء الانتقال إلى HIDL. يجب تحديث العناصر مثل اسم القيمة المرجعة إلى شيء ذي معنى أكبر؛ على سبيل المثال، تحويل معلمة الإرجاع لطرق مثل write
في NFC من int32_t write_ret
تم إنشاؤه تلقائيًا إلى Status status
(حيث تكون Status
عبارة عن تعداد جديد يحتوي على حالات NFC محتملة).
تنفيذ HAL
بعد قيامك بإنشاء ملفات .hal
لتمثيل HAL الخاص بك، يجب عليك إنشاء ملفات makefiles (Make أو Soong) التي تنشئ دعم اللغة في C++ وJava (ما لم تستخدم HAL ميزة غير مدعومة في Java). يمكن للبرنامج النصي ./hardware/interfaces/update-makefiles.sh
إنشاء ملفات تكوين لـ HALs الموجودة في دليل hardware/interfaces
(بالنسبة لـ HALs في مواقع أخرى، ما عليك سوى تحديث البرنامج النصي).
عندما يتم تحديث ملفات makefiles، تكون جاهزًا لإنشاء ملفات الرأس وتنفيذ الأساليب. للحصول على تفاصيل حول تنفيذ الواجهة التي تم إنشاؤها، راجع HIDL C++ (لتطبيقات C++) أو HIDL Java (لتطبيقات Java).