news 2026/7/31 17:51:51

瑞芯微RK3588S Android12 REE 指纹代码移植(1)--Kernel移植

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
瑞芯微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 *.log

1,在kernel-5.10/drivers/input 中建立一个文件夹方入指纹代码。

digipro@P510:~/RK3588S/android12-rkr14.1-rk3588/kernel-5.10/drivers/input$ mkdir gf3626
digipro@P510:~/RK3588S/android12-rkr14.1-rk3588/kernel-5.10/drivers/input$lsgameport keyboard misc sensors tablet gf3626 joystick Makefile remotectl serio touchscreen Kconfig mouse rmi4

2,修改当前目录的Makefile, 把gf3626 文件夹加入编译

digipro@P510:~/RK3588S/android12-rkr14.1-rk3588/kernel-5.10/drivers/input$ vim Makefile

obj-y+=gf3626/

3, 进入gf3626 驱动文件夹编写Makefile, 将驱动文件加入编译。

digipro@P510:~/RK3588S/android12-rkr14.1-rk3588/kernel-5.10/drivers/input/gf3626$ ls

gf_common.c gf_common.h gf_common.o gf_platform.c gf_spi_access.c gf_spi_access.h Kconfig Makefile

digipro@P510:~/RK3588S/android12-rkr14.1-rk3588/kernel-5.10/drivers/input/gf3626$vim Makefile

obj-y+=gf_common.o gf_spi_access.o gf_platform.o

4,在DTSI中添设置spi 设备对应的管脚 以及 中断 和 复位脚的设定。

从开发板外接是GPIO脚看,只有SPI0_M2可用,DTSI 添加内容如下,compatible 需要与kernel 里面的compatible 相同, 不然无法加载probe。 电源使用3.3V长供电,因此暂时不用测试电源脚。

digipro@P510:~/RK3588S/android12-rkr14.1-rk3588$ vim kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588s-lubancat-4.dtsi

&spi0{status="okay";#address-cells = <1>;#size-cells = <0>;pinctrl-names="default";pinctrl-0=<&spi0m2_cs0&spi0m2_pins>;//设定SPI 相关引脚 num-cs=<1>;goodix_fp@0{compatible="rockchip,fingerprint";reg=<0>;//chipselect0:cs01:cs1 spi-max-frequency=<24000000>;//spi output clock interrupt-parent=<&gpio3>;interrupts=<RK_PD4 IRQ_TYPE_EDGE_FALLING>;irq-gpios=<&gpio3 RK_PD4 IRQ_TYPE_EDGE_FALLING>;reset-gpios=<&gpio3 RK_PD2 GPIO_ACTIVE_LOW>;};};

5,修改kernel 的 compatible 以及 中断 和 复位脚的名字 与 DTSI 一致

//compatible static const struct of_device_id gf_of_match[]={{.compatible="rockchip,fingerprint",},{},};
/*INT REST pins reference.*/intgf_get_gpio_dts_info(structgf_device*gf_dev){intrc=0;//get reset resourcegf_dev->reset_gpio=of_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;}rc=gpio_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_gpio=of_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;}rc=gpio_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={.name=GF_DEV_NAME,.bus=&spi_bus_type,.owner=THIS_MODULE,#ifdefCONFIG_OF.of_match_table=gf_of_match,#endif},.probe=gf_probe,.remove=gf_remove,};staticint__initgf_init(void){intstatus=0;FUNC_ENTRY();status=spi_register_driver(&gf_spi_driver);if(status<0){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_fp

probe 函数中有加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,major=235,minor=0[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 id=0x7,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,exit

9,kernel 驱动移植本该完成了,但在阅读开发板资料时, 发现开发板使用通讯电压为3.3V, 而指纹模块通讯电压是1.8V, 现在通讯速率1M, 勉强还能读到。 一旦20M 通讯速率时可能会出错。 但是开发板已经将通讯电压固定成3.3V 无法改成1.8V, 因此需要通过电压转换模块来将电压改成1.8V。 待收到电压转换模块后再做处理。

10,kernel 移植完成之后,接下来需要移植上层, 详情请见 瑞芯微RK3588S Android12 REE 指纹代码移植(2)–Hal 移植

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 17:50:56

第二阶段 12 · range 范围查询

阶段&#xff1a;第二阶段 / 查询能力 ES 查询&#xff1a;range | PostgreSQL 对照&#xff1a;BETWEEN / > / <1. 概念 range 用于数值、日期、字符串的范围过滤。参数&#xff1a;参数含义SQL 对应gt大于>gte大于等于>lt小于<lte小于等于<range 通常放在 …

作者头像 李华
网站建设 2026/7/31 17:49:30

Javase基础语法_分支结构等_作业

1.水仙花数分析&#xff1a;如&#xff1b;153&#xff1d;1^3&#xff0b;5^3&#xff0b;3^3&#xff0c;则153是一个“水仙花数“。因此1.求这个数有几位 2.求这个数字的每一位这时我们可以定义一个count&#xff0c;并且/10&#xff0c;/10一次去掉一位&#xff0c;count1f…

作者头像 李华
网站建设 2026/7/31 17:48:44

盘锦高三综合评价报考,家长怎么少走弯路?

这两年我身边不少盘锦高三家长&#xff0c;一聊到综合评价就有点懵&#xff1a; “听说能多一条路&#xff0c;但到底适不适合我家孩子&#xff1f;” “材料要准备什么&#xff0c;时间节点会不会错过&#xff1f;” “是不是只看成绩&#xff0c;还是还要看活动、奖项、面试&…

作者头像 李华
网站建设 2026/7/31 17:44:55

RAG 召回90%却答错?Taotoken实测发现重排阶段3个致命疏忽

企业知识库系统重排优化实战&#xff1a;从31%到79%准确率的跃迁之路 召回≠可用&#xff1a;深入解析指标欺骗性 在构建企业知识库系统时&#xff0c;我们往往陷入一个典型误区&#xff1a;过度追求召回率&#xff08;Recall&#xff09;指标。经过连续72小时的严苛测试&…

作者头像 李华
网站建设 2026/7/31 17:44:03

Git常用命令 个人总结

Git常用命令 个人总结git 介绍一、用户名和邮箱1、查看GIT配置情况2、配置全局用户名和邮箱3、修改默认编辑器二、基础命令1、git 帮助命令2、初始化本地git仓库3、查看git存储状态4、添加文件到暂存区5、将暂存区内容提交为一个版本6、屏蔽文件不参与git管理三、查看命令1、查…

作者头像 李华