当前位置: 首页 > news >正文

King3399(ubuntu文件系统)风扇驱动

该文章仅供参考,编写人不对任何实验设备、人员及测量结果负责!!!

0 引言

文章主要介绍King3399(ubuntu文件系统)风扇控制(GPIO),涉及king-rk3399.dts设备树修改,驱动模块上电自启用

1 散热硬件分析

king3399板载CPU冷却部分由主动散热(风扇)与被动散热(散热槽铝)两个部分组成,若是之前有刷过官方提供的ubuntu镜像应该知道,系统上电就会启动主动散热功能,而对于我们自己编译官方SDK生成的镜像在启动后却并不能自启动该功能,当板子在相对密闭环境或是热天工作时,将会带来安全隐患,本文以此为切入点,学习设备树相关知识

cdrom_king3399_new\03-硬件文档\King3399底板-硬件规格书_20180105.pdf

00 实物图
首先可以在上述网盘路径文档中看到第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

01 原理图
通过上述三个文档可知,第13号接口的元器件位号为J8,在原理图中可以看到J8实际由GPIO1_C2控制通断,在CPU数据手册中可以看到该引脚的可复用功能以及基本电气特性

在没有看数据手册之前,本人一直以为主动散热功能引脚使用的是PWM实现,类似于台式机主板上的风扇,会根据CPU温度调节转速,但king3399该功能并未如此复杂,仅仅是利用一个三极管控制风扇启停

了解上述硬件实现过程后便可着手修改设备树,不同板子该功能引脚可能不同,切记不要上电后盲目控制某个引脚的状态,另外该板子标号为18的接口为空闲接口,可进行输入、输出、ADC、IIC测试,由于引脚间距为2.0mm规格,本人手边无匹配母针,不便使用该接口测试

03 空闲引脚

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并做如下修改

  1. 禁用原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
    
  2. 在根节点下添加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>;
    };
    
  3. 在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文件系统)风扇驱动

该文章仅供参考&#xff0c;编写人不对任何实验设备、人员及测量结果负责&#xff01;&#xff01;&#xff01; 0 引言 文章主要介绍King3399&#xff08;ubuntu文件系统&#xff09;风扇控制&#xff08;GPIO&#xff09;&#xff0c;涉及king-rk3399.dts设备树修改&#x…...

前端开发笔记--html 黑马程序员2

