找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 15781|回复: 47

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

  [复制链接]
本帖最后由 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 ~\(≧▽≦)/~

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
给力啊,竟然真的把gpio口给试出来了
另外想问一下有没有找出按键对应的口,一直想用它开关机或者控制风扇
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
我写了个脚本,可以死循环读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.
回复

使用道具 举报

厉害,对linux不熟,只能看看大神。辛苦
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

厉害,不知道OMV是不是也这样的

点评

dbh
omv是应用程序。在armbian上手动安装omv,是可以的,已经试过。  详情 回复 发表于 2019-7-5 20:33
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 来自手机 | 显示全部楼层
一页青岛 发表于 2019-7-5 17:57
厉害,不知道OMV是不是也这样的

omv是应用程序。在armbian上手动安装omv,是可以的,已经试过。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

root@rock64:/sys/class/gpio/gpio85# echo “high” > /sys/class/gpio/gpio85/direction
-bash: echo: write error: Invalid argument
为什么我的操作不了,最新版的5.88的armbian

点评

知道了,引号的问题,还有我是说升级了过后风扇咋就不转了,原来是内核的问题  详情 回复 发表于 2019-7-6 22:25
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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.
回复

使用道具 举报

解决了,降级5.75,成功可以控制风扇了,写写分享
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

nb啊,都是高手
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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.
回复

使用道具 举报

 楼主| | 显示全部楼层
echo 70 > /sys/class/gpio/export 打开gpio, echo 70 > /sys/class/gpio/unexport 用于关闭gpio。在没有关闭的情况下,打开一次就够了,之前我没有写清楚。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

我们要不要 来搞个群大家一起讨论来解决这个问题,让粒子云能够实现它最基本的存储价值,多个 人的力量总比一个人大。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

for j in 1 2 3 4 5 6
do
echo $i > /sys/class/gpio/gpio70/value
i=$(( 1 - $i ))
sleep 2
done

这段代码的作用是什么呀?

点评

间隔2秒开关风扇,循环3次,楼主写了的,开始会启停3次。  详情 回复 发表于 2019-7-8 14:12
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-30 01:43

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

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