恩山无线论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10530|回复: 47

初步解决粒子云风扇和指示灯控制(不动硬件)

    [复制链接]
发表于 2019-7-5 12:21 | 显示全部楼层 |阅读模式
本帖最后由 dbh 于 2019-7-15 19:17 编辑

感谢各位大侠的努力,使得粒子云在刷机linux后能正常运行,本人通过对128gpio的逐个检测,经历n次死机/刷机后,找出了指示灯和风扇的gpio端口,基本实现对其控制。以下操作均基于ss2 和Armbian_5.75https://dl.armbian.com/rock64/archive/Armbian_5.75_Rock64_Debian_stretch_default_4.4.174.7z,并且所有命令以root用户执行:


一,指示灯

指示灯的gpip85。通过如下指令使指示灯变蓝:
echo 85 > /sys/class/gpio/export
echo “high” > /sys/class/gpio/gpio85/direction
echo 85 > /sys/class/gpio/unexport


通过如下指令使指示灯变红:
echo 85 > /sys/class/gpio/export
echo “low” > /sys/class/gpio/gpio85/direction
echo 85 > /sys/class/gpio/unexport


二、风扇

         风扇的gpio70,通过如下命令启动:
echo 70 > /sys/class/gpio/export
echo “high” > /sys/class/gpio/gpio70/direction
echo 70 > /sys/class/gpio/unexport

通过如下命令关闭:
echo 70 > /sys/class/gpio/export
echo “low” > /sys/class/gpio/gpio70/direction
echo 70 > /sys/class/gpio/unexport


我写了个脚本(/usr/local/bin/fans),根据cpu温度自动启停风扇,用法如下:
/usr/local/bin/fans 开启温度 停止温度
温度单位是1/1000度,如高于70度开启,低于60度停止,则可以这样执行命令
/usr/local/bin/fans 70000 60000
如果不加参数,则默认为高于70度开启,低于65度停止。

三、硬盘休眠
         通过如下命令设置为5分钟不用则硬盘休眠
         /sbin/hdparm–S60 /dev/sda

四、自动执行
将以下2行命令添加到/etc/rc.local文件,以便每次重启后自动执行:
/sbin/hdparm–S60 /dev/sda
/usr/local/bin/fans&

五、说明
         1,以上均在Armbian_5.75和联想ss2中测试通过;
         2,我家云L1pro不支持指示灯灯光控制;
         3,如果升级 Armbian,则要首先执行如下命令,将内核版本固定,否则风扇不能控制:
apt-mark hold linux-dtb-rockchip64
apt-mark hold linux-image-rockchip64
如果已经升级,将通过如下命令将内核降级:
apt-get install linux-dtb-rockchip64=5.75  linux-image-rockchip64=5.75

         4,也许我的机器是个案,有时不能启动;有时开机时风扇不转,则上面的脚本无效,此时只能多次启动才行,因为对硬件不了解,不明原因。

          5fans脚本首先启动/停止风扇3次,作为指示之用。

六、下一步建议
     1,建议研究手动编译内核,使得开机时不出现随机因素;
     2,建议研究dts设置,通过pwm进行风扇调速,降低噪音;
     3,建议研究找出前面板的开机按键的gpio端口,可以自如控制机器。
附fans脚本,请将其放到/usr/local/bin下面,并置为可执行:

#!/bin/bash
if [ -n "$1" ]; then
max=$1
else
max=70000
fi
if [ -n "$2" ]; then
min=$2
else
min=65000
fi
echo $max, $min
echo 70 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio70/direction
i=0
for j in 1 2 3 4 5 6
do
echo $i > /sys/class/gpio/gpio70/value
i=$(( 1 - $i ))
sleep 2
done
while true
do
t=`/bin/cat /sys/class/thermal/thermal_zone0/temp`
if [ $t -gt $max ]; then
  echo 1 > /sys/class/gpio/gpio70/value
  echo "$t > $max"
fi
if [ $t -lt $min ]; then
  echo 0 > /sys/class/gpio/gpio70/value
  echo "$t < $min"
fi
sleep 10
done
echo 70 > /sys/class/gpio/unexport



评分

