这个系列用于记录入门树莓派期间踩的各种坑及解决办法。
只记录一些我觉得重要的地方,不一定很全面。
目前暂定的一个目标是拿树莓派接管小爱音箱并接入ChatGPT。
今天的计划是将一个新的树莓派主板
- 烧录并启动系统
- 系统配置
- 安装conda环境
需要用到的物料有:
- 树莓派本体(树莓派4B 4GB)
- 一台可以正常使用的电脑(用于烧录)
- 一张不低于16GB的SD卡(作为树莓派的存储设备)
- 一个读卡器(读卡)
语雀只允许每个免费用户最多创建十个知识库,对此大嘴他娘表示
在选好搬到哪个新笔记之前,先回到CSDN好了。
树莓派的主板上没有实际的硬盘,它的整个系统都是存放在一张SD卡中,通过读卡器读取数据。
这样做的好处除了节约成本,还可以分别烧录不同的系统在多个存储卡里。随插随用,物理隔离。
树莓派的官方烧录软件叫做Raspberry Pi Imager。这是一个免费的软件,可以在Windows,macOS,和Ubuntu等主流操作系统上运行 (甚至树莓派自己的系统里已经自带了,我烧录我自己)。
什么是“烧录”,它和直接往卡里复制文件有什么区别?
"烧录"是一个通常用于描述将操作系统镜像(image)或其他数据写入到SD卡或其他类型的可引导存储设备的过程。在这个过程中,数据会按照特定的方式被写入到设备上,以便设备可以从中引导启动。
烧录与直接复制文件到SD卡有很大的区别。当你直接复制文件时,你只是将单个文件或文件夹从一个位置复制到另一个位置。然而,当你烧录一个镜像文件时,你实际上是在复制整个文件系统以及包含的数据。
例如,当你烧录一个操作系统镜像到SD卡时,你不仅仅是复制操作系统的文件,你还复制了文件系统本身,包括分区表,启动扇区,以及其他用于引导操作系统的重要信息。
这就是为什么你可以将一个烧录好的SD卡插入树莓派(或其他设备),然后设备就可以从这个SD卡引导启动。而且,由于烧录时会自动进行磁盘分区,所以烧录完的SD卡,显示的容量只有250MB左右(系统分区容量)。
简单来说,直接复制文件是在已经存在的文件系统中添加数据,而烧录镜像是创建一个新的文件系统并添加数据。
树莓派官方烧录的界面,相比Win32DiskImager
对小白更加友好了。
“选择操作系统”里已经准备好了适合树莓派使用的多种系统镜像。
如果选择官方的操作系统的话,右下角会多出一个齿轮按钮。
点击进去可以设置SSH、WiFi以及账户密码等配置,建议提前设置好,尤其是SSH。
然后选择SD卡,点击“烧录”,很快一张配置好树莓派操作系统的SD卡就烧录完成了。
如何格式化SD卡
如之前说的,树莓派在烧录SD卡的同时会对其进行分区,最后我们能看到的分区就是两百多兆的系统分区。如果希望在烧录后恢复这张卡,直接使用Windows自带的格式化功能,只会将系统分区的部分清空,剩余的空间依然不会显示。
正确的格式化方法是,在“选择操作系统”的界面,列表拉到最下面有一个“擦除”功能。
使用这个功能可以将SD卡彻底恢复到初始状态。
把烧录好的SD卡插入树莓派的读卡器并启动电源,主板红灯常亮,此时树莓派系统已经启动。
接下来根据我们手上的配件的齐全程度,有不同的配置方法。
此时可以像windows一样,在任务栏右边连接蓝牙和WiFi。
此外,把鼠标放在WiFi图标上,可以直接看到目前树莓派的IP地址。
接下来在终端输入以下命令配置界面。
sudo raspi-config
此时终端会变成一个类似BIOS配置的界面
如果之前没有在烧录的时候设置wifi或ssh的话,也可以在这里设置。
具体配置哪些项根据自己的需求来就行,如果之前已经在烧录时把WiFi什么的都设置完了,这里可以只设置一下
打开VNC:3 Interface Option
-> I3 VNC
其他配置可以按一些现有教程以及官方文档来做。
只有树莓派的情况下,可以通过在电脑上SSH的方式来控制树莓派。
如果之前已经在烧录软件配置了SSH和WiFi,我们可以进入路由器的管理页面,在已连接设备栏里查找树莓派的IP。
找到IP之后,使用Putty或XShell等工具通过SSH连接到树莓派
arp -a
,根据自己的网关地址判断树莓派的IP是哪一个。SSH只能使用命令行操作,作为初学者,建议使用VNC直接在桌面上操作系统,
树莓派官方系统自带了 VNC Server,只需要在电脑端下载VNC Viewer,即可通过IP地址连接树莓派
可能会遇到的问题
# 强制使用HDMI
hdmi_force_hotplug=1
Performerce Options
-> P2 GPU Memory
中给GPU多分配点显存。Display Options
-> D5 VNC Resolution
里给VNC设置一个默认分辨率。# 设置让HDMI输出使用适用于显示屏的DMT(Display Monitor Timings)模式
hdmi_group=2
# 启用自定义HDMI模式,这需要与hdmi_cvt参数一起使用。
hdmi_mode=87
# 设置让HDMI输出以DVI模式(没有音频)工作,如果要输出音频就设为2
hdmi_drive=1
# 定义自定义的HDMI模式,必须与hdmi_mode=87一起使用
hdmi_cvt 1024 600 60 6 0 0 0
最后的hdmi_cvt
是用于自定义视频模式的命令,后面跟随的一系列参数用于指定自定义模式的具体属性。下面是各参数的含义:
所以hdmi_cvt 1024 600 60 6 0 0 0就是定义了一个1024x600像素,60Hz刷新率,15:9宽高比,非隔行扫描,不使用margin,不使用GTF的自定义视频模式。
安装conda环境(如miniconda) 前需要确认自己的系统架构
uname -a
树莓派系统有两种架构:armv7l
和aarch64
,安装前需要根据自己架构安装,安装方法和一般的linux没有区别,不过也不推荐在树莓派上使用miniconda,因为:
pip 在树莓派中被显示为“非法指令”
在树莓派中安装miniconda后,可能会遇到一个很恶心的问题:我在base环境中可以好好地使用pip,但切换到虚拟环境时,就出现“非法指令”的提示。
这个问题的根源在于,由于树莓派架构在conda上已经停止维护,无论是从anaconda源还是清华源下载的pip都无法在树莓派上正常运行。
然而,miniforge的默认channel:conda-forge中的pip已经为树莓派做过特别的编译,因此能在树莓派上正常运行。
所以,强烈建议使用miniforge来在树莓派中管理虚拟环境。毕竟已经配置好了clash,无需再依赖国内的源来下载包。这样一来,你就可以一步到位,彻底解决这个问题。
anaconda、miniconda和miniforge的区别可以参考这篇博文。