> 文档中心 > Raspberry Pi 4B入手教程和注意事项

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.