安卓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)

相关推荐
geovindu4 小时前
CSharp: Strategy Pattern
开发语言·后端·c#·.net·.netcore·策略模式·行为模式
JAVA老架构AI智能化4 小时前
如何高质量分块
人工智能·python
泡海椒4 小时前
告别反射低效:JQuick-Java ASM动态调用链性能优化实战
java·python·性能优化
2601_956319884 小时前
用示例和练习,把量化规则先练清楚
人工智能·python
Tairitsu_H5 小时前
[C++] C++11新增构造:列表初始化和std::initializer_list
开发语言·c++·c++11·构造
宣宣猪的小花园.5 小时前
【嵌入式】故障与降级:看门狗、保护机制和工程可靠性的底线
开发语言·人工智能·嵌入式硬件·机器学习
shmily麻瓜小菜鸡5 小时前
JS/TS 易踩坑知识点 — 自动分号插入(ASI)
开发语言·javascript·ecmascript
满怀冰雪5 小时前
25-迁移学习入门:加载预训练模型并微调
人工智能·python·机器学习·迁移学习·paddle
CoderYanger5 小时前
前端基础——JavaScript(WebAPI)代码案例
java·开发语言·前端·javascript·css·前端框架·html5
2601_962284505 小时前
安卓APP UI自动化测试:Python + UiAutomator2 + pytest + pytest-html
python·pytest·uiautomator2·ui自动化测试·安卓app