King3399(ubuntu文件系统)风扇驱动
该文章仅供参考,编写人不对任何实验设备、人员及测量结果负责!!!
0 引言
文章主要介绍King3399(ubuntu文件系统)风扇控制(GPIO),涉及king-rk3399.dts设备树修改,驱动模块上电自启用
1 散热硬件分析
king3399板载CPU冷却部分由主动散热(风扇)与被动散热(散热槽铝)两个部分组成,若是之前有刷过官方提供的ubuntu镜像应该知道,系统上电就会启动主动散热功能,而对于我们自己编译官方SDK生成的镜像在启动后却并不能自启动该功能,当板子在相对密闭环境或是热天工作时,将会带来安全隐患,本文以此为切入点,学习设备树相关知识
cdrom_king3399_new\03-硬件文档\King3399底板-硬件规格书_20180105.pdf

首先可以在上述网盘路径文档中看到第13号接口为风扇(FAN),且仅有这一个功能输出,接口由PIN1与PIN2组成,显然这两只引脚并非由CPU直接控制
cdrom_king3399_new\03-硬件文档\底板硬件资料\KING3399-20180713 位号图.pdf
cdrom_king3399_new\03-硬件文档\底板硬件资料\KING3399-20180712 原理图.pdf
cdrom_king3399_new\03-硬件文档\芯片手册\Rockchip RK3399 Datasheet V1.0-20160504.pdf

通过上述三个文档可知,第13号接口的元器件位号为J8,在原理图中可以看到J8实际由GPIO1_C2控制通断,在CPU数据手册中可以看到该引脚的可复用功能以及基本电气特性
在没有看数据手册之前,本人一直以为主动散热功能引脚使用的是PWM实现,类似于台式机主板上的风扇,会根据CPU温度调节转速,但king3399该功能并未如此复杂,仅仅是利用一个三极管控制风扇启停
了解上述硬件实现过程后便可着手修改设备树,不同板子该功能引脚可能不同,切记不要上电后盲目控制某个引脚的状态,另外该板子标号为18的接口为空闲接口,可进行输入、输出、ADC、IIC测试,由于引脚间距为2.0mm规格,本人手边无匹配母针,不便使用该接口测试

1 设备树修改
cdrom_king3399_new\02-软件文档\荣品文档\源码文件路径.xlsx
在网盘上述路径中可以找到板子设备树文件的路径如下
/home/username/ws/sdk/kernel/arch/arm64/boot/dts/rockchip/king-rk3399.dts
然实际路径应如下所示
/home/username/ws/sdk/kernel/arch/arm64/boot/dts/rockchip/rk3399/king-rk3399.dts
除此之外这里还涉及到以下两个设备树文件
/home/username/ws/sdk/kernel/arch/arm64/boot/dts/rockchip/rk3399/rp-rk3399-board.dtsi
/home/username/ws/sdk/kernel/arch/arm64/boot/dts/rockchip/rk3399.dtsi
这里需要理清这三个设备树之间的关系,以king3399为例,该开发板由两个主要部分组成:核心板与底板,这三个文件大致可以(并不准确)理解为rk3399.dtsi描述的是CPU,rp-rk3399-board.dtsi描述的是核心板,king-rk3399.dts描述的是底板,理清三者之间的关系后就能够知道如何修改设备树文件
对于一个成熟的产品,例如king3399,其硬件电路已经定版输出,那么其设备树通常不会进行变动,除了像本文第1小节提到的第18号接口外,其他功能已经固化,也即相关引脚功能已确定,不再做变动
这里我们修改FAN控制引脚,能够预知修改结果或者修改结果可控,则可对该控制引脚功能进行改动,上面提到king-rk3399.dts描述的是底板,而我们最终实现的功能(FAN)也是从底板引出,因此需要修改的设备树为king-rk3399.dts
打开king-rk3399.dts并做如下修改
- 禁用原FAN功能逻辑
status = "disabled"fan_gpio_control {compatible = "fan_gpio_control";gpio-pin = <&gpio1 RK_PC2 GPIO_ACTIVE_HIGH>;temperature-device = "cpu-thermal";temp-on = <60000>;time = <10000>;status = "disabled"; };// 注:原FAN功能逻辑涉及文件如下// /home/username/ws/sdk/kernel/drivers/rongpin/rp_fan_power.c// /home/username/ws/sdk/buildroot/output/rockchip_rk3399/build/linux-headers-custom/drivers/rongpin/rp_fan_power.c// /home/username/ws/sdk/buildroot/output/rockchip_rk3399_recovery/build/linux-headers-custom/drivers/rongpin/rp_fan_power.c - 在根节点下添加fan_test子节点
fan_test: fan_test {status = "okay";compatible="rockchip,rk3399";fan-gpios = <&gpio1 RK_PC2 GPIO_ACTIVE_HIGH>;pinctrl-names = "default";pinctrl-0 = <&fan_test_pin>; }; - 在pinctrl子系统中配置FAN引脚
&pinctrl{fan_test{fan_test_pin:fan_test_pin{rockchip,pins=<1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;};};};
对king-rk3399.dts完成上述修改后便可重新编译内核,在/home/username/ws/sdk/目录下执行./build.sh kernel,大约2分钟完成编译,可在/home/username/ws/sdk/rockdev目录下查看生成的boot.img,将该文件(其他文件若无改动可只单独烧录boot.img)烧录到king3399并重启
修改后的king-rk3399.dts可在文末仓库链接中获取
2 编译FAN驱动模块
在ubuntu主机/home/username/ws/目录下创建myfan文件夹,并在该文件夹内创建fan_test.c、fan_app.c与Makefile文件,程序参考的《[野火]《嵌入式Linux驱动开发实战指南—基于LubanCat RK系列板卡》_20240727.pdf(第 11 章 Pinctrl 子系统和 GPIO 子系统)》
编写完fan_test.c、fan_app.c与Makefile文件后在/home/username/ws/myfan/目录下执行make指令,若无报错可在该目录下生成fan_test.ko与fan_app两个文件,使用scp将这两个文件传到开发板子的lib/modules/x.xx.xxx下并加载模块,此时可以看到风扇启动,在该目录执行sudo ./fan_app 0关闭风扇,若想再次启用可以执行sudo ./fan_app 1
3 开机自启动FAN
回顾我们写这篇文章的出发点:系统上电时主动冷却功能没有启用,如果我们只是单纯完成本章上述步骤依然没有解决这个问题,而且,由于我们在king-rk3399.dts中禁用了原FAN功能逻辑status = "disabled",如果在使用时忘记去开启FAN,这就会导致无论何种情况,系统的主动冷却功能都无法启用,这显然是致命的BUG
为解决上述问题,我们需要系统在上电时自动启用FAN功能,打开king3399的/etc/modules-load.d/modules.conf文件,在文件中新添加一行fan_test并保存,此时重启系统可以看到FAN功能上电自动启用
fan_test.c、fan_app.c与Makefile文件可在文末仓库链接中获取
[1] Git代码仓库
[2] 《【野火】嵌入式Linux驱动开发实战指南—基于LubanCat RK系列板卡》
相关文章:
King3399(ubuntu文件系统)风扇驱动
该文章仅供参考,编写人不对任何实验设备、人员及测量结果负责!!! 0 引言 文章主要介绍King3399(ubuntu文件系统)风扇控制(GPIO),涉及king-rk3399.dts设备树修改&#x…...
前端开发笔记--html 黑马程序员2
文章目录 前端常用标签一、标题标签二、段落标签和换行标签和水平线标签三、文本格式化标签四、盒子标签五、图像标签六、连接标签七、注释和特殊字符 八、表格标签的基本使用九、列…...
django(二):定义第一个函数及url介绍
1.定义index函数 """ django里的第一个函数必须是request,不写会报错 """def index(request):return HttpResponse("Hello, world. Youre at the index of djangoProject.")注意! ①.index函数里的形参必须为request ②.r…...
66 消息队列
66 消息队列 基础概念 参考资料:消息队列MQ快速入门(概念、RPC、MQ实质思路、队列介绍、队列对比、应用场景) 消息队列就是一个使用队列来通信的组件;为什么需要消息队列? 在实际的商业项目中,它这么做肯…...
【系统分析师】-案例篇-信息系统安全
1、信息系统的安全威胁 来自于物理环境、通信链路、网络系统、操作系统、应用系统以及管理等多个方面。 物理安全威胁是指对系统所用设备的威胁,如自然灾害、电源故障、数据库故障和设备被盗等造成数据丢失或信息泄漏。 通信链路安全威胁是指在传输线路上安装窃…...
基于极光优化算法(Polar Lights Optimization, PLO)的多无人机协同三维路径规划(提供MATLAB代码)
一、极光优化算法介绍 极光优化算法(Polar Lights Optimization, PLO)是2024年提出的一种新型的元启发式优化算法,它从极光这一自然现象中汲取灵感。极光是由太阳风中的带电粒子在地球磁场的作用下,与地球大气层中的气体分子碰撞…...
TypeScript类型体操5
类型编程主要的目的就是对类型做各种转换,如何对类型做修改? TypeScript 类型系统支持 3 种可以声明任意类型的变量: type、infer、类型参数。 type:类型别名,声明一个变量存储某个类型。type t Promise<number&g…...
搭建广告展示页Start
想自定义广告- 场景: app冷启动/热启动-有广告需求,就打开广告页,没有的话就去登录或者主页 有的app有的需要广告页,有的不需要,搞个配置呗!!! 通过首选项配置存储我们的一些常用…...
无极低码基础版(部署版)课程计划
基础版(部署版)使用指南 特点 简单:1分钟学会无需编码:会SQL即可适合人群:纯小白0代码写服务1. 本地环境安装 JDKMySQLRedisTomcat2. 环境变量配置 JDK无极低码授权3. 配置文件修改 4. 服务启动 5. 服务发布示例 服务手动注册SQL语句注册6. 新增接口示例 正常新增非空参…...
Word文档功能快捷键大全
以下是 Microsoft Word 的全面快捷键大全,涵盖了文档操作、文本编辑、格式化、导航等多种功能,帮助你提高工作效率。 Word 全面快捷键和快捷方式表 功能类别快捷键/快捷方式功能描述基本文档操作Ctrl N新建文档Ctrl O打开文档Ctrl S保存文档F12另存…...
题目:1297. 子串的最大出现次数
> Problem: 1297. 子串的最大出现次数 题目:1297. 子串的最大出现次数 题目描述 给定一个字符串 s,要求找到满足以下条件的任意子串的出现次数,并返回该子串的最大出现次数: 子串中不同字母的数目必须小于等于 maxLetters。…...
一力破万法,高并发系统优化通解思路
高并发系统优化:从理论到Java实践 针对高并发场景,以下策略能够有效提升系统的稳定性和响应速度: 加集群 结果:通过增加服务器数量,实现负载均衡,提高系统整体处理能力。过程: 配置负载均衡器&…...
P8635 [蓝桥杯 2016 省 AB] 四平方和
对于一个给定的正整数,可能存在多种平方和的表示法。 要求你对 44个数排序使得 0≤a≤b≤c≤d。 输入 #1复制 5 输出 #1 0 0 1 2 输入 #2 12 输出 #2 0 2 2 2 输入 #3 773535 输出 #3 1 1 267 838 代码 #include<bits/stdc.h> using namespace …...
ElasticSearch是什么?
1.概述 Elasticsearch 是一个基于 Apache Lucene 构建的开源分布式搜索引擎和分析引擎。它专为云计算环境设计,提供了一个分布式的、高可用的实时分析和搜索平台。Elasticsearch 可以处理大量数据,并且具备横向扩展能力,能够通过增加更多的硬…...
2024年四非边缘鼠鼠计算机保研回忆(记录版 碎碎念)
Hi,大家好,我是半亩花海。写下这篇博客时已然是金秋十月,心中的石头终于落地,恍惚间百感交集。对于保研这条路,我处于摸着石头过河、冲击、随缘的这些状态。计算机保研向来比其他专业难,今年形势更是艰难。…...
clickhouse常用脚本语句
1.创建库和删除库 drop database IF EXISTS rt_db CREATE DATABASE rt_db ENGINE = Ordinary; CREATE DATABASE rt_db ENGINE = Atomic;2.创建表 CREATE TABLE IF NOT EXISTS intellect_alarm_info ( `id` UInt64 , `client_info_id...
GeneMark软件的秘钥gm_key失效怎么办?
GeneMark软件的gm_key失效怎么办 1. 下载网址(为软件的下载界面):http://topaz.gatech.edu/GeneMark/license_download.cgi 2.下载界面 根据自己的需求下载对应的版本和类型的gm_key秘钥 3.填写注册信息 4. 点击下载软件和密钥 5. 将秘钥…...
线性回归逻辑回归-笔记
一、线性回归(Linear Regression) 1. 定义 线性回归是一种用于回归问题的算法,旨在找到输入特征与输出值之间的线性关系。它试图通过拟合一条直线来最小化预测值与真实值之间的误差。 2. 模型表示 线性回归模型假设目标变量(输…...
如何将数据从 AWS S3 导入到 Elastic Cloud - 第 1 部分:Elastic Serverless Forwarder
作者:来自 Elastic Hemendra Singh Lodhi 这是多部分博客系列的第一部分,探讨了将数据从 AWS S3 导入 Elastic Cloud 的不同选项。 Elasticsearch 提供了多种从 AWS S3 存储桶导入数据的选项,允许客户根据其特定需求和架构策略选择最合适的方…...
Linux基础-正则表达式
正则表达式概述 正则表达式是处理字符串的一种工具,可以用于查找、删除、替换特定的字符串,主要用于文件内容的处理。与之不同的是,通配符则用于文件名称的匹配。正则表达式通过使用特殊符号,帮助用户轻松实现对文本的操作。 一…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
