Raspberry Pi是在会议,workshop和社区聚会上获得有关Arm软件开发动手经验的好方法。它成本低廉而且有很多参考资料。 最新版本的Raspberry Pi 4通过Cortex-A72提升了性能。
使用Raspberry Pi的方法有很多种,但是大多数方法都需要监视器和键盘或者需要一个能够找到Pi所分配的IP地址的本地网络。 这些方法在家庭或小型办公室网络上都可以很好地实现,但是在具有无线功能的会议或大学中实现就并不是那么容易了。
现在所面临的挑战是如何在不带任何显示器和网络设备的会议或workshop上连接和使用Raspberry Pi 4来进行动手实验。
其中一种方法是用USB线连接笔记本电脑和Pi 4给Pi供电并通过USB建立串行连接,这样就可以将Pi 4连接到会议或公共无线网络来访问互联网了。 也可以通过设置USB线来提供Ethernet连接,但是设置起来比较困难,况且串行连接也可以提供足够好的无线网络连接了。
SD卡准备工作
任何一种Raspberry Pi入门的方法都是从下载一个软件映像并把它写入SD卡中开始的。点击这里下载Raspbian映像的副本。 Lite映像适用于今天的练习,桌面映像也同样适用。
为了启用串行连接,需要在引导分区(boot partition)修改两个文件并在根文件系统中创建一个符号链接。这些修改既可以在下载的映像被写入SD卡之前也可以在写入SD卡之后进行。如果需要多个SD卡,那最好先对映像进行修改再把新的映像分别写入到多个SD卡中去。如果只需要一个SD卡,那么先将映像写入SD卡在进行修改会简单很多。
下面介绍了每种Pi 4 入门的方法,其中在Linux系统上运行是最简单的。Raspbian boot partition是一个可在Windows系统上读取的FAT文件系统,但是他的根文件系统(ext4文件) 在没有额外软件的情况下是很难在Windows系统上读取的。
选项1:写入SD卡后修改卡上的文件
按照安装指南写入SD卡。
成功写入SD卡后,进行以下三个更改:
Edit config.txt
打开在boot目录中的onfig.txt文件, 使用文本编辑器在文件末尾添加以下内容:dtoverlay=dwc2
Edit cmdline.txt
打开同样在在boot目录中的cmdline.txt文件并在rootwait之后的kernel指令行加入“modules-load=dwc2,g_serial
”
完整的指令行如下所示(请注意可能会被更改):
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=17869b7d-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_serial quiet init=/usr/lib/raspi-config/init_resize.sh
开启getty启动串行连接
接下来,启动getty来解锁用户登录。 进入根文件系统并找到目录/lib/systemd/system/getty.target.wants
之后创建一个符号链接:
cd lib/systemd/system/getty.target.wants
$ sudo ln -s /lib/systemd/system/getty@.service getty@ttyGS0.service
当串行连接建立成功后,用于输入用户名和密码的登陆提示将会弹出。如果没有显示,说明串行连接已经建立但是用户无法登录。
现在卸掉SD卡便可在Raspberry Pi 4中使用。我们可以跳过下一部分直接转到“Boot Pi”的部分。
选项2:修改映像后写入SD卡
另外一种方式是先对映像进行修改之后再写入SD卡中,这对于需要写入多个SD卡的应用是有优势的。同样对于可以访问Linux机器来修改映像文件却没有配备SD卡插槽的例子也是很有效的。 当映像被修改后,可以使用任意操作系统将其写入SD卡。
首先先将映像解压并挂载到文件系统和boot partition中
$ unzip 2019-07-10-raspbian-buster-lite.zip
挂载映像:
$ sudo losetup -P /dev/loop10 2019-07-10-raspbian-buster-lite.img
$ sudo mount /dev/loop10p2 /mnt
$ sudo mount /dev/loop10p1 /mnt/boot
现在进行和选项1中相同的操作:
• 编辑 config.txt
• 编辑 cmdline.txt
• 为getty建立符号链接
卸载文件系统,新映像已准备就绪。
$ sudo umount /mnt/boot
$ sudo umount /mnt
将新映像改为新的名称,并用zip创建启用了串行连接的新的改进版映像。
$ mv 2019-07-10-raspbian-buster-lite.img 2019-07-10-raspbian-buster-lite-serial.img
$ zip 2019-07-10-raspbian-buster-lite-serial.zip 2019-07-10-raspbian-buster-lite-serial.img
最后,将新映像写入SD卡,然后继续boot Pi。
Boot Pi
将被新写入的SD卡插入Raspberry Pi 4中,并用USB线将计算机连接到Raspberry Pi 4的USB Type-C连接器上。计算机将为Pi提供电源并启动。
第一次boot需要一些时间来调整内部文件系统大小,reboot后再在串行连接中启动getty。
不同的主机操作系统有不同的连接方式。
对于Linux系统,在 /dev/ttyACM0
处应该出现一个新的设备节点并可以使用ls命令进行确认。
对于Windows系统, 一个新的COM端口会被创建。在Windows‘设置>设备’栏中可以查看,通常情况下COM4或COM5会出现。
Linux系统/Mac OS的串行连接
在Linux系统或Mac上建立串行连接的其中一种方法是使用screen命令。
$ sudo screen /dev/ttyACM0
这将打开一个登录提示,默认用户名和密码分别是pi和 raspberry。
键入ctrl-A之后键入ctrl-D退出屏幕
Windows系统的串行连接
在Windows系统建立连接的一种方法是使用putty。 进入COM端口并选择一个串行连接,连接后查看登录提示。
这是putty的设置界面。
点击Open建立链接并登录:
确保通过passwd指令将pi密码更改为默认值。
连接无线网络
串行连接正常工作后,就可以用raspi-config来连接无线网络。
$ sudo raspi-config
用option 2 来选择“Network Options”,然后再次使用option 2选择Wi-fi后输入SSID和密钥(如果需要)。
在raspi-config中启用ssh也很有帮助。 使用顶部菜单中的option 5 “Interfacing Options”,然后选择“2 SSH”。
这个方法让在lab和workshop中启动Raspberry Pi 4成为可能,在没有键盘和显示器的情况下也可以在更复杂的网络(例如会议)上使用Pi 4。 希望上面所描述的技术可以被更多人应用于更多不同的场合。
额外材料
使用需要通过强制门户来认证或接受条款和条件的无线网络可能是一个挑战,因为这样需要浏览器来触发允许互联网访问的门户。
一种解决该问题的方法是使用基于文本的浏览器,例如Lynx。 遗憾的是,Raspbian映像中未安装Lynx,但可以添加此应用。 现在的问题在于如果我们无法启动Pi并将其连接到网络来安装新的应用程序,则必须添加Lynx。
SD卡映像是用于Arm架构的,但可以在x86 Linux系统上进行修改。 安装应用程序的方法可以是简单的文件拷贝,但是最好的方法是使用程序包管理器进行安装。 在x86 Linux机器上运行Arm可执行文件的一个技巧是使用qemu和一个更改根(chroot)。
在将映像写入SD卡之前,请跟随以下过程使用apt安装Lynx浏览器。 假设使用x86 Linux计算机准备映像,则可以使用一个chroot将qemu用于在Arm文件系统中运行apt。 挂载映像之后将qemu插入文件系统,然后再次使用这些指令使文件系统看起来真的像在Arm硬件上运行一样。
$ sudo losetup -P /dev/loop10 2019-07-10-raspbian-buster-lite-serial.img
$ sudo mount /dev/loop10p2 /mnt
$ sudo mount /dev/loop10p1 /mnt/boot
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /sys /mnt/sys
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /dev/pts /mnt/dev/pts
使用#注释掉ld.so.preload文件中的唯一一行,然后将qemu从主机复制到文件系统中。
如果qemu-arm-static未安装,则可安装Ubuntu软件包(与其他版本的Linux类似)。
$ sudo apt install qemu-user-static
$ sudo vi /mnt/etc/ld.so.preload
$ cp /usr/bin/qemu-arm-static /mnt/usr/bin/
进入chroot并安装lynx。 一旦进入chroot后,界面看起来就像是带有Pi文件系统的Arm机器,但实际上它是x86 Linux机器。
$ sudo chroot /mnt /bin/bash
# apt install lynx
取消注释行(将其放回原始位置)
$ sudo vi /mnt/etc/ld.so.preload
卸载所有内容
$ umount /mnt/dev/pts
$ sudo umount /mnt/dev/pts
$ sudo umount /mnt/dev
$ sudo umount /mnt/sys
$ sudo umount /mnt/proc
$ sudo umount /mnt/boot
$ sudo umount /mnt
提前安装Lynx可以绕过无线网络上的强制门户。 从指令行启动lynx就可以访问任意网站。同意使用网络条款的门户将被打开,你可以选择“OK”或阅读互联网访问所需的任意信息。
现在你已经学会了如何快速启动Raspberry Pi的互联网连接。看看你是否可以在Arm TechCon 2019 workshop中应用这些知识!
作者:Jason Andrews
翻译:Khorina
原文链接:https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/posts/jumpstart-a-raspberry-pi-4-internet-connection