前言
树莓派前段时间出了官方的64位系统,代号 bullseye,虽然之前装了ubuntu也支持64位,但是兼容性和友好性上总感觉没有Raspberry Pi OS来的好,ssh等操作总是会莫名卡顿,有时断电重启还会无法自动联网,终于还是抽出时间更新了下。
结果没让我失望,流畅性和稳定性上确实比ubuntu版要好上许多,但也有些问题,这里记录一下。
烧录工具
强烈推荐官方的烧录工具Raspberry Pi Imager,在没有显示器、键鼠的情况下,基本上所有的初始化设置如ssh、wifi、用户账户等都可以在烧录时一个简单的勾选搞定。
不用再像网上那些使用第三方工具烧录的那么折腾,开机前各种配置。
磁盘爆满
一段时间后发现磁盘爆满(系统tf卡),排查后发现以下日志文件居然有50G:
~/.cache/lxsession/LXDE-pi/run.log
删掉后一天时间又爆满,日志内容都是:
** (pcmanfm:1861): WARNING **: 11:05:09.336: got unmount for unknown desktop item
** (pcmanfm:1861): WARNING **: 11:05:09.336: got unmount for unknown desktop item
** (pcmanfm:1861): WARNING **: 11:05:09.336: got unmount for unknown desktop item
** (pcmanfm:1861): WARNING **: 11:05:09.336: got unmount for unknown desktop item
** (pcmanfm:1861): WARNING **: 11:05:09.336: got unmount for unknown desktop item
查询之后发现pcmanfm
是linux的文件管理器,最初用建立软连接的方式解决:
rm ~/.cache/lxsession/LXDE-pi/run.log
ln -s /dev/null ~/.cache/lxsession/LXDE-pi/run.log
可是后来查看资源情况,发现pcmanfm
始终占用了10%左右的cpu,这就不能接受了。
直接把它卸载吧,毕竟我也不用桌面UI:
sudo apt-get remove pcmanfm
之后一切清静了。
风扇控制
针脚的控制,之前32位系统时使用的是wiringpi
,但是这位作者老哥好像对于被白嫖意见很大,目前不再开源,官网也不再提供下载,也就是新系统不能用了。
这上面其实列出了各种方案:https://elinux.org/RPi_GPIO_Code_Samples
在使用ubuntu时,使用的是pigpio
,也比较方便,目前新系统已自带安装(默认不启动)。但是在查看资源占用时,pigpio
的进程居然差不多要占用掉6%的CPU,比我部署的Java应用还多,这是无法接受的。
最后决定还是直接用Shell
来进行控制吧。
优点:方便,不需要安装任何包,自然也就没任何资源占用
缺点:必须要root用户执行,sudo也不行,命令上来说比安装软件包相对复杂一点
以下是官方示例,只要搞清楚针脚编号,应该没啥问题:
#!/bin/sh
# GPIO numbers should be from this list
# 0, 1, 4, 7, 8, 9, 10, 11, 14, 15, 17, 18, 21, 22, 23, 24, 25
# Note that the GPIO numbers that you program here refer to the pins
# of the BCM2835 and *not* the numbers on the pin header.
# So, if you want to activate GPIO7 on the header you should be
# using GPIO4 in this script. Likewise if you want to activate GPIO0
# on the header you should be using GPIO17 here.
# Set up GPIO 4 and set to output
echo "4" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio4/direction
# Set up GPIO 7 and set to input
echo "7" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio7/direction
# Write output
echo "1" > /sys/class/gpio/gpio4/value
# Read from input
cat /sys/class/gpio/gpio7/value
# Clean up
echo "4" > /sys/class/gpio/unexport
echo "7" > /sys/class/gpio/unexport
例如我的风扇插在18号针脚,要控制它:
# 打开针脚控制,这两行命令只需要执行一次
echo "18" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio18/direction
#开启风扇
echo "1" > /sys/class/gpio/gpio18/value
#关闭风扇
echo "0" > /sys/class/gpio/gpio18/value
#清理针脚控制
echo "18" > /sys/class/gpio/unexport
实际操作下来效果也是可以,可以写成脚本,在/etc/rc.local
文件的 exit 0 之前添加一行,让脚本开机启动:
exec nohup /home/pi/fan.sh > /home/pi/fan.log &