树莓派Linux系统安装和配置

Posted by Hsz on February 19, 2018

树莓派和linux

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

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

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

本文是之前博文”树莓派coder系统安装和配置”的’重制版’,在近一年的折腾过程中我更加偏向使用官方提供的最基础的raspbian而非google魔改的coder,因为coder在大多数场景下都有点略重了.当然之前的内容还是会放在文末,有兴趣的依然可以尝试.

raspbian

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

  1. 下载镜像 我们需要去官网下载zip格式的镜像.通常我们选择下载’RASPBIAN STRETCH LITE’,这个镜像不包含gui,更小巧;
  2. 下载一个镜像写入工具 官方推荐的是Etcher,这个工具很傻瓜确实挺好用的,只要选择镜像选择要写入的盘,然后点击写入按钮就可以了.
  3. 格式化sd卡(option) 如果是以前使用过用来做树莓派系统的卡,至少在windows下会老提示要求格式化磁盘,确实,需要先格式化一下这张sd卡,但并不是只有这一步,实际上写入过镜像的sd卡会被分为2个盘,一个40M左右的启动盘和一个另外的盘,这时候我们需要在windows下进入管理工具,将这两个部分都格式化后删除,然后将他们的空间合并,再格式化为一张完整的盘.
  4. 写入镜像 选好镜像,选好盘,点击就行,写入完成后,如果是在windows下还是后提示无法识别设备,要求你格式化,这时候不要理他.
  5. 开启ssh(option) 如果你下载的镜像是2016-11-25之后的版本,那么你需要多这么一个额外的步骤,因为ssh默认被关闭了.在写入完成后,你的sd卡会被分为两个部分,一部分是40M左右的启动盘,一个是剩下的,打开你的启动盘,在其根目录下放上一个名为ssh的空文件.这样就可以使用ssh链接了.

连接树莓派

raspbian的默认用户是pi,密码是raspberry,安全起见登录后可以修改下.如果你使用的是windows,那么要用ssh连接你的树莓派就会需要额外的工具,推荐使用Xshell,免费版就已经可以解决问题了.

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

到本文写作的时间为止,树莓派出了3代,我由于个人兴趣的关系,有1台1b型4台2b型和1台3b型,其基本参数如下:

硬件参数 1B型 2B型 3B型
Soc Broadcom BCM2835 Broadcom BCM2836 Broadcom BCM2837
CPU ARM1176JZF-S 32bit(ARM11) ARM Cortex-A7 32bit(ARMv7) ARM Cortex-A53 64bit(ARMv8)
GPU Broadcom VideoCore IV OpenGL ES 2.0 Broadcom VideoCore IV OpenGL ES 2.0 Broadcom VideoCore IV OpenGL ES 2.0
主频 700MHZ 900MHZ 1.2GHZ
核心数 1 4 4
内存 512M 1G 1G
USB2.0口数量 2 4 4
网络接口 10/100Mbps以太网接口(RJ45接口) 10/100Mbps以太网接口(RJ45接口) 10/100Mbps以太网接口(RJ45接口),支持802.11n无线网络和蓝牙4.1
额定功率 3.5W(5V/700mA) 4.0W(5V/800mA)  

关于树莓派2b更加详细的硬件评测,可以看这篇博文,作者是一位严谨的EE工程师,比我专业太多.

至于实际的性能还要看:

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

我们可以在系统下使用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满负荷运转.

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

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

主要的应用场景:

  • 低并发io场景,比如个人博客之类
  • 面向控制的服务,比如各种开关量控制,各种数据采集的应用,1b,2b做这个比较合适.
  • 低计算量的应用,比如BT下载客户端,NAS等场景,这类场景往往需要稳定性和低能耗,树莓派在电源稳定的情况下稳定性和能耗还是可以.
  • 针对高速应用的场景,更多的是探索验证,尤其是1b基本就告别这类场景了.
  • 利用其廉价和有完整linux系统的特点,做分布式系统验证实验之类

系统配置

系统配置主要是这么几个部分,可以按需求来配置:

  • 修改源
  • 设置shell
  • 设置vim
  • locale配置
  • 扩展存储空间
  • 超频
  • 修改主机名和登录密码
  • 安装源添加工具software-properties-common
  • 安装python环境
  • 安装java环境
  • 安装node环境

修改源

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

这里需要改动/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退出,接着就是用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

设置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:/

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重启

超频

1b和2b的超频的设置也在树莓派的设置界面,使用sudo raspi-config进入,之后沿路径

overclock

进入选择,会给出5个方案,

  • None
  • Modest 略微的小超一下
  • Medium 中等程度的超一下
  • High 多超一些
  • Turbo 字面就是涡轮增压,也就是最高级的超频程度

然后根据自己的选择设置即可.

设置完成记得sudo reboot重启

但3b就不能直接通过这种方式超频了,一种更加通用的超频方式是修改sd卡中的对应文件,步骤是:

  • 关机,拔出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 add-apt-repository ppa:openjdk-r/ppa.而这个工具并没有默认安装,我们可以使用sudo apt-get install software-properties-common来安装下.

安装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安装即可

关于多用户和如何使用树莓派

个人觉得树莓派非常的没有必要搞多用户,因为性能摆在这里,这种小机器不能支持多个用户共同使用,而代码管理,版本管理这种工作也应该交给git这种工具,树莓派比较适合代替docker的职能,应该一台机器就只做一件事,而且这件事的数据就只存在本机.

————————-标明原来文章的分割线—————————-

coder

coder是一个基于arm版linux的操作系统,修改自raspbian.它自带一个web的配置界面(虽然用处不大),并且自带一个js的开发展示平台.

安装

官网按照步骤下载与安装coder. mac下可以直接一步安装.

配置

本质上来说coder就是raspbian套个前端开发用的静态服务器壳子.所以与其说配置coder不如说配置linux系统.

  • ssh登陆:

    coder安装好后首先是确保能用自己的电脑连上,可以使用ssh工具.

    1. 把sd卡插上小pi,然后联通电源和网线.
    2. 浏览器中输入 https://coder.local/打开coder的进入界面.注意会有安全警告,不用担心,这个是安全的,选无论如何都要访问即可.第一次进入会要设置6位密码.
    3. 在路由器中根据他的主机名字和mac地址设置它的ip.
    4. 重启小pi(拔电源).
    5. 试试看设置的pi地址能否让你在浏览器中访问coder.可以的话即为设置成功.
  • 正式使用ssh连接:

    1. 打开terminal
    2. 输入ssh pi@<ip地址>
    3. 输入刚才设定好的密码
  • 系统设置

    ssh登陆后就可以进行系统设置了

      sudo raspi-config
    

    进入设置界面

    选项 功能 说明
    Expand Filesystem 扩展存储空间 coder安装完后不会自动扩展空间,你的系统装了多大就是多大,和sd大小无关,必须使用该功能扩展存储
    Change User Password 修改密码
    Enable Boot to Desktop/Scratch 启动时进入的环境选择 其下有3个选项按顺序分别是:
    Consol,Text console, requiring login(default)
    启动时进入字符控制台,需要进行登录(默认项);
    Desktop log in as user ‘pi’ at the graphical desktop
    启动时进入LXDE图形界面的桌面;
    Scratch Start the Scratch programming environment upon boot
    启动时进入Scratch编程环境,进入后,可以点File->Exit退出,然后在退出过程中按Ctrl+C进入控制台
    Internationalisation Options 国际化选项,可以更改默认语言
    Enable Camera 启动摄像头模块
    Add to Rastrack 把你的PI的地理位置添加到一个全世界开启此选项的地图 建议还是不要开了,免得被跟踪
    Overclock 超频 小心点不要超太多然后烧了,注意超了就不保修了,话说300块的东西也不用保修吧
    Advanced Options 高级选项 A1 Overscan是否让屏幕内容全屏显示
    A2 Hostname 在网上邻居或者路由器能看到的主机名称
    A3 Memory Split 内存分配,选择给GPU多少内存
    A4 SSH是否运行SSH登录,建议开户此选项,以后操作PI方便,有网络就行,不用开屏幕了。
    A5 SPI 是否默认启动SPI内核驱动,新手就不用管了。
    A6 Audio 选择声音默认输出到模拟口还是HDMI口
    0 Auto 自动选择
    1 Force 3.5mm (‘headphone’) jack强制输出到3.5mm模拟口
    2 Force HDMI 强制输出到HDMI
    A7 Update 把raspi-config这个工具自动升级到最新版本

    我就进行下更新,括充空间和修改时区就好了

    测试:

    • date —查看日期时间
    • df -h —查看sd卡使用状况
  • 更新软件源

    sudo apt-get update

  • 安装中文字库

      sudo apt-get install ttf-wqy-zenhei
    

    重启下

      sudo reboot
    
  • 修改主机名

    重启后进入pi

      cd /etc
      sudo chmod ugo+w hostname
      vim hostname
    

    将内容换成你希望的名字.然而发现并没有用处.翻阅资料发现coder可以直接在sd卡的文件中修改hostname.

    将装有coder的sd卡插入mac 修改其中coder_settings/hostname.txt内容即可.顺手把其中的hosts.txt修改了

    保存后记得把权限再改回来.记得如果有必要的话把主机名字在路由器中也更新下

  • 外网ssh连接小pi

    在路由器中将路由器的22端口映射给小pi的22端口

    之后只要

      ssh pi@176.184.102.237
    

    即可连接小pi

  • 远程桌面设置

    ssh进入小pi,安装一个服务xdrp.

      sudo apt-get install xrdp
    

    之后,就可以用mac下安装office2011时候的副产品 远程桌面连接app(mstsc) 连接小pi的桌面了.

    mstsc 的端口号默认是3389,同样可以设置端口映射让外网连接.

  • shell设置

    安装好后本来是默认高亮的,但为了安全起见,我们应该自己配置自己的shell

    在~中新建一个用于设置terminal的文件

      touch .bash_profile
    

    vim打开,添加以下内容到里面

      #--------------------------------------------------------------------bash
    
      # uncomment for a colored prompt, if the terminal has the capability; turned
      # off by default to not distract the user: the focus in a terminal window
      # should be on the output of commands, not on the prompt
      force_color_prompt=yes
    
      if [ -n "$force_color_prompt" ]; then
          if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
      # We have color support; assume it's compliant with Ecma-48
      # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
      # a case would tend to support setf rather than setaf.)
      color_prompt=yes
          else
      color_prompt=
          fi
      fi
    
      if [ "$color_prompt" = yes ]; then
          PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w \$\[\033[00m\] '
      else
          PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
      fi
      unset color_prompt force_color_prompt
    
      # If this is an xterm set the title to user@host:dir
      case "$TERM" in
      xterm*|rxvt*)
          PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
          ;;
      *)
          ;;
      esac
    
      if [ -x /usr/bin/dircolors ]; then
          test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
          alias ls='ls --color=auto'
          #alias dir='dir --color=auto'
          #alias vdir='vdir --color=auto'
    
          alias grep='grep --color=auto'
          alias fgrep='fgrep --color=auto'
          alias egrep='egrep --color=auto'
      fi
    

    ZZ保存退出后激活这个配置

      source .bash_profile
    

    之后就高亮了

完成以上这些步骤基本的配置就完成了!