参与人数 7恩山币 +8 收起 理由
long*** + 1 送你一块“恩山”牌肥皂,喏,就在你脚下、捡一下吧……
天天*** + 1 感谢你的分享,无论怎样,你都是最无私的人!来,说说,你E盘上还有啥一起给我吧!
hk*** + 1 感谢你的分享,无论怎样,你都是最无私的人!来,说说,你E盘上还有啥一起给我吧!
Mr*** + 1 强大的恩山!(以下重复1万次)
Sta*** + 1 面对这种帖子,我内心复杂,真不知道说什么好……
ru*** + 2 正好需要!
森林*** + 1 ~\(≧▽≦)/~

查看全部评分

本帖被以下淘专辑推荐:

  • · OMV~zd|主题: 13, 订阅: 2
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-7-5 12:32 | 显示全部楼层
给力啊,竟然真的把gpio口给试出来了
另外想问一下有没有找出按键对应的口,一直想用它开关机或者控制风扇
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2019-7-5 14:58 | 显示全部楼层
我写了个脚本,可以死循环读gpio口的值(按ctlr-c退出),运行后点按按键,看数值是否有变化,有变化则就找到其gpio口。
将以下脚本保存为 rr, 运行 chmod +x rr 将其置为可执行,然后运行(比如读取35口)  ./rr 35 即可。
rk3328共有128个,如果有兴趣,建议每位测试一组12个,(0到11,12到23... ),大家共同努力,把按键端口找出来。读的过程中如果死机,可能需要重启动或重刷系统。

#!/bin/bash
echo $1 > /sys/class/gpio/export
echo $1
if [ -e /sys/class/gpio/gpio$1 ]; then
        echo "in" > /sys/class/gpio/gpio$1/direction
        while true
        do
                cat /sys/class/gpio/gpio$1/value
        done
fi
echo $1 > /sys/class/gpio/unexport
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-7-5 15:58 | 显示全部楼层
厉害,对linux不熟,只能看看大神。辛苦
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-7-5 17:57 | 显示全部楼层
厉害,不知道OMV是不是也这样的
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2019-7-5 20:33 来自手机 | 显示全部楼层
一页青岛 发表于 2019-7-5 17:57
厉害,不知道OMV是不是也这样的

omv是应用程序。在armbian上手动安装omv,是可以的,已经试过。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-7-6 22:09 | 显示全部楼层
root@rock64:/sys/class/gpio/gpio85# echo “high” > /sys/class/gpio/gpio85/direction
-bash: echo: write error: Invalid argument
为什么我的操作不了,最新版的5.88的armbian
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-7-6 22:25 | 显示全部楼层
scxhwhb 发表于 2019-7-6 22:09
root@rock64:/sys/class/gpio/gpio85# echo “high” > /sys/class/gpio/gpio85/direction
-bash: echo: w ...

知道了,引号的问题,还有我是说升级了过后风扇咋就不转了,原来是内核的问题
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-7-6 22:46 | 显示全部楼层
解决了,降级5.75,成功可以控制风扇了,写写分享
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-7-6 23:13 | 显示全部楼层
nb啊,都是高手
来自安卓客户端来自安卓客户端
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-7-7 18:44 | 显示全部楼层
root@rock64:~# echo 70 > /sys/class/gpio/export
-bash: echo: write error: Device or resource busy
使用5.75刚刷的,遇到了这个问题
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2019-7-8 09:28 | 显示全部楼层
echo 70 > /sys/class/gpio/export 打开gpio, echo 70 > /sys/class/gpio/unexport 用于关闭gpio。在没有关闭的情况下,打开一次就够了,之前我没有写清楚。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-7-8 09:58 | 显示全部楼层
我们要不要 来搞个群大家一起讨论来解决这个问题,让粒子云能够实现它最基本的存储价值,多个 人的力量总比一个人大。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-7-8 10:52 | 显示全部楼层
for j in 1 2 3 4 5 6
do
echo $i > /sys/class/gpio/gpio70/value
i=$(( 1 - $i ))
sleep 2
done

这段代码的作用是什么呀?
我的恩山、我的无线 The best wifi forum is right here.
发表于 2019-7-8 14:12 | 显示全部楼层
Raymond1981 发表于 2019-7-8 10:52
for j in 1 2 3 4 5 6
do
echo $i > /sys/class/gpio/gpio70/value

间隔2秒开关风扇,循环3次,楼主写了的,开始会启停3次。
我的恩山、我的无线 The best wifi forum is right here.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )|网站地图

GMT+8, 2021-6-19 23:23

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表