济宁专业网站建设,免费行情软件app网站红色,flash简单网站模板,做网站推广费用该文章仅供参考#xff0c;编写人不对任何实验设备、人员及测量结果负责#xff01;#xff01;#xff01;
0 引言
文章主要介绍King3399#xff08;ubuntu文件系统#xff09;风扇控制#xff08;GPIO#xff09;#xff0c;涉及king-rk3399.dts设备树修改#x…该文章仅供参考编写人不对任何实验设备、人员及测量结果负责
0 引言
文章主要介绍King3399ubuntu文件系统风扇控制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描述的是CPUrp-rk3399-board.dtsi描述的是核心板king-rk3399.dts描述的是底板理清三者之间的关系后就能够知道如何修改设备树文件
对于一个成熟的产品例如king3399其硬件电路已经定版输出那么其设备树通常不会进行变动除了像本文第1小节提到的第18号接口外其他功能已经固化也即相关引脚功能已确定不再做变动
这里我们修改FAN控制引脚能够预知修改结果或者修改结果可控则可对该控制引脚功能进行改动上面提到king-rk3399.dts描述的是底板而我们最终实现的功能FAN也是从底板引出因此需要修改的设备树为king-rk3399.dts
打开king-rk3399.dts并做如下修改
禁用原FAN功能逻辑status disabledfan_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;compatiblerockchip,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,pins1 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系列板卡》