树莓派Linux系统安装和配置

Posted by Hsz on February 19, 2018

树莓派和linux

树莓派被定义为卡片计算机,它只提供了计算机最基础的部件–cpu和内存,其它的输入输出只提供了标准接口.它的性能弱鸡,使用的arm处理器,而且各项指标远弱于最常见的智能手机,但由于其价格低廉,同时提供了GPIO针脚,而且相对资源较多,作为功能单一的专用平台或者实验平台往往还是可以胜任.因此它的定位可能更加偏向嵌入式领域中的处理中心而非通常意义上的计算机.

树莓派与其他如arduino这样的单片机开发板最大的不同之处在于它可以跑操作系统,这样就为很多事情提供了可能,比如树莓派可以写一个简单的rpc服务来让外界调用它处理一些接上的传感器的信号,而如果是arduino恐怕就只能读取信号并依据这些信号进行一些预设好的操作了.

树莓派目前支持的操作系统有linux和windows,但通常不会有人用windows,因为windows太臃肿,并不适合如此”细微”的树莓派,而且一般树莓派也不接显示器,要使用就直接通过ssh连接,这样linux就有了天然的优势.

树莓派各个版本性能和使用场景

到本文写作的时间为止,树莓派出了4代,截至2021年6月现在市面上还能买到基本只有3b,3b+,4b类型,其基本参数如下:

硬件参数 4B型 3B+型 3B型
Soc Broadcom BCM2711 Broadcom BCM2837B0 Broadcom BCM2837
CPU ARM Cortex-A72 64bit(aarch64) ARM Cortex-A53 64bit(ARMv8) ARM Cortex-A53 64bit(ARMv8)
GPU Broadcom VideoCore VI @ 500 MHz Broadcom VideoCore IV OpenGL ES 2.0 Broadcom VideoCore IV OpenGL ES 2.0
主频 1.5 GHz 1.4GHz 1.2GHZ
核心数 1 4 4
内存 2G/4G/8G 2G 1G
USB2.0口数量 2 4 4
网络接口 10/100/1000 Mbps以太网接口 10/100/1000 Mbps以太网接口 10/100 Mbps以太网接口
无线 b/g/n/ac 双频 2.4/5 GHz 支持802.11n无线网络 2.4 GHz 支持802.11n无线网络 2.4 GHz
蓝牙 蓝牙5.0 蓝牙4.1 蓝牙4.1
标称功率 6.25W(5V/1.25A) 5W(5V/1A) 4W(5V/800mA)
售价 399/439/546 275 270元

至于实际的性能还要看:

  • 电源是否稳定
  • 是否挂了很多usb设备
  • sd卡性能如何
  • 散热做的好不好
  • 有没有超频,超了多少,每片芯片的体质不同性能也会不同.

下面是极客湾提供的移动端核心性能天梯图.

移动端核心性能天梯图

可以看出树莓派的计算能力是相当拉跨,毕竟价钱摆在这里.

那买它有什么用呢?

大致可以分为如下方向

  1. 利用其廉价和有完整linux系统的特点,做分布式系统验证实验之类
  2. 面向控制的服务,毕竟有串口可以用于各种开关量控制,各种数据采集的应用,3b做这个比较合适.
  3. 低并发io场景,利用其廉价和低功耗的特性,用来做为服务的宿主机使用.
  4. 边缘计算,依然是利用其廉价和低功耗的特性.

用下来总的来说树莓派有如下几个设计缺陷:

  • 电源要求相对较高,必须要5v2A左右的电源才能用,因此要么接电要么使用充电宝,这就基本无法作为采集设备独立运行在一线了
  • usb和网口底层走的同一个下层接口,因此带宽不高,IO性能捉急
  • 本可以有很不错的计算能力,但这种能力3/7发挥不出来,而这3/7的能力却又主要关于浮点,DSP的强力运算,这样的运算在图像处理,机器视觉等领域有大量需求

操作系统

树莓派的数据和程序全部保存在tf卡上,因此用树莓派前我们需要先准备一张tf卡,一般至少32g,我一般用128g的tf卡.树莓派需要将操作系统写入tf卡里然后将卡插入机器.

一般安装linux系统.官方提供的操作系统是raspbberry pi OS(原来叫raspbian)这是个32位的linux操作系统,基于debian.这个系统如果用于面向控制的服务是绰绰有余的,但如果你买的是8g版本的pi,而且用于其他3种场景,那么32位系统就浪费内存了.一般我们会选择64位的ubuntu21.04.

树莓派官方提供了安装器可以选择想要的操作系统直接安装.但如果你更想用老版本的raspbian则需要去官网下载zip格式的镜像,然后使用Etcher这个工具将操作系统写入tf.

