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

相关推荐
tangweiguo030519872 小时前
LangChain + RAG + Agent + 多模态 完整实战教程
python·langchain
我是无敌小恐龙2 小时前
Java SE 零基础入门Day06 方法重载+Debug调试+String字符串全套API详解(超全干货)
java·开发语言·人工智能·python·transformer·无人机·量子计算
AI+程序员在路上2 小时前
Qt6读取rtsp视频流的几种方法
开发语言·qt6.3
aidesignplus2 小时前
从平方到线性:Mamba如何挑战Transformer的长序列效率瓶颈?
人工智能·python·深度学习·vim·transformer
2301_773553622 小时前
Redis怎样优化复制缓冲池大小_调大repl-backlog-size减少频繁的全量同步触发
jvm·数据库·python
三维频道2 小时前
工业级三维扫描实测:汽车灯具复杂结构件的全尺寸 3D 测量方案分析
java·人工智能·python·数码相机·3d·汽车·汽车轻量化制造
weixin_381288182 小时前
HTML lang 属性的正确取值规范:BCP 47 格式详解与最佳实践
jvm·数据库·python
码农飞哥2 小时前
从Java后端到AI应用开发,我这两年做了什么
java·开发语言·人工智能
阿荻在肝了2 小时前
Agent学习七:LangGraph学习-持久化与记忆二
python·学习·agent