树莓派无界面初始化

时不时地会用到树莓派,但是每次都忘了怎么配置,因此单独记录一篇方便以后查询。

初始化

无界面初始化,也就是常说的 headless initialization,目的是在不需要给树莓派接入额外的显示器的情况下完成基本的无线网络配置,并且启动好必要的远程管理工具比如 ssh 等。

首先下载镜像,然后根据官方的安装指引将镜像烧写到 SD 卡中,对于 *NIX 系统而言,推荐直接使用 dd 烧写:

sh

dd bs=4M if=2021-01-11-raspios-buster-armhf.img of=/dev/sdX

当然 Linux 和 MacOS 下的操作略有差别,可以参考官方的对应章节。

配置网络

一般我们要让树莓派连接无线网络是通过如下方式:

sh

# 扫描WiFi
iwlist wlan0 scan
# 添加目标 SSID 和密码到 /etc/wpa_supplicant/wpa_supplicant.conf
# 启用配置
wpa_cli -i wlan0 reconfigure

wpa_supplicant.conf 的参考内容如下:

conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US

network={
    ssid="YOURSSID"
    psk="YOURPASSWORD"
    scan_ssid=1
}

在插入 SD 卡前,我们可以先挂载并直接将该文件放置在 boot 目录下,这样树莓派启动后就会自动进行配置并连接网络。例如 /Volumes/boot/wpa_supplicant.conf。值得一提的是第一次启动并连接网络可能需要比较长时间。

参考: Setting up a Raspberry Pi headless

如果想要启动时开启 SSH,可以在 boot 目录下添加 ssh 文件,raspbian 启动时会检测该文件是否存在,如果存在则启动 SSH 服务。

sh

touch /Volumes/boot/ssh

在旧版本中文件名是 ssh.txt

配置串口

在没有网络或者网络不佳的情况下,我们还可以通过串口登录树莓派。如下在挂载的 SD 卡中启用串口:

sh

echo enable_uart=1 >> /Volumes/config.txt

默认情况下主串口分配给了 Linux console,因此开机后就可以从串口登录 shell 了。

参考: UART configuration

当然这默认你手上有一个 USB 转串口的线,不同的树莓派型号对应的串口引脚位置略有不同,例如树莓派 3 Model B 的引脚如下:

pin.png
树莓派 3B+ 引脚图片

每个引脚对应的功能如下:

pin1.png
树莓派 3B+ 引脚说明

其他型号的具体引脚说明可以参考 Pi4J - Pin Numbering,或者树莓派官方的资料。

也就是说我们只需要将串口线分别接到 6,8,10号引脚即可。

u2u.png

有几个值得注意的点:

  1. TX接RX, RX接TX, 有usb供电的情况下不用接VCC
  2. MacOS 下串口设备通常是 /dev/cu.*
  3. 默认波特率可能是 115200 或者 115600

命令行下可以用 screen 或者 miniterm 等连接串口,例如:

sh

screen /dev/cu.usbserialxxx 115200

screen 的退出方式为 ctrl+Actrl+\

其他

对于树莓派 Zero 而言,我们还可以使用 OTG Ether Gadget,将树莓派本身配置(模拟)成 USB 网卡,然后通过 USB 去连接树莓派。不过这种方式并不是很稳定,而且只适用于支持 OTG 的 Zero,因此对于无界面配置而言更推荐使用串口方式。

一般启用 USB 网卡模拟的方式如下:

  1. /boot/config.txt 中添加 dtoverlay=dwc2。dwc2 是一个 OTG 驱动,用于检测 USB 口的模式。
  2. /etc/modules 中添加所需要的内核模块:

text

dwc2
g_ether

如果需要无界面配置,在第二步中该为修改内核命令行文件cmdline.txt,在nowait之后添加 modules-load=dwc2,g_ether

重新启动后 OTG 口就可以被 host 识别为 USB 网卡,通过网卡分配的地址即可连接到树莓派中:

sh

ssh pi@raspberrypi.local