以下树莓派简称 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 卸载卡。
本人在 Debian 上操作示范
如果英文好,看 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
[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 系统也要好。
1核心计算能力
4核心计算能力
[9] End
既然是入手,那就不做太多复杂的工作,总结一下,2018.5.2版本。
性能:Shell 很流畅,指令低延迟。安装软件很少卡,写入速度取决于 SD 卡。FS 还在使用 ext4,希望有机会能变成 BTrFS。
稳定性:还不算好。直接用显示器操作经常出现 tty 消失然后不能操作的 bug,SSh 连接还算稳定,但容易被切断。dmesg 有时能看到错误。PacMan 错误率有点高。
操作性:Arch 这系统是有点难用,但官方 中文 wiki 写得很好,找别人写的文章也不少。耐心地慢慢学,技术会提升不少。
软件:主流的包该有的都有,pacman 安装足够,第三方包可以编译。