文章目录 前端常用标签一、标题标签二、段落标签和换行标签和水平线标签三、文本格式化标签![请添加图片描述](https://i-blog.csdnimg.cn/direct/87583fa23fe04229b016912051f3fc45.png)四、盒子标签五、图像标签六、连接标签七、注释和特殊字符 八、表格标签的基本使用九、列…...

django(二):定义第一个函数及url介绍

1.定义index函数 """ django里的第一个函数必须是request,不写会报错 """def index(request):return HttpResponse("Hello, world. Youre at the index of djangoProject.")注意&#xff01; ①.index函数里的形参必须为request ②.r…...

66 消息队列

66 消息队列 基础概念 参考资料&#xff1a;消息队列MQ快速入门&#xff08;概念、RPC、MQ实质思路、队列介绍、队列对比、应用场景&#xff09; 消息队列就是一个使用队列来通信的组件&#xff1b;为什么需要消息队列&#xff1f; 在实际的商业项目中&#xff0c;它这么做肯…...

【系统分析师】-案例篇-信息系统安全

1、信息系统的安全威胁 来自于物理环境、通信链路、网络系统、操作系统、应用系统以及管理等多个方面。 物理安全威胁是指对系统所用设备的威胁&#xff0c;如自然灾害、电源故障、数据库故障和设备被盗等造成数据丢失或信息泄漏。 通信链路安全威胁是指在传输线路上安装窃…...

基于极光优化算法(Polar Lights Optimization, PLO)的多无人机协同三维路径规划(提供MATLAB代码)

一、极光优化算法介绍 极光优化算法&#xff08;Polar Lights Optimization, PLO&#xff09;是2024年提出的一种新型的元启发式优化算法&#xff0c;它从极光这一自然现象中汲取灵感。极光是由太阳风中的带电粒子在地球磁场的作用下&#xff0c;与地球大气层中的气体分子碰撞…...

TypeScript类型体操5

类型编程主要的目的就是对类型做各种转换&#xff0c;如何对类型做修改&#xff1f; TypeScript 类型系统支持 3 种可以声明任意类型的变量&#xff1a; type、infer、类型参数。 type&#xff1a;类型别名&#xff0c;声明一个变量存储某个类型。type t Promise<number&g…...

搭建广告展示页Start

想自定义广告- 场景&#xff1a; app冷启动/热启动-有广告需求&#xff0c;就打开广告页&#xff0c;没有的话就去登录或者主页 有的app有的需要广告页&#xff0c;有的不需要&#xff0c;搞个配置呗&#xff01;&#xff01;&#xff01; 通过首选项配置存储我们的一些常用…...

无极低码基础版(部署版)课程计划

基础版(部署版)使用指南 特点 简单:1分钟学会无需编码:会SQL即可适合人群:纯小白0代码写服务1. 本地环境安装 JDKMySQLRedisTomcat2. 环境变量配置 JDK无极低码授权3. 配置文件修改 4. 服务启动 5. 服务发布示例 服务手动注册SQL语句注册6. 新增接口示例 正常新增非空参…...

Word文档功能快捷键大全

以下是 Microsoft Word 的全面快捷键大全&#xff0c;涵盖了文档操作、文本编辑、格式化、导航等多种功能&#xff0c;帮助你提高工作效率。 Word 全面快捷键和快捷方式表 功能类别快捷键/快捷方式功能描述基本文档操作Ctrl N新建文档Ctrl O打开文档Ctrl S保存文档F12另存…...

题目:1297. 子串的最大出现次数

> Problem: 1297. 子串的最大出现次数 题目&#xff1a;1297. 子串的最大出现次数 题目描述 给定一个字符串 s&#xff0c;要求找到满足以下条件的任意子串的出现次数&#xff0c;并返回该子串的最大出现次数&#xff1a; 子串中不同字母的数目必须小于等于 maxLetters。…...

一力破万法,高并发系统优化通解思路

高并发系统优化&#xff1a;从理论到Java实践 针对高并发场景&#xff0c;以下策略能够有效提升系统的稳定性和响应速度&#xff1a; 加集群 结果&#xff1a;通过增加服务器数量&#xff0c;实现负载均衡&#xff0c;提高系统整体处理能力。过程&#xff1a; 配置负载均衡器&…...

P8635 [蓝桥杯 2016 省 AB] 四平方和

对于一个给定的正整数&#xff0c;可能存在多种平方和的表示法。 要求你对 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 构建的开源分布式搜索引擎和分析引擎。它专为云计算环境设计&#xff0c;提供了一个分布式的、高可用的实时分析和搜索平台。Elasticsearch 可以处理大量数据&#xff0c;并且具备横向扩展能力&#xff0c;能够通过增加更多的硬…...

2024年四非边缘鼠鼠计算机保研回忆(记录版 碎碎念)

Hi&#xff0c;大家好&#xff0c;我是半亩花海。写下这篇博客时已然是金秋十月&#xff0c;心中的石头终于落地&#xff0c;恍惚间百感交集。对于保研这条路&#xff0c;我处于摸着石头过河、冲击、随缘的这些状态。计算机保研向来比其他专业难&#xff0c;今年形势更是艰难。…...

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. 下载网址&#xff08;为软件的下载界面&#xff09;&#xff1a;http://topaz.gatech.edu/GeneMark/license_download.cgi 2.下载界面 根据自己的需求下载对应的版本和类型的gm_key秘钥 3.填写注册信息 4. 点击下载软件和密钥 5. 将秘钥…...

线性回归逻辑回归-笔记

一、线性回归&#xff08;Linear Regression&#xff09; 1. 定义 线性回归是一种用于回归问题的算法&#xff0c;旨在找到输入特征与输出值之间的线性关系。它试图通过拟合一条直线来最小化预测值与真实值之间的误差。 2. 模型表示 线性回归模型假设目标变量&#xff08;输…...

如何将数据从 AWS S3 导入到 Elastic Cloud - 第 1 部分:Elastic Serverless Forwarder

作者&#xff1a;来自 Elastic Hemendra Singh Lodhi 这是多部分博客系列的第一部分&#xff0c;探讨了将数据从 AWS S3 导入 Elastic Cloud 的不同选项。 Elasticsearch 提供了多种从 AWS S3 存储桶导入数据的选项&#xff0c;允许客户根据其特定需求和架构策略选择最合适的方…...

Linux基础-正则表达式

正则表达式概述 正则表达式是处理字符串的一种工具&#xff0c;可以用于查找、删除、替换特定的字符串&#xff0c;主要用于文件内容的处理。与之不同的是&#xff0c;通配符则用于文件名称的匹配。正则表达式通过使用特殊符号&#xff0c;帮助用户轻松实现对文本的操作。 一…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...