安卓HAL编译流程

你写好了:

hardware/rockchip/led/

├── include/led.h ← 接口定义

├── led.c ← 实现(HAL_MODULE_INFO_SYM 在这里)

├── led_test.c ← 测试程序

└── Android.bp ← Soong 编译规则,定义 led.default 模块

│ 第1步:mm / mmm 编译

source build/envsetup.sh

lunch rk3576_xxx-userdebug

mmm hardware/rockchip/led/

│ Soong 解析 Android.bp

Soong 看到:

cc_library_shared { name: "led.default" }

↓ 编译 led.c

↓ 链接 libcutils + liblog

↓ 生成 led.default.so

↓ 安装到 vendor/lib64/hw/led.default.so

cc_binary { name: "led_test" }

↓ 编译 led_test.c

↓ 链接 libhardware + libcutils

↓ 生成 led_test 可执行文件

↓ 安装到 vendor/bin/led_test

│ 第2步:加入 PRODUCT_PACKAGES,编入系统镜像

device/rockchip/common/modules/led.mk

→ PRODUCT_PACKAGES += led.default

device/rockchip/common/device.mk

→ $(call inherit-product, device/rockchip/common/modules/led.mk)

make -j16

led.default.so 被打包进 vendor 镜像

→ led_test 被打包进 vendor 镜像

│ 第3步:烧录到设备

fastboot flash vendor vendor.img

adb reboot

│ 第4步:上层调用

Java 层(SystemServer / App)

↓ 调用 JNI

Native 层(libhardware)

↓ hw_get_module("led", &module)

↓ dlopen("led.default.so")

↓ dlsym(handle, "HMI") ← 找到 HAL_MODULE_INFO_SYM

↓ module->methods->open(module, "led_main", &device)

↓ dev->set_onoff(dev, 1)

相关推荐
一勺菠萝丶1 分钟前
macOS 安装 Python 包报错:`externally-managed-environment` 怎么解决?
python
醒李30 分钟前
盲人出行辅助系统原型
人工智能·python·目标检测
有点。32 分钟前
C++(枚举法一练习题)
开发语言·c++·算法
Klong.k39 分钟前
如何避免Bean的线程安全问题
java·开发语言
接着奏乐接着舞1 小时前
【无标题】
开发语言·前端·javascript
iiiiyu1 小时前
集合进阶(Map集合)
java·大数据·开发语言·数据结构·编程语言
PILIPALAPENG1 小时前
第4周 Day 3:多 Agent 协作——让 Agent 们"组队干活"
前端·人工智能·python
Omics Pro1 小时前
填补蛋白质组深度学习预处理教学空白
人工智能·python·深度学习·plotly·numpy·pandas·scikit-learn