ตั้งแต่วันที่ 27 มีนาคม 2025 เป็นต้นไป เราขอแนะนำให้ใช้ android-latest-release
แทน aosp-main
เพื่อสร้างและมีส่วนร่วมใน AOSP โปรดดูข้อมูลเพิ่มเติมที่หัวข้อการเปลี่ยนแปลงใน AOSP
แปลงโมดูล HAL
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
คุณสามารถอัปเดตโมดูล HAL ที่มีอยู่เป็นโมดูล HIDL HAL ได้โดยแปลงส่วนหัวใน hardware/libhardware/include/hardware
ใช้ c2hal
c2hal
เครื่องมือจะจัดการงาน Conversion ส่วนใหญ่ ซึ่งจะช่วยลดจํานวนการเปลี่ยนแปลงที่ต้องทำด้วยตนเอง ตัวอย่างเช่น หากต้องการสร้างไฟล์ 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
จะเพิ่มไฟล์ Make ที่จำเป็นลงใน HAL ด้วย จากตรงนี้ คุณสามารถดำเนินการเปลี่ยนแปลงด้วยตนเองเพื่อแปลง HAL ให้เสร็จสมบูรณ์
กิจกรรม c2hal
เมื่อคุณเรียกใช้ c2hal
ระบบจะโอนข้อมูลทั้งหมดในไฟล์ส่วนหัวไปยังไฟล์ .hal
c2hal
จะระบุโครงสร้างที่มีตัวชี้ฟังก์ชันในไฟล์ส่วนหัวที่ระบุ และแปลงโครงสร้างแต่ละรายการเป็นไฟล์อินเทอร์เฟซแยกต่างหาก
ตัวอย่างเช่น alloc_device_t
จะแปลงเป็นข้อบังคับของ IAllocDevice
HAL (ในไฟล์ IAllocDevice.hal
)
ระบบจะคัดลอกข้อมูลประเภทอื่นๆ ทั้งหมดไปยังไฟล์ types.hal
ระบบจะย้ายการกําหนดค่าแบบเครื่องหมายสี่เหลี่ยมผืนผ้าไปยังลิสต์แบบจำกัด และคัดลอกรายการที่ไม่ได้อยู่ใน HIDL หรือไม่สามารถแปลง (เช่น การประกาศฟังก์ชันแบบคงที่) ไปยังความคิดเห็นที่มีข้อความ "NOTE
"
กิจกรรมที่ดำเนินการด้วยตนเอง
เครื่องมือ c2hal
ไม่ทราบว่าต้องทําอย่างไรเมื่อพบรูปแบบบางอย่าง ตัวอย่างเช่น HIDL ไม่มีแนวคิดเกี่ยวกับพอยน์เตอร์ดิบ เมื่อ c2hal
พบพอยน์เตอร์ในไฟล์ส่วนหัว จึงไม่ทราบว่าจะตีความพอยน์เตอร์นั้นเป็นอาร์เรย์หรือเป็นข้อมูลอ้างอิงไปยังออบเจ็กต์อื่น พารามิเตอร์แบบ Void ก็มีลักษณะทึบแสงเช่นเดียวกัน
ฟิลด์ เช่น int reserved[7]
ต้องนําออกด้วยตนเองในระหว่างการเปลี่ยนไปใช้ HIDL รายการต่างๆ เช่น ชื่อของค่าที่แสดงผลควรได้รับการอัปเดตให้มีความหมายมากขึ้น เช่น แปลงพารามิเตอร์ผลลัพธ์ของเมธอด เช่น write
ใน NFC จาก int32_t write_ret
ที่สร้างขึ้นโดยอัตโนมัติเป็น Status status
(โดยที่ Status
คือ enum ใหม่ที่มีสถานะ NFC ที่เป็นไปได้)
ติดตั้งใช้งาน HAL
หลังจากสร้างไฟล์ .hal
เพื่อแสดง HAL แล้ว คุณต้องสร้างไฟล์ Make (Make หรือ Soong) ที่สร้างการรองรับภาษาใน C++ และ Java (เว้นแต่ว่า HAL จะใช้ฟีเจอร์ที่ Java ไม่รองรับ) สคริปต์ ./hardware/interfaces/update-makefiles.sh
จะสร้างไฟล์ Make สำหรับ HAL ที่อยู่ในไดเรกทอรี hardware/interfaces
โดยอัตโนมัติ (สำหรับ HAL ที่อยู่ในตำแหน่งอื่น ให้อัปเดตสคริปต์)
เมื่อไฟล์ make เป็นเวอร์ชันล่าสุดแล้ว คุณก็พร้อมที่จะสร้างไฟล์ส่วนหัวและติดตั้งใช้งานเมธอด ดูรายละเอียดเกี่ยวกับการใช้งานอินเทอร์เฟซที่สร้างขึ้นได้ที่ HIDL C++ (สําหรับการใช้งาน C++) หรือ HIDL Java (สําหรับการใช้งาน Java)
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-27 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2025-07-27 UTC"],[],[],null,["# Convert HAL modules\n\nYou can update preexisting HAL modules to HIDL HAL modules by converting the\nheader in `hardware/libhardware/include/hardware`.\n\nUse c2hal\n---------\n\nThe\n[c2hal](https://android.googlesource.com/platform/system/tools/hidl/+/android16-release/c2hal/)\ntool handles most of the conversion work, reducing the number of required manual\nchanges. For example, to generate a HIDL `.hal` file for the NFC\nHAL: \n\n make c2hal\n c2hal -r android.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport -p android.hardware.nfc@1.0 hardware/libhardware/include/hardware/nfc.h\n\nThese commands add files in `hardware/interfaces/nfc/1.0/`. Running\n`hardware/interfaces/update-makefiles.sh` from the `$ANDROID_BUILD_TOP`\ndirectory also adds the required makefile to the HAL. From here, you can\nmake manual changes to fully convert the HAL.\n\nc2hal activities\n----------------\n\nWhen you run `c2hal`, everything in the header file is transferred\nto `.hal` files.\n\n`c2hal` identifies structs that contain function pointers in the\nprovided header file and converts each struct into a separate interface file.\nFor example, `alloc_device_t` is converted to the\n`IAllocDevice` HAL module (in the file\n`IAllocDevice.hal`).\n\nAll other data types are copied over into a `types.hal` file.\nPound-defines are moved into enums, and items not a part of HIDL or not\nconvertible (such as static-function declarations) are copied into comments\nmarked with the text \"`NOTE`\".\n\nManual activities\n-----------------\n\nThe `c2hal` tool doesn't know what to do when it encounters\ncertain constructs. For example, HIDL has no concept of raw pointers; because of\nthis, when `c2hal` encounters a pointer in header files, it doesn't\nknow whether the pointer should be interpreted as an array or as a reference to\nanother object. Void pointers are also similarly opaque.\n\nField such as `int reserved[7]` must be manually removed during\nthe transition to HIDL. Items such as the name of the return value should be\nupdated to something more meaningful; for example, converting the return\nparameter of methods such as `write` in NFC from the autogenerated\n`int32_t write_ret` to `Status status` (where\n`Status` is a new enum containing possible NFC statuses).\n\nImplement the HAL\n-----------------\n\nAfter you have created `.hal` files to represent your HAL, you\nmust generate the makefiles (Make or Soong) that create the language support in\nC++ and Java (unless the HAL uses a feature unsupported in Java). The\n`./hardware/interfaces/update-makefiles.sh` script can automatically\ngenerate makefiles for HALs located in the `hardware/interfaces`\ndirectory (for HALs in other locations, simply update the script).\n\nWhen the makefiles are up to date, you are ready to generate header files and\nimplement methods. For details on implementing the generated interface, see\n[HIDL C++](/docs/core/architecture/hidl-cpp) (for C++\nimplementations) or [HIDL\nJava](/docs/core/architecture/hidl-java) (for Java implementations)."]]