raspbberry pi OS(raspbian)

作为官方指定的操作系统,raspbian有着最多的用户群体,也是最好上手的.安装它的步骤如下:

  1. 写入操作系统到tf卡

  2. 开启ssh(option)

    如果你下载的镜像是2016-11-25之后的版本,那么你需要多这么一个额外的步骤,因为ssh默认被关闭了.在写入完成后,你的sd卡会被分为两个部分,一部分是40M左右的启动盘,一个是剩下的,打开你的启动盘,在其根目录下放上一个名为ssh的空文件.这样就可以使用ssh链接了.

  3. 连接无线wifi(update @2019-2-14)

    我们可以在烧好系统后,在sd卡启动盘根目录下新建一个名为wpa_supplicant.conf的文件,其中的内容为:

     country=CN
     ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
     update_config=1
    
     network={
         ssid="xxxx" #要连的网络名
         psk="104104104" # 网络密码
         key_mgmt=WPA-PSK # 加密协议
         priority=1 # 网络连接的优先级,数字越大优先级越高(不可以是负数)
         #scan_ssid:连接隐藏WiFi时需要指定该值为1
     }
    

    这样我们的机器就会开机后自己连接wifi了.

查看系统状态

我们可以在系统下使用uptime查看当前的机器的持续运行时间,系统cpu负载,内存负载,和io负载的总体情况.

要查看硬盘的使用情况可以使用df -h查看.

如果希望看到及时信息,并且希望看到更加细的颗粒度,查看各个进程的占用的话,可以使用top查看,其中:

  • task是监控目前的进程总数及所处状态,要注意zombie,表示僵尸进程,不为0则表示有进程出现问题
  • Cpu(s)行展示了当前CPU的状态,us表示用户进程占用CPU比例,sy表示内核进程占用CPU比例,id表示空闲CPU百分比,wa表示IO等待所占用的CPU时间的百分比.wa占用超过30%则表示IO压力很大.
  • Mem行展示了当前内存的状态,total是总的内存大小,userd是已使用的,free是剩余的,buffers是目录缓存
  • Swap行展示的是交换分区的状态(也就是虚拟内存),cached表示缓存,用户已打开的文件.如果Swap的used很高,则表示系统内存真的不够用了.

在top命令下按1,则可以展示出服务器有多少CPU,及每个CPU的使用情况.一般而言,服务器的合理负载是CPU核数*2.也就是说对于2核的CPU,负载在4以内表明机器运行很稳定流畅.如果负载超过4了,就说明服务器的运行有一定的压力了.

在top命令下,按shift+c,则将进程按照CPU使用率从大到小排序,按shift+p,则将进程按照内存使用率从大到小排序,很容易能够定位出哪些服务占用了较高的CPU和内存.

top对io的监控并不完善,可以使用iostat.

输入iostat -x 1 10命令,表示开始监控输入输出状态,-x表示显示所有参数信息,1表示每隔1秒监控一次,10表示共监控10次. 结果中rsec/s表示读入,wsec/s表示每秒写入,这两个参数某一个特别高的时候就表示磁盘IO有很大压力,util表示IO使用率,如果接近100%,说明IO满负荷运转.

连接树莓派

raspbian的默认用户是pi,密码是raspberry,安全起见登录后可以修改下.

修改源

由于众所周知的原因,如果我们在墙内的话建议将系统更新源换到国内,推荐科大的源其次清华的源,具体配置方法就是

这里需要改动/etc/apt目录下的sources.list文件,所以需要使用管理员权限,安装好的系统应该已经自带nano了,就用这个来编辑一下/etc/apt/sources.list文件.

sudo nano /etc/apt/sources.list

在文件中向行首添加 # 来注释掉所有已有的源. 之后另起一行添加下面内容(两种源选一种就行):

  • 科大:
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
  • 清华:
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main non-free contrib rpi

之后ctrl + O写入,然后ctrl + X退出.当然上面的修改也可以使用

sed -i 's/mirrordirector.raspbian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

来完成

接着就是用sudo apt update命令更新软件源列表.更新之后再sudo apt upgrade来更新系统,更新好后可以重启下sudo reboot

另外我们还可以更换archive.raspberrypi的软件源源,修改的文件为/etc/apt/sources.list.d/raspi.list,我们可以是使用科大的源, 将其中内容替换为deb http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ stretch main ui

我们也可以使用下面命令完成

sed -i 's/archive.raspberrypi.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

locale配置

locale设置主要包括这么几个方面:

  • 语言字体设定

    设置语言字体首先是安装字库

      sudo apt-get install ttf-wqy-zenhei
    

    之后我们需要设置locale,sudo raspi-config进入树莓派的设置界面,选择路径为Internationalisation Options->change_locale

    之后把en_GB.UTF-8 UTF-8按空格去掉,再把en_US.UTF-8 UTF-8,zh_CN.UTF-8 UTF-8,zh_CN.GBK GBK按空格选上,然后按tab键切换到ok后回车,设置好后会要再在这些我们挑出的字符集中选出默认的字符集,选好回车后退出,使用sudo reboot重启树莓派

  • 输入法设定

    我们一般也不会直接在树莓派上输入中文,而是通过ssh将中文数据传进去而已,因此装不装都行,我们就姑且装下,万一以后要直连呢

      sudo apt-get install scim-pinyin
    
  • 时间时区设定

    树莓派没有时钟,时间只能通过网络获取,设置的方法一样是使用sudo raspi-config.设置的路径为

    Internationalisation Options->change_timezone

    之后选择亚洲->上海即可,设置完成记得sudo reboot重启

扩展存储空间

树莓派默认不使用SD卡的全部空间,有一部分保留,建议选中 扩展存储空间的设置也在树莓派的设置界面,使用sudo raspi-config进入,之后沿路径

advanced_option->expand_filesystem

选好后回车即可

设置完成记得sudo reboot重启

无线连接设置

无线网络相比有线网络有更好的灵活性,只要解决电源问题,在网络连接范围内都可以接入网络,而且这样一来就允许树莓派’动’了.因此即便是老版本的树莓派也应该花个几十块买个无线模块.但无线网络相对来说比有线网络更加不稳定,性能也肯定低不少,但在io方面,往往瓶颈在树莓派自身上,有线网络对其性能的提高十分有限,因此,具体的使用场景应该具体分析.

3B其中已经内置了wifi模块;3B版本之前的树莓派没有无线网卡,我们可以买块usb无线网卡用于连接wifi,我买的型号是RTL8188CUS,插上后可以可以使用lsusb命令检查所有usb口上的信息,如果有RTL8188CUS显示就是接上了.

如果接上了,可以使用sudo iwconfig查看无线连接网络的情况,其中eth0是以太网连接,wlan0是无线连接

设置连接的的方法是使用sudo raspi-config.设置的路径为network_options->wifi

静态化ip地址

要修改静态IP地址,需要修改的是/etc/dhcpcd.conf也就是DHCP的配置文件.

查看官方文档man dhcpcd.conf可知,需要配置static IP的话,只需修改/etc/dhcpcd.conf

sudo nano /etc/dhcpcd.conf

修改以下参数:

# 指定接口 eth0
interface eth0
# 指定静态IP,/24表示子网掩码为 255.255.255.0
static ip_address=192.168.1.40/24
# 路由器/网关IP地址
#static routers=192.168.1.1
# 手动自定义DNS服务器
#static domain_name_servers=interface wlan0

#static ip_address=192.168.1.40/24
static routers=192.168.1.1
#static domain_name_servers=192.168.0.1 #自己看需求要不要设置dns服务器
#类似的定义wifi连接
interface wlan0

static ip_address=192.168.1.40/24
static routers=192.168.1.1
#static domain_name_servers=192.168.0.1

之后重启sudo reboot就行了

超频

超频的步骤是:

  • 关机,拔出tf卡,将其连接到电脑
  • 在启动分区中找到config.txt
  • 其中加上

      arm_freq=1300 #这个是cpu频率,pi3b的标频为1200,超个1,200不过分吧
      sdram_freq=300 #这个是内存读写频率,默认为250,超个300应该不过分
      gpu_freq=400 #超频gpu,标准频率为400,一般不要超过500
      over_voltage=4 # 提高内核电压,范围0~6,初始为1.2v,每加1提高0.025v
    
  • 重新插上树莓派开机即可

要检验超频的效果可以使用sysbench,它可以sudo apt-get install sysbench安装. 使用的话可以参考下面的命令

sysbench --num-threads=4 --test=cpu --cpu-max-prime=20000 run

也可以使用sudo cat /sys/devices/system/cpu/cpu2/cpufreq/cpuinfo_cur_freq直接查看当前的cpu频率

还是提醒一句,超频有风险,最好别超或者少超点,芯片烧坏了本人不承担任何责任!如果非要超频,那么一定要做好散热,使用散热片,加上小风扇什么的.

修改主机名和登录密码

在有多台树莓派做集群实验的情况下,为了便于管理我们最好修改下每台主机的hostname,这样在路由器上就比较好分辨了; 同时如果你的树莓派要用在公网上的话登录密码最好也修改一下,一个方案是使用uuid4随机生成一段id,取其中前若干位. 当然了设了密码要是忘了就惨了,因此最好找个地方存一份方便管理.

修改主机名的路径是network_options->hostname

修改登录密码的路径是change_user_password

安装源添加工具software-properties-common

有时候我们的默认源中并没有想要的工具,这时候我们一般使用add-apt-repository工具添加源到我们的apt中之后再安装:

  • sudo apt install software-properties-common
  • sudo add-apt-repository ppa:openjdk-r/ppa.

64位ubuntu

如果要安装64位系统,目前比较成熟的是安装64位ubuntu.我们一样可以在官网下载的安装器中从other general purpose OS中找到它.注意不要安装最新版本,而是找tls版本安装会比较稳定,比如我写这篇时tls版本是 20.04.选择好后和安装pi os一样写入tf卡,然后将tf卡插入树莓派接点接网线即可.

连接树莓派

ubuntu的默认用户是ubuntu,密码是ubuntu,第一次登陆时会要求修改密码,修改完成后机器会重启.重启后下次登陆开始就是用你修改过的密码登陆了.

修改源

修改/etc/apt/sources.list

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse

locale配置

执行timedatectl set-timezone "Asia/Shanghai"可以设置时区为东8区

执行sudo apt-install language-pack-zh-han*可以安装中文字库

然后修改/etc/default/locale为:

LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"

静态化ip地址

在目录/etc/netplan下会有一个yaml文件(名字不定),我们可以通过它来设置:

network:
    ethernets:
        ens33:
            dhcp4: no
            addresses: [192.168.1.100/24] # 设置固定ip和掩码
            optional: true
            gateway4: 192.168.1.1 # 网关地址
            nameservers:
                addresses: [223.5.5.5,223.6.6.6]# DNS服务器地址,多个DNS服务器地址需要用英文逗号分隔开,可不配置
 
    version: 2

修改主机名和登录密码

在第一次登陆时系统会要求重新设置登录密码.而主机名的修改可以直接通过修改/etc/hostname中的内容实现

安装常用工具

系统安装完毕后我们还可以安装和配置一些常用工具,下面是常用工具的安装与配置,就都是可选项了.

个人建议如果你要使用docker那可以什么都不装,甚至locale配置的中文字库都可以不配置.

设置shell

设置shell其实没啥好说的,无脑oh-my-zsh,具体的安装使用方式可以看这篇博文,raspbain默认没有zsh和git,所以需要先安装下sudo apt-get install zsh git,其他就都一样了.

设置vim

设置vim其实也没啥好说的,无脑spf13-vim,具体安装和使用方式可以看这篇文章,raspbain默认安装了VIM-tiny,可以使用vi命令调用,我们需要先安装vim完整版

  • sudo apt-get install vim
  • update-alternatives --display vi

不过spf13-vim默认使用的插件比较多,因此会比较卡,可以适当删减.

如果vim只是用来编辑配置和看文件的,那么其实只要设置下语法高亮就可以了不用安装spf13-vim这么重的东西.下面这个简单的配置就可以满足大多数需求了

set nu
set shortmess=atI
syntax on
set nobackup
set confirm
set mouse=c
set tabstop=4
set shiftwidth=4
set expandtab
set smarttab
set autoread
set cindent
set autoindent
set smartindent
set hlsearch
set background=dark
set showmatch
set ruler
set nocompatible
set foldenable
set fdm=syntax
nnoremap <space> @=((foldclosed(line('.')<0)?'zc':'zo'))<CR>
set novisualbell
set laststatus=2
autocmd InsertLeave * se nocul
autocmd InsertEnter * se cul
set showcmd
set fillchars=vert:/
set fillchars=stl:/
set fillchars=stlnc:/

安装python环境

虽然apt工具可以直接安装python,但我还是更加推荐使用miniconda工具,可以在清华的镜像源处进行下载,注意查看下arm版本,1b使用armv6l;2b,3b使用armv7l,安装过程不多叙述,可以看我以前的文章

1b目前看只有python2支持,而2b和3b也只支持到3.4,我们可以使用

conda config --add channels rpi

来将树莓派的专用频道添加进来,然后如果是想直接替换python就conda install python=3.6,如果是想创建一个虚拟环境的就conda create -n py3.6 python=3.6即可.

安装node环境

node提供针对不同硬件环境的编译好的运行时环境和配套工具,可以在https://nodejs.org/en/download/找到并下载, 下载下来后使用tar -xvf ***.tar.xz解压,之后只要修改根目录下的.zshrc/.bash_profile,在其中添加解压好的目录位置中的bin文件夹到PATH即可

安装java环境

树莓派官方源上有openjdk6,7,8,9的支持,可以直接使用sudo apt-get install openjdk-8-jdk安装即可