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

相关推荐
keyipatience38 分钟前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
我的xiaodoujiao43 分钟前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_408099671 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
爱喝水的鱼丶1 小时前
SAP-ABAP:ALV通用封装实践——搭建可复用的ALV开发工具类,减少80%重复代码
开发语言·性能优化·sap·abap·erp·alv
去码头整点薯条ing2 小时前
某当网登录滑块【协议+OCR】
爬虫·python·ocr
脱胎换骨-军哥2 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust
songroom2 小时前
Kimi K3:Rust封装XTP接口详细教程实践
开发语言·后端·rust
kebeiovo2 小时前
游戏服务端开发:Actor模型详解(Go语言)
开发语言·后端·golang
赶紧写完去睡觉2 小时前
Anaconda 创建虚拟环境与使用
python·pycharm·conda
迷途呀2 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp