[原创] 树莓派3代Model B上手

最近入手了树莓派3代,从树莓派出世到现在(2016.04),总共买了共4片各型号的树莓派,算不上狂热的爱好者,但也算是个比较热心的用户了吧。
在此记录一些树莓派3代的使用笔记。

Raspberry Pi 3 Model B

『1』ARMv8的Arch Linux系统?
树莓派3代的CPU是ARMv8的64位CPU,但是在Arch Linux ARM的官方网站上,并没有for Raspberry Pi 3的ARMv8版本的OS下载,现在只能下载ARMv7 Raspberry Pi 2的OS来用。不用担心,以后面包会有的。
2017.2.24更新:再次到Arch Linux ARM官网看时,发现已经有了,开源社区实在太棒。
文章来源:http://www.codelast.com/
『1』切换到 root 用户
OpenSSH7默认已经禁止了root用户登录,因此,刚安装好的Arch Linux ARM是用alarm用户登录的。
然而登录后,一堆操作(例如用pacman安装软件)都是需要root权限的,因此,需要切换到root再操作:

su root

输入默认密码 root 即可。
文章来源:http://www.codelast.com/
『2』添加中科大的源
按照这个页面的说明,在文件 /etc/pacman.d/mirrorlist 最上方添加一句:

Server = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo

即可。
然后用 pacman -Syu 升级系统,你就会发现快了许多。
文章来源:http://www.codelast.com/
『3』使用树莓派3代的板载的WiFi
注:在本小节的最后有更新说明,请注意看。
在Raspbian上把WiFi用起来实在是太轻松了(当然也有可能是我运气太好),只要用dd命令把Raspbian系统写到TF卡上,再插到树莓派3的卡槽里,上电,进Raspbian系统,WiFi就自然而然地可用了,完全不需要做任何配置!但是在Arch Linux ARM系统下,就没有那么爽了——
我以前在树莓派Model B+的Arch Linux系统里配置过USB WiFi,记录在这篇文章里。如果在树莓派3代上刚装好Arch Linux,就使用同样的方法去配置,会发现不能work。
为了让它work,我们先要使用rpi-update这个第三方工具来更新树莓派的firmwre。
以root用户执行:

rpi-update

可能会提示:

 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** Performing self-update
 *** Relaunching after update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 !!! This tool requires you have readelf installed, please install it first
     In Debian, try: sudo apt-get install binutils
     In Arch, try: pacman -S binutils

文章来源:http://www.codelast.com/
所以我们按它说的,先安装另一个package:

pacman -S binutils

安装完之后,重新执行 rpi-update,遇到问你yes or no的地方都输入y即可,就会输出下面的一堆信息:

 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** Performing self-update
 *** Relaunching after update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** We're running for the first time
 *** Backing up files (this will take a few minutes)
 *** Backing up firmware
 *** Backing up modules 4.1.20-3-ARCH
#############################################################
WARNING: This update bumps to rpi-4.4.y linux tree
Be aware there could be compatibility issues with some drivers
Discussion here:
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=144087
##############################################################
Would you like to proceed? (y/N)
 *** Downloading specific firmware revision (this will take a few minutes)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   168    0   168    0     0    111      0 --:--:--  0:00:01 --:--:--   111
100 50.2M  100 50.2M    0     0  45414      0  0:19:20  0:19:20 --:--:-- 73368
 *** Updating firmware
 *** Updating kernel modules
 *** depmod 4.4.7+
 *** depmod 4.4.7-v7+
 *** Updating VideoCore libraries
 *** Using HardFP libraries
 *** Updating SDK
 *** Running ldconfig
 *** Storing current firmware revision
 *** Deleting downloaded files
 *** Syncing changes to disk
 *** If no errors appeared, your firmware was successfully updated to 1e84c2891c1853a3628aed59c06de0315d13c4f1
 *** A reboot is needed to activate the new firmware
按它的提示,我们重启系统。
可能是我运气不好,重启没用,板载的WiFi依然起不来。甚至于,我用 iwconfig 命令都看不到 wlan0 设备。
于是用dmesg命令来查看一下问题(dmesg用于显示和控制内核环缓冲,可帮助用户了解系统的启动信息),打印出的信息可谓是非常多,和WiFi模块相关的错误大概有下面几条(不是连在一起的):

brcmfmac: brcmf_sdio_drivestrengthinit: No SDIO Drive strength init done for chip 43430 rev 1 pmurev 24
brcmfmac_sdio mmc1:0001:1: Direct firmware load for brcm/brcmfmac43430-sdio.bin failed with error -2
brcmfmac: brcmf_sdio_htclk: HT Avail timeout (1000000): clkctl 0x50
brcmfmac: brcmf_sdio_htclk: HT Avail timeout (1000000): clkctl 0x50

所以这里打印出来的brcmfmac又是个什么鬼?它是用于支持基于Broadcom 802.11n芯片的WiFi设备的驱动程序的名字。
因此,我们从上面的信息,是不是能这样说:WiFi模块的驱动程序没找到?
事实上,我们并不能这样推断,因为有人在树莓派的论坛里反馈说,他们的WiFi可以完全正常使用,但dmesg还是打印出了上述信息。而我个人的实验也证实了这样的说法。
文章来源:http://www.codelast.com/
那么怎么办呢?树莓派论坛里有人给出了这样一种方案:
这个Github链接下载brcmfmac43430-sdio.binbrcmfmac43430-sdio.txt这两个文件,放到系统的 /lib/firmware/brcm/ 目录下——事实上,我在下载之前查看了一下这个目录,里面确实没有这两个文件,这也是为什么我的Arch Linux ARM连iwconfig都找不到wlan0的原因了。

按上面的方法做好之后,重启Arch,再安装命令行的类图形化工具dialog:

pacman -S dialog

启用wlan0:

ifconfig wlan0 up

再使用wifi-menu程序来连接WiFi:

wifi-menu -o

这里假设在交互式设置的过程,你将WiFi的名字设置成了wlan0-NG,则下一步,就是将其设置成开机启动:

netctl enable wlan0-NG

这将创建并启用一个随计算机启动而自动运行的 systemd 服务。
文章来源:http://www.codelast.com/
再重启Arch试试?执行ifconfig,你会惊喜地发现WiFi连上了。
另外,如果发现WiFi不稳定,可以试试把WiFi的电源管理关闭:

iwconfig wlan0 power off

然后把这行命令添加到启动执行。等驱动更新到更稳定的版本或许能解决WiFi稳定性问题。

2016-09更新:

  • 在一次Arch Linux ARM的系统更新中,提示错误“/usr/lib/firmware/brcm/brcmfmac43430-sdio.bin exists in filesystem”并失败,这个提示已经存在的文件恰恰就是我放到 /usr/lib/firmware/brcm 目录下的,因此,这似乎说明了Arch官方的更新已经支持了树莓派3上的WiFi模块,所以我立即把 /usr/lib/firmware/brcm/brcmfmac43430-sdio.bin 文件mv到其他备份目录下,再用pacman -Syu继续更新系统,但是更新完之后WiFi就不能用了,使用wifi-menu-o命令扫描不到我的路由器的WiFi网络。我相信这个问题是可以通过一些配置解决的,只不过我暂时还没有时间折腾。
  • (接上)后来我发现,用我的手机创建的WiFi热点(WPA加密模式)可以让树莓派扫描到,并且可以连上,所以,我现在判断是树莓派3的WiFi模块与我的路由器的WiFi加密方式不兼容——但这不应该啊,百思不得其解。

文章来源:http://www.codelast.com/
『4』解决系统更新后无法使用tmux的问题
用 pacman -Syu 更新系统后,重启,再执行tmux,提示错误:

tmux: need UTF-8 locale (LC_CTYPE) but have ANSI_X3.4-1968

查了一下,找到这个Arch Linux的Wiki页面,解决方法就是:

  • 编辑 /etc/locale.gen 文件,取消这一行的注释:

en_US.UTF-8 UTF-8

  • 执行以下命令生成Locale:
locale-gen
  • 执行以下命令设置整个系统的Locale:
localectl set-locale LANG=en_US.UTF-8

之后再执行tmux命令,不再出错。
文章来源:http://www.codelast.com/
『5』pacman -Syu升级时出现“ca-certificates-utils: /etc/ssl/certs/ca-certificates.crt exists in filesystem”错误的解决办法
如果升级时出现以下错误:

error: failed to commit transaction (conflicting files)
ca-certificates-utils: /etc/ssl/certs/ca-certificates.crt exists in filesystem
Errors occurred, no packages were upgraded.
可以按这个链接的说法,用如下方法解决:

pacman -Syuw
rm /etc/ssl/certs/ca-certificates.crt
pacman -Su

其中第1条命令是只下载package,但不安装。
文章来源:http://www.codelast.com/
『6』Raspbian系统默认禁用ssh连接,如何启用
有一个最最简单的办法,你用了之后一定不想去试其他的方法,那就是:把树莓派安装Rabpbian系统的TF卡拔下来,用USB适配器插到一台Ubuntu台式机上,打开其boot分区,在里面创建一个名为“ssh”的文件(不含引号,文件内容为空即可),然后再把TF卡插回树莓派,就会发现ssh已经神奇地启用了。
这个原理是:Raspbian启动时会在boot分区里找名为ssh的文件,如果找到了,就会启用ssh,并把该文件删除。

文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤ 
转载需注明出处:codelast.com 
感谢关注我的微信公众号(微信扫一扫):

wechat qrcode of codelast

发表评论