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基础-正则表达式
正则表达式概述 正则表达式是处理字符串的一种工具,可以用于查找、删除、替换特定的字符串,主要用于文件内容的处理。与之不同的是,通配符则用于文件名称的匹配。正则表达式通过使用特殊符号,帮助用户轻松实现对文本的操作。 一…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...