瑞芯微RK3588S Android12 REE 指纹代码移植(1)--Kernel移植
一概述RK3588S Android12 SDK源码中kernel 版本为kernel-5.10使用的是gf3626指纹模组。使用ree 进行spi 通讯。指纹模组供电电压3.3V SPI通讯电压1.8V 最高通讯速率24M。以此记录移植过程。二移植代码到kernel中移植前先把代码建仓备份使用git init 建仓 touch .gitignore 创建忽略加仓规则忽略编译产出文件加仓。 最后git add 加仓 git commit 提交。# # 编译产物# *.o *.a *.so *.so.* *.dylib *.dll *.exe *.ko *.out *.elf *.bin *.hex *.map# # Android# out/ *.img *.dtb *.dtbo *.ko *.vdex *.odex *.oat *.art .jack-server/ .jack/# # Build 目录# build/ _build/ cmake-build-*/ .idea/ *.iml# # 临时文件# *~ *.swp *.swo .DS_Store Thumbs.db *.log1在kernel-5.10/drivers/input 中建立一个文件夹方入指纹代码。digiproP510:~/RK3588S/android12-rkr14.1-rk3588/kernel-5.10/drivers/input$ mkdir gf3626digiproP510:~/RK3588S/android12-rkr14.1-rk3588/kernel-5.10/drivers/input$lsgameport keyboard misc sensors tablet gf3626 joystick Makefile remotectl serio touchscreen Kconfig mouse rmi42修改当前目录的Makefile 把gf3626 文件夹加入编译digiproP510:~/RK3588S/android12-rkr14.1-rk3588/kernel-5.10/drivers/input$ vim Makefileobj-ygf3626/3, 进入gf3626 驱动文件夹编写Makefile 将驱动文件加入编译。digiproP510:~/RK3588S/android12-rkr14.1-rk3588/kernel-5.10/drivers/input/gf3626$ lsgf_common.c gf_common.h gf_common.o gf_platform.c gf_spi_access.c gf_spi_access.h Kconfig MakefiledigiproP510:~/RK3588S/android12-rkr14.1-rk3588/kernel-5.10/drivers/input/gf3626$vim Makefileobj-ygf_common.o gf_spi_access.o gf_platform.o4在DTSI中添设置spi 设备对应的管脚 以及 中断 和 复位脚的设定。从开发板外接是GPIO脚看只有SPI0_M2可用DTSI 添加内容如下compatible 需要与kernel 里面的compatible 相同 不然无法加载probe。 电源使用3.3V长供电因此暂时不用测试电源脚。digiproP510:~/RK3588S/android12-rkr14.1-rk3588$ vim kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588s-lubancat-4.dtsispi0{statusokay;#address-cells 1;#size-cells 0;pinctrl-namesdefault;pinctrl-0spi0m2_cs0spi0m2_pins;//设定SPI 相关引脚 num-cs1;goodix_fp0{compatiblerockchip,fingerprint;reg0;//chipselect0:cs01:cs1 spi-max-frequency24000000;//spi output clock interrupt-parentgpio3;interruptsRK_PD4 IRQ_TYPE_EDGE_FALLING;irq-gpiosgpio3 RK_PD4 IRQ_TYPE_EDGE_FALLING;reset-gpiosgpio3 RK_PD2 GPIO_ACTIVE_LOW;};};5修改kernel 的 compatible 以及 中断 和 复位脚的名字 与 DTSI 一致//compatible static const struct of_device_id gf_of_match[]{{.compatiblerockchip,fingerprint,},{},};/*INT REST pins reference.*/intgf_get_gpio_dts_info(structgf_device*gf_dev){intrc0;//get reset resourcegf_dev-reset_gpioof_get_named_gpio(gf_dev-spi-dev.of_node,reset-gpios,0);if(!gpio_is_valid(gf_dev-reset_gpio)){gf_debug(ERR_LOG,%s, of_get_named_gpio RESET GPIO is invalid.\n,__func__);return-1;}rcgpio_request(gf_dev-reset_gpio,reset-gpios);if(rc){gf_debug(ERR_LOG,%s, Failed to request RESET GPIO. rc %d\n,__func__,rc);return-1;}gpio_direction_output(gf_dev-reset_gpio,1);//get irq resourecegf_dev-irq_gpioof_get_named_gpio(gf_dev-spi-dev.of_node,irq-gpios,0);gf_debug(DEBUG_LOG,%s, gf:irq-gpios :%d\n,__func__,gf_dev-irq_gpio);if(!gpio_is_valid(gf_dev-irq_gpio)){gf_debug(ERR_LOG,%s, IRQ GPIO is invalid.\n,__func__);return-1;}rcgpio_request(gf_dev-irq_gpio,irq-gpios);if(rc){gf_debug(ERR_LOG,%s, Failed to request IRQ GPIO. rc %d\n,__func__,rc);return-1;}gpio_direction_input(gf_dev-irq_gpio);return0;}6关于 驱动注册函数还是使用 spi设备总线驱动注册函数 spi_register_driver 注册。staticstructspi_drivergf_spi_driver{.driver{.nameGF_DEV_NAME,.busspi_bus_type,.ownerTHIS_MODULE,#ifdefCONFIG_OF.of_match_tablegf_of_match,#endif},.probegf_probe,.removegf_remove,};staticint__initgf_init(void){intstatus0;FUNC_ENTRY();statusspi_register_driver(gf_spi_driver);if(status0){gf_debug(ERR_LOG,%s, Failed to register SPI driver.\n,__func__);return-EINVAL;}FUNC_EXIT();returnstatus;}7 修改access_ok函数老版本的kernel 的 access_ok 函数有三个参数 kernel-5.10 这个版本的access_ok 只有两个参数 需要修改 。 不然会编译报错。//修改前retval!access_ok(VERIFY_WRITE,(void__user*)arg,_IOC_SIZE(cmd));//修改后retval!access_ok((void__user*)arg,_IOC_SIZE(cmd));8编译验证。编译完成后 烧录boot 重开机后dev下 指纹驱动设备节点goodix_fp 已生成。rk3588s_lubancat_4_mipi600p:/dev# ls goo*goodix_fpprobe 函数中有加spi 读取 ID 的代码。 获取到期望的数值。chip id 0x7, 0xa0, 0x0, 0x25。[10:37:33.169][2.984206][T1][gf]gf_init,1300,enter[10:37:33.169][2.984245][T1][gf]gf_probe,991,enter[10:37:33.169][2.984250][T1][gf]gf_probe,Setting gf device configuration[10:37:33.169][2.984275][T1][gf]gf_get_gpio_dts_info,gf:irq-gpios:124[10:37:33.169][2.984309][T1][gf]gf_probe,major235,minor0[10:37:33.169][2.984366][T1][gf]gf_probe,device create success.[10:37:33.169][2.984372][T1][gf]gf_probe,Success create sysfs file.[10:37:33.169][2.984416][T1]input:gf-keys as/devices/virtual/input/input2[10:37:33.169][2.984539][T1][gf]gf_probe irq thread request success![10:37:33.169][2.984545][T1][gf]gf_disable_irq disable interrupt![10:37:33.169][2.984558][T1][gf][gf_netlink_init]:netlink create success[10:37:33.169][2.984768][T1][gf]gf_probe,chip id0x7,0xa0,0x0,0x25[10:37:33.169][2.984772][T1][gf]gf_probe probe finished[10:37:33.169][2.984776][T1]version V1.2.02[10:37:33.169][2.984780][T1][gf]gf_probe,1173,exit[10:37:33.169][2.984801][T1][gf]gf_init,1308,exit9kernel 驱动移植本该完成了但在阅读开发板资料时 发现开发板使用通讯电压为3.3V 而指纹模块通讯电压是1.8V 现在通讯速率1M 勉强还能读到。 一旦20M 通讯速率时可能会出错。 但是开发板已经将通讯电压固定成3.3V 无法改成1.8V 因此需要通过电压转换模块来将电压改成1.8V。 待收到电压转换模块后再做处理。10kernel 移植完成之后接下来需要移植上层 详情请见 瑞芯微RK3588S Android12 REE 指纹代码移植2–Hal 移植

相关新闻

如何在Linux系统上完美支持100+打印机:foo2zjs开源驱动完整指南

如何在Linux系统上完美支持100+打印机:foo2zjs开源驱动完整指南

如何在Linux系统上完美支持100打印机:foo2zjs开源驱动完整指南 【免费下载链接】foo2zjs A linux printer driver for QPDL protocol - copy of http://foo2zjs.rkkda.com/ 项目地址: https://gitcode.com/gh_mirrors/fo/foo2zjs foo2zjs是一个强大的开源打印…

2026/10/7 19:40:07 阅读更多 →
2026年服装企业管理升级:从设计到成衣,ERP如何打通研产供销全链路?

2026年服装企业管理升级:从设计到成衣,ERP如何打通研产供销全链路?

2026年,服装行业“小单快反”模式已从尝试走向主流。面对消费者多变的需求和剧烈波动的市场,传统“大批量备货、长周期生产”的模式风险越来越高。许多服装企业,特别是主打时装、礼服、牛仔等品类的品牌,正面临一个新课题&#xf…

2026/10/9 3:16:01 阅读更多 →
分形时间认知理论中豪斯多夫维数D_t≈1.261的黄金比例构造深度研究

分形时间认知理论中豪斯多夫维数D_t≈1.261的黄金比例构造深度研究

分形时间认知理论中豪斯多夫维数D_t≈1.261的黄金比例构造深度研究 作者:方见华 单位:世毫九实验室 摘要 该维数并非经验拟合的几何巧合,而是世毫九SH9原创分形时间认知理论下,认知准晶体结构、递归对抗动力学与黄金比例内禀标度性…

2026/10/2 0:40:03 阅读更多 →

最新新闻

Eclipse MAT实战:Java OOM堆转储与内存泄漏根因定位指南

Eclipse MAT实战:Java OOM堆转储与内存泄漏根因定位指南

简介:Eclipse MAT(Memory Analyzer Tool)完整软件包,适用于Java开发与性能优化人员,用于解析JVM堆转储文件,定位内存泄漏、分析对象引用关系。压缩包共5442个文件,约133.56MB,以HTML…

2026/10/9 16:55:20 阅读更多 →
encodingchecker:高置信度文件编码检测工具

encodingchecker:高置信度文件编码检测工具

简介:encodingchecker 是一款基于 Java 开发的轻量级文件编码检查与转换工具,面向 Java 开发者、后端工程师及文本处理需求者,解决跨平台、多系统间因编码不一致导致的乱码、解析失败等典型问题。工具支持自动识别并转换 12 种主流编码格式&a…

2026/10/9 16:55:20 阅读更多 →
VS2019调试报‘系统找不到指定文件’根因与精准修复

VS2019调试报‘系统找不到指定文件’根因与精准修复

简介:本资源是一份面向Visual Studio 2019初学者的实操型排错指南,聚焦解决开发中高频出现的「无法启动程序(系统找不到指定文件)」问题。内容直击新手常见误区,如多main函数冲突、项目启动配置错误、依赖路径缺失、生…

2026/10/9 16:55:20 阅读更多 →
TPS压测评估:用二八原则替代平均值,看P80/P95/P99分位数

TPS压测评估:用二八原则替代平均值,看P80/P95/P99分位数

1. 压测指标里最容易被误读的那个数字做性能压测的人,迟早会撞上TPS这个指标。但真正让人头疼的,往往不是怎么把TPS压上去,而是压完之后怎么解读它。我见过太多团队拿着平均TPS去汇报,结果线上照样出问题——因为平均值这个东西&a…

2026/10/9 16:55:20 阅读更多 →
Claude Code Mods实战:给终端AI助手加工具、画界面,打造专属工作台

Claude Code Mods实战:给终端AI助手加工具、画界面,打造专属工作台

如果你也和我一样,大半的工作时间都泡在终端里,那对 Claude Code 这类命令行 AI 助手一定不陌生。它最迷人的地方,不是能陪你聊天、帮你写代码,而是它真的会在你的机器上动手干活:跑命令、改文件、查日志、调接口。可默…

2026/10/9 16:55:20 阅读更多 →
崂山森林火灾扩散模拟分析与决策系统:Rothermel模型与栅格化实现

崂山森林火灾扩散模拟分析与决策系统:Rothermel模型与栅格化实现

简介:崂山森林火灾扩散模拟分析与决策系统是一套面向森林防火应急响应与指挥决策的综合性软件工程,适合GIS开发、应急管理及火灾建模方向的学习者与研究人员参考。系统融合地理信息系统、火灾扩散数学模型与决策支持技术,涵盖数据采集预处理、…

2026/10/9 16:54:18 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →