Raspberry Pi 4B入手教程和注意事项
本文章随机更新,主要用来记录rpi4b遇到的问题和解决方案。
Raspberry 4b的SD卡槽问题
Raspberry pi 4b的卡槽不带自动弹出功能。你也许觉得手动拔出也好,但问题其实出现再插入上。
当你用了稍大的力气将sd卡塞进卡槽,发现怎么也调不准方向。这时忽然可以插进卡槽,你以为这下好了。结果一下SD到底,用力过猛。SD卡断了。别以为我是胡说,因为我曾再另一款类似设计的SD卡上遭遇过。
Raspberry 4b支持64bit os
也就是说,你可以选用64-bit的。现在已经不是数年前,64位才是主流。很多release出来的软件都在linux 64bits上测试过。而且以后会逐步淘汰32 bits
安装之后怎么查看版本
当然你也可以用uname -a,但是这个命令看不出debian的版本。
建议使用
cat /etc/os-release
不过这个命令看不到os版本
Raspberry pi os 64-bits更换清华源
参考此文档,根据正确版本执行换源操作
# 编辑 `/etc/apt/sources.list` 文件,删除原文件所有内容,用以下内容取代:deb http://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os/raspbian/ buster main non-free contrib rpideb-src http://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os/raspbian/ buster main non-free contrib rpi# 编辑 `/etc/apt/sources.list.d/raspi.list` 文件,删除原文件所有内容,用以下内容取代:deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
SSH连接时的密码和账户
在使用ssh连接raspberry pi时,需要知道ip地址。
ssh pi@192.168.xxx.xxx
但是如果你没有屏幕要怎么查找呐?
如果你们访问路由器,可以在连接列表里面直接查看。但是如果比没有路由器的访问权限呐?
可以使用局域网扫描工具来完成。
此外还需要设法在制作的raspberry pi镜像根目录下建立一个名为"SSH"的文件。这样就开启了SSH服务
静态IP设置
当你没有屏幕的时候,可能需要ssh连接。但是此时的ip地址是自动分配的。你可以通过查看连接的路由器找到树莓派的ip,但是这样优惠重新建立一个新的ssh连接配置。不是特别好。
所以需要设置静态IP。
可以通过修改/etc/network/interfaces。但是如果你打开这个文件之后。会告诉你可以用"man dhcpcd.conf"来查看怎么设置静态IP。其实就是修改/etc/dhcpcd.conf。里面有个示例:
# wlan0 for wifiinterface eth0 # your expect static ip static ip_address=192.168.1.121/24static ip6_address=fd51:42f8:caae:d92e::ff/64 # your expect route static routers=192.168.1.1 # dns static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
设置HDMI以固定分辨率输出
在HDMI中有两个关键参数需要设置:
hdmi_group = xxxhdmi_mode = xxx
其中hdmi_group用来选择按照那组标准设置分辨率,这时候hdmi_mode对应的数字指定的分辨率不同。
参考树莓派实验室教程,有下面信息。
对于hdmi_group = 1时,按照CEA标准:
hdmi_mode=1 VGAhdmi_mode=2 480p 60Hzhdmi_mode=3 480p 60Hz Hhdmi_mode=4 720p 60Hzhdmi_mode=5 1080i 60Hzhdmi_mode=6 480i 60Hzhdmi_mode=7 480i 60Hz Hhdmi_mode=8 240p 60Hzhdmi_mode=9 240p 60Hz Hhdmi_mode=10 480i 60Hz 4xhdmi_mode=11 480i 60Hz 4x Hhdmi_mode=12 240p 60Hz 4xhdmi_mode=13 240p 60Hz 4x Hhdmi_mode=14 480p 60Hz 2xhdmi_mode=15 480p 60Hz 2x Hhdmi_mode=16 1080p 60Hzhdmi_mode=17 576p 50Hzhdmi_mode=18 576p 50Hz Hhdmi_mode=19 720p 50Hzhdmi_mode=20 1080i 50Hzhdmi_mode=21 576i 50Hzhdmi_mode=22 576i 50Hz Hhdmi_mode=23 288p 50Hzhdmi_mode=24 288p 50Hz Hhdmi_mode=25 576i 50Hz 4xhdmi_mode=26 576i 50Hz 4x Hhdmi_mode=27 288p 50Hz 4xhdmi_mode=28 288p 50Hz 4x Hhdmi_mode=29 576p 50Hz 2xhdmi_mode=30 576p 50Hz 2x Hhdmi_mode=31 1080p 50Hzhdmi_mode=32 1080p 24Hzhdmi_mode=33 1080p 25Hzhdmi_mode=34 1080p 30Hzhdmi_mode=35 480p 60Hz 4xhdmi_mode=36 480p 60Hz 4xHhdmi_mode=37 576p 50Hz 4xhdmi_mode=38 576p 50Hz 4x Hhdmi_mode=39 1080i 50Hz reduced blankinghdmi_mode=40 1080i 100Hzhdmi_mode=41 720p 100Hzhdmi_mode=42 576p 100Hzhdmi_mode=43 576p 100Hz Hhdmi_mode=44 576i 100Hzhdmi_mode=45 576i 100Hz Hhdmi_mode=46 1080i 120Hzhdmi_mode=47 720p 120Hzhdmi_mode=48 480p 120Hzhdmi_mode=49 480p 120Hz Hhdmi_mode=50 480i 120Hzhdmi_mode=51 480i 120Hz Hhdmi_mode=52 576p 200Hzhdmi_mode=53 576p 200Hz Hhdmi_mode=54 576i 200Hzhdmi_mode=55 576i 200Hz Hhdmi_mode=56 480p 240Hzhdmi_mode=57 480p 240Hz Hhdmi_mode=58 480i 240Hzhdmi_mode=59 480i 240Hz HH means 16:9 variant (of a normally 4:3 mode).2x means pixel doubled (i.e. higher clock rate, with each pixel repeated twice)4x means pixel quadrupled (i.e. higher clock rate, with each pixel repeated four times)
当hdmi_group=2时,按照DMT标准输出:
hdmi_mode=1 640x350 85Hzhdmi_mode=2 640x400 85Hzhdmi_mode=3 720x400 85Hzhdmi_mode=4 640x480 60Hzhdmi_mode=5 640x480 72Hzhdmi_mode=6 640x480 75Hzhdmi_mode=7 640x480 85Hzhdmi_mode=8 800x600 56Hzhdmi_mode=9 800x600 60Hzhdmi_mode=10 800x600 72Hzhdmi_mode=11 800x600 75Hzhdmi_mode=12 800x600 85Hzhdmi_mode=13 800x600 120Hzhdmi_mode=14 848x480 60Hzhdmi_mode=15 1024x768 43Hz DO NOT USEhdmi_mode=16 1024x768 60Hzhdmi_mode=17 1024x768 70Hzhdmi_mode=18 1024x768 75Hzhdmi_mode=19 1024x768 85Hzhdmi_mode=20 1024x768 120Hzhdmi_mode=21 1152x864 75Hzhdmi_mode=22 1280x768 reduced blankinghdmi_mode=23 1280x768 60Hzhdmi_mode=24 1280x768 75Hzhdmi_mode=25 1280x768 85Hzhdmi_mode=26 1280x768 120Hz reduced blankinghdmi_mode=27 1280x800 reduced blankinghdmi_mode=28 1280x800 60Hzhdmi_mode=29 1280x800 75Hzhdmi_mode=30 1280x800 85Hzhdmi_mode=31 1280x800 120Hz reduced blankinghdmi_mode=32 1280x960 60Hzhdmi_mode=33 1280x960 85Hzhdmi_mode=34 1280x960 120Hz reduced blankinghdmi_mode=35 1280x1024 60Hzhdmi_mode=36 1280x1024 75Hzhdmi_mode=37 1280x1024 85Hzhdmi_mode=38 1280x1024 120Hz reduced blankinghdmi_mode=39 1360x768 60Hzhdmi_mode=40 1360x768 120Hz reduced blankinghdmi_mode=41 1400x1050reduced blankinghdmi_mode=42 1400x1050 60Hzhdmi_mode=43 1400x1050 75Hzhdmi_mode=44 1400x1050 85Hzhdmi_mode=45 1400x1050 120Hz reduced blankinghdmi_mode=46 1440x900 reduced blankinghdmi_mode=47 1440x900 60Hzhdmi_mode=48 1440x900 75Hzhdmi_mode=49 1440x900 85Hzhdmi_mode=50 1440x900 120Hz reduced blankinghdmi_mode=51 1600x1200 60Hzhdmi_mode=52 1600x1200 65Hzhdmi_mode=53 1600x1200 70Hzhdmi_mode=54 1600x1200 75Hzhdmi_mode=55 1600x1200 85Hzhdmi_mode=56 1600x1200 120Hz reduced blankinghdmi_mode=57 1680x1050reduced blankinghdmi_mode=58 1680x1050 60Hzhdmi_mode=59 1680x1050 75Hzhdmi_mode=60 1680x1050 85Hzhdmi_mode=61 1680x1050 120Hz reduced blankinghdmi_mode=62 1792x1344 60Hzhdmi_mode=63 1792x1344 75Hzhdmi_mode=64 1792x1344 120Hz reduced blankinghdmi_mode=65 1856x1392 60Hzhdmi_mode=66 1856x1392 75Hzhdmi_mode=67 1856x1392 120Hz reduced blankinghdmi_mode=68 1920x1200reduced blankinghdmi_mode=69 1920x1200 60Hzhdmi_mode=70 1920x1200 75Hzhdmi_mode=71 1920x1200 85Hzhdmi_mode=72 1920x1200 120Hz reduced blankinghdmi_mode=73 1920x1440 60Hzhdmi_mode=74 1920x1440 75Hzhdmi_mode=75 1920x1440 120Hz reduced blankinghdmi_mode=76 2560x1600reduced blankinghdmi_mode=77 2560x1600 60Hzhdmi_mode=78 2560x1600 75Hzhdmi_mode=79 2560x1600 85Hzhdmi_mode=80 2560x1600 120Hz reduced blankinghdmi_mode=81 1366x768 60Hzhdmi_mode=82 1080p 60Hzhdmi_mode=83 1600x900 reduced blankinghdmi_mode=84 2048x1152reduced blankinghdmi_mode=85 720p 60Hzhdmi_mode=86 1366x768 reduced blanking
比如我的7寸屏幕时1024x600的。那么我应该怎么设置呐?
这时候需要设置hdmi_cvt,参考这里。
hdmi_cvt= width width in pixelsheightheight in pixelsframerate framerate in Hzaspectaspect ratio 1=4:3, 2=14:9, 3=16:9, 4=5:4, 5=16:10, 6=15:9margins 0=margins disabled, 1=margins enabledinterlace 0=progressive, 1=interlacedrb 0=normal, 1=reduced blanking
具体可参考官方文档
另外4B有两个hdmi,在设置的时候注意分清楚两者。具体参考官方的这篇文章.
可以这样:
hdmi_ignore_edid=0xa5000080 [HDMI:0] hdmi_cvt 1024 600 60 6 hdmi_group=2 hdmi_mode=87 hdmi_drive=1 # hdmi_pixel_encoding=2[HDMI:1] hdmi_cvt 1024 600 60 6 hdmi_group=2 hdmi_mode=87 hdmi_drive=1 # hdmi_pixel_encoding=2
也可以这样:
hdmi_cvt:0 1024 600 60 6hdmi_group:0=2hdmi_mode:0=87hdmi_cvt:1 1024 600 60 6hdmi_group:1=2hdmi_mode:1=87
上面的hdmi_drive用来选择hdmi接口是按照dvi输出还是hdmi输出。区别是前者没有声音。
触摸屏电流不足问题
raspberry pi 4b默认输出电流最大600mA,如果你需要稍大一些。可开启
max_usb_current=1
这种方式可以确保最大输出1.2A.但如果用电设备电流可能会激增或者不稳定负载。这时候就一定不要用树莓派供电。设法从外部供电。比如搞一个代供电的usb hub。或者专门给外设设法供电。
系统备份和还原
其实官网已经提供了方法,只是不好找。这是官方网址。
归纳一下就是:
1、使用自带的sd card copier工具,实现SD卡复制。这个工具很强大,两个SD卡容量不同也能互相拷贝。在某些需求下省去了备份压缩,再还原的工作。效率很高。
2、使用tar备份home目录。这个有些情况下有用,但作用不大。不过是常规的压缩备份操作。
3、制作sd image。这种方法是linux最常规但有效的方法。关键语句:
#压缩备份sudo dd bs=4M if=/dev/sdb | gzip > PiOS.img.gz#还原gunzip --stdout PiOS.img.gz | sudo dd bs=4M of=/dev/sdb
文中提到的mysql数据库备份,没太关注
至少在64位系统中系统的磁盘不是/dev/sdb,而是/dev/mmcblk0.可以使用df货fdisk查看磁盘。请用真正的磁盘替代教程里的/dev/sdb.目标位置也选择放在适合的位置。
另外需要注意的是有时候压缩后的磁盘可能较大,你的sd卡又是fat32格式的,就会提示“gzip: stdout: File too large”的问题。怎么解决呐?(请注意不一定是这个原因)安装exfat-fuse让rpi支持exfat格式。然后将SD或者U盘格式化成exfat的。(说明一下,系统SD卡和这个备份的SD卡是两张卡。如果你把自己的系统格式化了请自行面壁。)
————————————————————————
其实在测试之后发现直接在树莓派上备份成功率很低。最简单的办法是将SD取出插到linux系统的PC上,运行上面类似的命令即可。使用windows的备份工具也是一个办法。
触摸屏隐藏指针
当我们为raspberry pi添加触摸屏之后,在某些情况下我们希望隐藏指针。有些教程告诉你要下载某些工具比如unclutter实现。其实不用。
直接修改/etc/lightdm/lightdm.conf文件,添加一行:
xserver-command = X -nocursor
重启之后就OK了,当然如果要重新启用,就暂时注释掉这一行然后重启。
桌面图标更换大小的bug
在桌面上更改适合不同尺寸屏幕的时候,图标会自动变化。但是会出现一个意料之外的bug:
不能在资源管理器里面打开终端窗口。继而引起了需要从终端运行的程序,也打不开了。
更高方法是,在弹出的错误窗口之后的串口terminal emulator的地方添加如下命令:“x-terminal-emulator %s”。
uvc摄像头高帧率的修改
(尚在测试,参考https://raspberrypi.stackexchange.com/questions/105800/persistently-increase-usbfs-memory-mb-on-rpi4-running-ubuntu-19)
临时更改测试:
# 查看目前大小cat /sys/module/usbcore/parameters/usbfs_memory_mb# 临时更改大小sudo sh -c 'echo 256> /sys/module/usbcore/parameters/usbfs_memory_mb'# 查看更改后大小cat /sys/module/usbcore/parameters/usbfs_memory_mb
实际测试之后没有提高帧率,设置成120fps之后,用cv的videocapture采集的速率最快还是倒60fps左右。
永久更改办法:
sudo nano /etc/rc.localsudo sh -c 'echo 1024 > /sys/module/usbcore/parameters/usbfs_memory_mb' &
rpi-update的终极解决方法
以下方法参考自树莓派论坛@ovdiyuk 的评论
I solved this following waycurl -L https://github.com/Hexxeh/rpi-firmware/archive/master.tar.gz -o master.tar.gzcd /root/.rpi-firmware && tar -xvzf /root/master.tar.gzSKIP_DOWNLOAD=1 rpi-update
我的方法是用科学上网或者别的办法从https://github.com/Hexxeh/rpi-firmware/archive/master.tar.gz下载最新的包,然后用scp或者U盘等手段拷贝到树莓派上某个路径,比如~/Downloads。然后cd到/root/.rpi-firware目录将master.tar.gz解压至此处。然后再用sudo SKIP_DOWNLOAD=1 rpi-update
需要注意的是一般权限不能cd 到/root中。需要用sudo -i切换到root权限
因为下载的时候打包了一层,可能解压之后不能直接升级。需要将解压之后的文件夹内的内容拷贝出来
sudo -icd /rootrm -rf .rpi-firmwaretar -xvzf /home/pi/Downloads/rpi-firmware-master.tar.gzmv rpi-firmware/ .rpi-firmware/SKIP_DOWNLOAD=1 UPDATE_SELF=0 rpi-updateexit
不知道什么原因我的一直不能UPDATE_SELF,所以只能把UPDATE_SELF设置为0.