以下树莓派简称 RP。斜体表示要执行的指令,[] 表示指令参数。本文有多个链接,一般是中文 wiki,可以查看使用方法。
版权归本人所有,转载请注明原作者!
[0] About
Arch Linux 以简洁、轻量级闻名,虽然配置难,效率和速度高。Arch ARM 由专门团队维护,为部分 SBCs 定制了系统,包括 RP。ARMv7 的版本早已放出,RP2B/3B 通用,虽然快但没有发挥 64-bit 优势;ARMv8 版本因为 GPU 库、驱动等问题一直在开发,现在已有相对稳定版,还在更新。鉴于 64-bit 能发挥 CPU 优势,本人将尝试安装使用,为20180302的版本(后已尝试20180502的)。
[1] Image
由于 Arch 的特性,给 RP 安装 Arch 需要 Linux PC,并且掌握 Shell 知识。安装系统需要 BSDTar,3.3 版本以上,如果官方源版本旧请自行下载、编译、安装,可以 git clone https://github.com/libarchive/libarchive。
准备好 Micro SD 卡,最好 UHS-I 速度及以上。对卡完全清空,Windows 和 macOS 上可以完全格式化(不要快速格式化);Linux 上可以 fdisk -l /dev/[],注意X替换成你的卡在系统的编号(fdisk -l 查看),然后按 o 清理所有,按 w 保存操作。严格按照以下步骤安装系统(以下 [] 都要换成卡编号):
首先创建分区:fdisk /dev/[],选中卡;按 o,清理分区;按 p 显示分区,确认已空;按 n,按 p,输入 1,按 enter 选择默认开始,输入 +100M 为尾位置,这样将创建分区一;按 t,按 c,将分区一设置成 FAT32;按 n,按 p,输入2,按两次 enter 选择剩余位置,这样将创建分区二;再按 p,应该看到两个分区;按 w,确认配置。注意期间无误才是成功。
接下来创建文件系统:mkfs.vfat /dev/[]1 设置分区一 VFAT,mkdir boot 创建启动分区,mount /dev/[]1 boot 挂载;mkfs.ext4 /dev/[]2 设置分区二 ext4,mkdir root 创建存储分区,mount /dev/[]2 root 挂载。
然后写入系统:wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-3-latest.tar.gz 下载系统 image,bsdtar -xpf ArchLinuxARM-rpi-3-latest.tar.gz -C root 写系统到卡,sync
同步,mv root/boot/* boot 移动启动文件到 boot 分区,ls /dev/[] 应该能看到文件如 kernel,umount boot root 卸载卡。
如果英文好,看 Installation,服务器对中国不太友好,忍忍......
将 5V 2A 或更强 USB Micro-B 电源给 RP3B 供电,不要拿旧线来用,否则工作不稳定!启动后,可以看到 Shell 输出应该填满显示器(ARMv7 系统会有空)。默认的帐户和密码是 alarm alarm,推荐直接 root root 登录。
[2] Network
(下面的 [if] [dev] 表示 interface,即网络端口,请填写端口名称,如 wlan0 eth0;[phy] 是端口序号,如 0 1。请根据情况替换。)
RP3B 有两个网络芯片:BCM43438 Wi-Fi 芯片,支持 2.4G Wi-Fi,名称 wlan0;LAN9514 以太网控制器,最高 100M 速率,名称 eth0,默认配置为自动连接。Arch 官方 wiki 中 Network configuration 和 Wireless network configuration 两篇详细介绍了网络设置方法,因为是入门,本处仅抄录一点。
IPRoute2 是 Arch 主要的网络管理。ip link 可以获取网络信息。ip link show dev [dev] 可以查看某个端口的信息。ip link set [if] up/down 启用或关闭某个端口。ip address show 可以打印所有地址信息。ip addr add [IP]/[netmask] broadcast [broadcast] 可以配置端口静态 IP、掩码、广播地址([netmask] 对应数字,255.255.255.0 是24,255.255.0.0 是16,255.0.0.0 是8,255.255.255.255 是32)。ip route add default via [IP] 可添加路由出口,出口即网络包从哪出入。
NetStat 可以看到网络总体连接情况,netstat 输出信息,netstat -r 可以看到路由列表和对应端口 IP,netstat -i 可以看到活跃的网络端口信息,netstat -h 查看用法。
IFConfig 可以用于配置临时配置网络端口,ifconfig 查看各端口情况和名称,ifconfig [dev] address/netmask/broadcast [IP]/[Netmask]/[Broadcast] 可以为一个端口配置 IP 地址、掩码、广播地址。ifconfig [dev] 可以查看端口状态信息,ifconfig [dev] up/down 可以启动或者关闭端口,ifconfig [dev] mtu [mtu] 可以设置 MTU 值。
查看无线网络,可以用 iw。可以 iw list 查看所有芯片及支持能力。iw dev [dev] info 可以查看指定无线网络芯片信息。iw dev [if] scan 可以扫描可连接 Wi-Fi,但没法连接 WPA 加密网络。
RFKill 用于屏蔽无线通信:rfkill list 列出已连接无线设备及序号,rfkill block/unblock [no] 可以屏蔽或解除某个设备。一般不会用到。
如果要使用 PPPoE 拨号,需要安装软件包 rp-pppoe。pppoe-setup 即可开始配置,按照引导一步步来。配置后,pppoe-start 启动,netstat -r 应该能看到端口 ppp0,pppoe-stop 停止。如果拨号后 ip route 查看到默认出口不是 ppp,用 ip route 加入并更改默认路由。
假如想使用 Wi-Fi,参照以下步骤:wpa_supplicant -i [if] -c <([password] [SSID] [key]) 配置,[key] 可选不填;然后 ip link set [if] up,再 dhcpcd [if],应该能连上 DHCP 的路由器,可用 iw dev [if] link 检查。如果是静态 IP 连接,忽略 DHCP 那步,用 ip addr 给网卡指定 IP 和掩码,再用 ip route 添加为默认路由。
[3] PacMan
Arch 的包管理器是 PacMan,功能强大的二进制管理系统,参数指定有点难度。pacman -Syu 可以升级软件包和系统,pacman -S [package] [package] 可以安装一或多个包,pacman -R [package] 可以删除单个包,pacman -Rs [package] 会删除包及有关系的包,pacman -Qs 可以查询是否安装包及有关系的包详细请看上面链接的 wiki。软件包列表可在官方查看。
[4] System
记得登录后 passwd 改密码,安全!
编辑 /etc/hostname 可以修改主机名,hostnamectl set-hostname [name] 也可以设置主机名。
uname 可用于查看系统信息,uname -r 查看 kernel 版本,uname -a 查看所有信息。由于 ARM 系统的不通用性,每个设备差别太大,大部分信息没法显示。
ls [/directory] 查看目录中的文件。nano 或 vi 编辑器都用于文本编辑。
默认状态驱动数量不多,安装软件包 linux-firmware,这样就能使用更多 USB 设备。lsusb 查看 USB 设备。lsmod 查看已加载的模块。dmesg 可以查看系统硬件驱动情况。
RP 没有实体 BIOS/EFI,关机无法保存时间,boot 后自动同步。用 timedatectl 可以查看当前时间、日期,timedatectl --set-time "[date] [time]" 可以手动改日期,timedatectl list-timezones 可以查看时区列表,timedatectl set-timezone Asia/Shanghai 可以把时区设置到上海。详细查看 Time。
Linux 编译各种东西是日常。gcc git make automake cmake wget 这些软件肯定要。对于其它语言需求,请根据软件包列表和自身需要安装。
安装 systemd 才能管理服务,systemctl start/stop [serviece] 启动或停止服务,systemctl enable/disable [serviece] 设置开机启动或不启动服务,直接 systemctl 查看全局状态,systemctl status 显示服务状态。详细请看 SystemD。
[5] Bluetooth
蓝牙需要软件包 bluez bluez-tools。systemctl start bluetooth 启动蓝牙服务,systemctl enable bluetooth 可以设置开机启动 BT。输入 bluetoothctl 进入配置界面,power on 打开 BT 电源,scan on 搜索周边设备并且获取信息(如 MAC 地址),pair [MAC addr] 可以配对设备(MAC 即 XX:XX:XX:XX:XX:XX 这样的地址),connnect [MAC addr] 可以连接,详细看 Bluetooth 配置。
[6] GPIO
树莓派的 GPIO 是个好玩的东西,能扩展很多功能,编译 GPIO 程序需要库。
wiringPi 是简单流行的一个 C 库,很容易找到帮助和示例。按照指引即可安装:git clone git://git.drogon.net/wiringPi 下载代码,cd wiringPi 进入目录,git pull origin 确认是新版,./build 进行编译安装。gpio -v 可以查看 RP 型号和 wiringPi 版本,gpio readall 可以查看很多信息,编译需在 gcc 指令末尾加上 -lwiringPi。
RPi.GPIO() 是个 Python 库,适合会 Py 人,容易使用。先安装 pip,然后 pip install rpi.gpio 下载安装。在代码文件开头加入 import RPi.GPIO as GPIO 即可使用。本人不会 Py,看这里的 Eng 说明 吧,还可以找找别人的 examples。
BCM2835 C 是比较底层的库,有点难用,兼容性强。官方已经编译好了 lib,安装 libbcm2835 即可。编译时要在 gcc 指令后加上 -lbcm2835 才可以。查看官方示例、别人的例子和 .h 文件慢慢学习吧。下面是测试程序,如果能编译就是已安装并能用:
#include
#include
#include
int main()
{_Bool test = bcm2835_init();
bcm2835_close();}
[7] LXDE
Linux 上有很多可选的 GUI,如华丽强大的 KDE GNOME,平衡的 XFce LXQt,小巧简陋的 LXDE。xorg xorg-server gamin 三个软件包对于哪个都需要。
鉴于 RP 性能一般(LPDDR2 内存的锅),个人选择安装 LXDE 和 Slim 登录界面。需要软件包 lxde slim,Arch 这不能默认配置完全么......安装后,需要在用户目录下(即 ~/ 目录下)创建文件 .xinitrc,写入内容 exec startlxde,推荐在 root 及普通用户目录下都创建一个。如果要设置开机启动桌面就 systemctl enable lxdm,手动启动桌面则是 systemctl start lxdm 后再 startlxde,LXDM 是屏幕管理器服务,默认关闭。
对于要用 VNC,先安装 x11vnc,执行 vncserver 进行配置,重新启动后再次执行 vncserver 才能允许链接,可以 systemctl enable vncserver 设置开机启动。连接上后发现桌面一片黑,shell 是白色的,这时执行 startlxde 应该可以解决,注意这个 shell 不要关掉。
[8] Benchmark
UnixBench 是 Linux 上一个开源跑分软件,测试项目多,分为单线程和全线程测试。看到下列结果,已经是特别好了,比 ARMv7 系统发挥了更多性能,比部分 ARMv8 系统也要好。
[9] End
既然是入手,那就不做太多复杂的工作,总结一下,2018.5.2版本。
性能:Shell 很流畅,指令低延迟。安装软件很少卡,写入速度取决于 SD 卡。FS 还在使用 ext4,希望有机会能变成 BTrFS。
稳定性:还不算好。直接用显示器操作经常出现 tty 消失然后不能操作的 bug,SSh 连接还算稳定,但容易被切断。dmesg 有时能看到错误。PacMan 错误率有点高。
操作性:Arch 这系统是有点难用,但官方 中文 wiki 写得很好,找别人写的文章也不少。耐心地慢慢学,技术会提升不少。
软件:主流的包该有的都有,pacman 安装足够,第三方包可以编译。