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

相关推荐
阿俊-全栈开发28 分钟前
LikeShop 单商户SaaS商城分销模块二开:佣金计算与结算逻辑实现
java·开发语言·微服务·likeshop·likeshop开源商城·likeshop多商户
夏天拐跑了西瓜2 小时前
一文入门LangChain:从框架认知到构建你的第一个AI Agent
python·langchain·conda·agent
魔猴疯猿3 小时前
从0到1用Python开发第一个智能体
人工智能·python·深度学习·神经网络·机器学习
m0_380743874 小时前
C++中的freopen的用法实例详解
开发语言·c++
xiaoqi01954 小时前
机器学习因子分析实战:从量化特征到可视化决策
人工智能·python·机器学习
Escalating_xu4 小时前
【Python】基础语法(1):常量、变量、类型、输入输出与运算符
开发语言·python
jimy15 小时前
polymorph.cpp里面的“析构函数、智能指针”问题
开发语言·c++
m0_380743875 小时前
PHP 8.3 缓存清除不生效怎么排查
开发语言·php
happylifetree5 小时前
Python14:核心语法-数据存储与运算-字符串定义
python
hhb_6185 小时前
AIRAGDebug:一键定位RAG链路异常
人工智能·python·算法