NanoPi NEO Air使用三:OverlayFSCPU温度和频率wifi蓝牙npi-config

Posted qlexcel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NanoPi NEO Air使用三:OverlayFSCPU温度和频率wifi蓝牙npi-config相关的知识,希望对你有一定的参考价值。

固件烧录完成后就进入了FriendlyCore系统。

FriendlyCore介绍

FriendlyCore,是一个没有X-windows环境,基于Ubuntu core构建的系统,使用Qt-Embedded作为图形界面的轻量级系统,兼容Ubuntu系统软件源,非常适合于企业用户用作产品的基础OS。

本系统除了保留Ubuntu Core的特性以外,还包括以下特性:
集成Qt4.8;
集成NetworkManager网络管理器;
集成bluez等蓝牙相关软件包;
集成alsa相关软件包;
集成命令行系统配置工具npi-config;
集成Python GPIO模块RPiGPIO;
集成Python/C语言编写的demo程序,位于/root目录;
使能512M的swap分区;

运行FriendlyCore

对于有HDMI接口的板子,如果要在电视上进行操作,需要连接USB鼠标和键盘。
如果需要进行内核开发,最好选购一个串口配件,连接了串口,则可以通过串口终端对开发板进行操作。

FriendlyCore默认帐户:
普通用户:

   用户名: pi
   密码: pi

Root用户:

   用户名: root
   密码: fa

进入系统后可以执行下列命令查看文件系统分区大小:
df -h

可以看到其中一个overlay文件系统。

OverlayFS

简介

Overlayfs是Linux下的一种堆叠文件系统,通俗地讲,根文件系统虽然在逻辑仍然是一个分区,但物理上被拆分成了两个分区来存储,其中,一个分区只读存放固化的系统数据(rootfs分区),另一个分区存储写入的数据(data分区),优点如下:

  1. 方便恢复出厂设置,格式化data分区即可;
  2. 避免重复掉电或异常掉电导致data分区挂载异常无法进入系统,由于rootfs是只读的,此时仍可以进入系统,方便维护升级;

如何鉴别系统是否工作在OverlayFS

执行df命令,如果/分区挂载类型为 overlay,表示OverlayFS正在工作:

pi@NanoPi-M1-Plus:~$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              474848       0    474848   0% /dev
tmpfs             102304    3564     98740   4% /run
overlay         28925547 1315493  26112465   5% /
tmpfs             511512       0    511512   0% /dev/shm
tmpfs               5120       4      5116   1% /run/lock
tmpfs             511512       0    511512   0% /sys/fs/cgroup
/dev/mmcblk0p1     40862   11852     29010  30% /boot
tmpfs             102304       0    102304   0% /run/user/1000

使用OverlayFS时的分区布局

会有三个分区,分别为 rootfs分区、data分区与boot分区,对应映像文件rootfs.img, userdata.img 和 boot.img:

root@NanoPi-M1-Plus:~# lsblk /dev/mmcblk0
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0 29.7G  0 disk
|-mmcblk0p2 179:2    0  1.2G  0 part
|-mmcblk0p3 179:3    0 28.5G  0 part
`-mmcblk0p1 179:1    0   40M  0 part /boot

其中,rootfs分区存放固化的系统数据,所有对根目录的数据写入,都会写入到 data分区。

使用OverlayFS实现恢复出厂设置功能

手动清除user data分区数据
挂载data分区并重命名相关目录:

mount /dev/mmcblk0p3 /media/ && cd /media/
mv root/ deleteme.root
mv work/ deleteme.work
reboot

重启完成后,删除目录:

mount /dev/mmcblk0p3 /media/ && rm -rf /media/deleteme.*

更多请看:How to use overlayfs on Linux/zh

定制命令行的欢迎信息(文字LOGO)

欢迎信息主要是这个目录下的脚本来打印的:

/etc/update-motd.d/

比如要修改 FriendlyELEC 的大字LOGO,可以修改/etc/update-motd.d/10-header 这个文件,比如要将LOGO改为HELLO,可将以下行:

TERM=linux toilet -f standard -F metal $BOARD_VENDOR

改为:

TERM=linux toilet -f standard -F metal HELLO

查看CPU温度和频率

命令行查看:

$ cpu_freq 
Aavailable frequency(KHz):
        480000 624000 816000 1008000
Current frequency(KHz):
        CPU0 online=1 temp=26548C governor=ondemand freq=624000KHz
        CPU1 online=1 temp=26548C governor=ondemand freq=624000KHz
        CPU2 online=1 temp=26548C governor=ondemand freq=624000KHz
        CPU3 online=1 temp=26548C governor=ondemand freq=624000KHz

上述信息表示当前有4个CPU核在线, 温度均约为26.5摄氏度, 运行的策略均为根据需求来决定运行频率, 当前的运行频率均为624MHz,设置频率的命令如下:

$ cpu_freq -s 1008000
Aavailable frequency(KHz):
        480000 624000 816000 1008000
Current frequency(KHz):
        CPU0 online=1 temp=36702C governor=userspace freq=1008000KHz
        CPU1 online=1 temp=36702C governor=userspace freq=1008000KHz
        CPU2 online=1 temp=36702C governor=userspace freq=1008000KHz
        CPU3 online=1 temp=36702C governor=userspace freq=1008000KHz

上述命令将4个CPU核的频率设置为1008MHz。

连接wifi

无论是SD接口的WiFi还是USB接口的WiFi, 它们的连接方式都是一样的。
NanoPi NEO Air上带的wifi是正基科技的APXX系列芯片,它属于SD WiFi。

另外系统默认也已经支持市面上众多常见的USB WiFi,插在板子的USB接口上就能使用,已测试过的USB WiFi型号如下:

序号型号
1RTL8188CUS/8188EU 802.11n WLAN Adapter
2RT2070 Wireless Adapter
3RT2870/RT3070 Wireless Adapter
4RTL8192CU Wireless Adapter
5小米WiFi mt7601
65G USB WiFi RTL8821CU
75G USB WiFi RTL8812AU

目前使用 NetworkManager 工具来管理网络,其在命令行下对应的命令是 nmcli,要连接WiFi,相关的命令如下:

  • 切换到root账户(密码:fa)
  • su root

  • 查看网络设备列表
  • nmcli dev

    注意,如果列出的设备状态是 unmanaged 的,说明网络设备不受NetworkManager管理,你需要清空 /etc/network/interfaces下的网络设置,然后重启.

  • 开启WiFi
  • nmcli r wifi on

  • 扫描附近的 WiFi 热点(按q退出列表状态)
  • nmcli dev wifi

  • 连接到指定的 WiFi 热点
  • nmcli dev wifi connect "SSID" password "PASSWORD" ifname wlan0

    请将 SSID和 PASSWORD 替换成实际的 WiFi名称和密码。
    连接成功后,下次开机,WiFi 也会自动连接。

    此时可以看到wlan0网口已经有ip了,ping百度也通了,说明网络连接已经正常了。

    网络正常后,可以执行下列命令来更新下软件包:
    sudo apt-get update

    更详细的NetworkManager使用指南可参考这篇文章: Use NetworkManager to configure network settings

    如果你的USB WiFi无法正常工作, 大概率是因为文件系统里缺少了对应的USB WiFi固件。对于Debian系统, 可以在Debian-WiFi里找到并安装USB WiFi芯片的固件。而对于Ubuntu系统, 则可以通过下列命令安装所有的USB WiFi固件:
    apt-get install linux-firmware

    一般情况下, 各种WiFi芯片的固件都存放在/lib/firmware目录下。

    配置WiFi无线热点

    上面是把开发板作为station连入家里的wifi热点,让开发板上网。本节再把开发板配置为wifi热点,这样手机和电脑可以连到开发板的wifi构成一个局域网。

    执行以下命令进入AP模式:
    su root
    turn-wifi-into-apmode yes

    这时会提示你输入WiFi热点的名称和密码,按提示操作即可。
    操作成功后,你可以在电脑/手机上搜索并连接热点,然后通过192.168.8.1这个地址来登录开发板:
    ssh root@192.168.8.1

    在提示输入密码时,输入预设的密码fa,即可登入。

    为了保证ssh的流畅,用以下命令关闭wifi的省电模式:
    iwconfig wlan0 power off

    要切换回普通的Station模式,输入如下命令:
    turn-wifi-into-apmode no

    使用蓝牙传输文件

    以传输文件到手机为例进行说明,首先,将你的手机蓝牙设置为可侦测状态,然后执行以下命令开始蓝牙搜索:
    hcitool scan

    搜索到设备时,结果举例如下:

    Scanning ...
        2C:8A:72:1D:46:02   HTC6525LVW
    

    这表示搜索到一台名为HTC6525LVW的手机,我们记下手机名称前面的MAC地址,然后用sdptool命令查看该手机支持的蓝牙服务:
    sdptool browser 2C:8A:72:1D:46:02

    注:上述命令中的MAC地址请替换成手机实际的蓝牙MAC地址

    这个命令会详细列出手机蓝牙所支持的协议,我们需要关心的是一个名为 OBEX Object Push 的文件传输服务,以HTC6525LVW手机为例,其显示结果如下所示:

    Service Name: OBEX Object Push
    Service RecHandle: 0x1000b
    Service Class ID List:
      "OBEX Object Push" (0x1105)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 12
      "OBEX" (0x0008)
    Profile Descriptor List:
      "OBEX Object Push" (0x1105)
        Version: 0x0100
    

    从上面的信息可以看到,这个手机的OBEX Object Push服务的所用的频道是12, 我们需要将它传递给obexftp命令,最后发起文件传输请求的命令如下:
    obexftp --nopath --noconn --uuid none --bluetooth -b 2C:8A:72:1D:46:02 -B 12 -put example.jpg

    注:上述命令中的MAC地址、频道和文件名请替换成实际的

    执行上述命令后,请留意手机屏幕,正常情况下手机会弹出配对和接收文件的提示,确定后就开始文件传輪了。

    蓝牙常见问题:

    1. 开发板上找不到蓝牙设备, 可尝试用以下命令开启蓝牙:
      rfkill unblock 0

    2. 提示找不到相关命令,可尝试用以下命令安装相关软件:
      apt-get install bluetooth bluez obexftp openobex-apps python-gobject ussp-push

    npi-config

    npi-config是一个命令行下的系统配置工具,可以对系统进行一些初始化的配置,可配置的项目包括:用户密码、系统语言、时区、Hostname、SSH开关、自动登录选项、硬件接口(Serial/I2C/SPI/PWM/I2S)使能等。
    在SSH终端中以root账户执行以下命令即可进入:
    npi-config
    npi-config的显示界面如下:

    npi-config目前仅支持基于Ubuntu的系统, 例如FriendlyCore、Ubuntu-oled、Ubuntu-tft, 暂时不支持在Debian系统上运行。
    如果你在 npi-config 中没有WiKi里描述的功能菜单,可能是因为你的 npi-config 版本太旧,连上网络, 然后利用菜单上的 Update 功能更新一下即可。

    $ npi-config
    	7 Update|               Update this tool to the latest version
    

    1 Change User Password

    修改默认用户的登录密码

    2 Hostname

    修改主机名,比如我们修改为:ql

    3 Boot Options

    B1 Autologin: 设置如何登录系统

    有3种选择:

  • <1> Console: 开机后要求输入用户名和密码, 然后登录终端;
  • <2> Console Autologin: 开机后自动以pi用户登录终端;
  • <3> Qt/Embedded: 开机后不登录终端, 而是直接运行Qt Demo;
  • B2 Wait for Network at Boot: 开机时是否等待网络连接

    一般设置为否, 就算是网络不通也仍然可以进入系统。

    B3 Boot device: 选择启动设备

    进入后,如果板子接了SSD,可以看到下面的列表

  • D1 Hard drive
  • D2 TF card
  • 选择 D1 Hard drive,然后按提示进行操作即可,这样就可以让板子从SSD运行系统。
    以后要恢复回 TF 卡启动,可在上述菜单中选择 D2 TF card。
    当然如果板子上只有TF卡,那么上面的启动列表就为空。

    4 Localisation Options

    修改系统语言、时区。

    5 Interfacing Options

    控制是否允许使用远程SSH控制系统。

    6 Advanced Options

    A0 Display: 选择系统默认显示设备

    该功能仅支持全志芯片系列的开发板。
    Linux系统默认只从一个显示设备输出画面, 使用下列命令可以选择系统默认的显示设备:

    $ npi-config
    	6 Advanced Options|     Configure advanced setting
    		A0 Display|         Select system default display device
    			fb0| framebuffer0
                            fb1| fb_st7789v(X)
    

    (X)表示对应的显示设备是使能的, 不同型号的板子的fb设备是不一样的, 在H3/H5的板子里fb0是HDMI, fb1是Matrix - 2’8 SPI Key TFT, 请根据实际情况进行选择, 设置完毕后需要重启系统。

    A1 Audio: 选择系统默认音频设备

    该功能仅支持全志芯片系列的开发板。
    Linux系统默认只从一个音频设备输出音频, 使用下列命令可以选择系统默认的音频设备:

    $ npi-config
    	6 Advanced Options|     Configure advanced setting
    		A1 Audio|           Select system default audio device
    			card0| [Dummy], device 0: Dummy PCM                                
                            card1| [Loopback], device 0: Loopback PCM                          
                            card2| [H3 Audio Codec], device 0: CDC PCM Codec-0 (X)             
                            card3| [allwinner,hdmi], device 0: 1c22800.i2s-i2s-hifi i2s-hifi-0
    

    (X)表示对应的音频card设备是使能的, 不同型号的板子的card设备是不一样的, 请根据实际情况进行选择, 设置完毕后需要重启系统。

    A2 Welcome message: 使能或关闭开机欢迎界面

    A3 Serial: 使能或关闭串口功能

    该功能仅支持全志芯片系列并且使用Linux-4.14内核的开发板。

    A4 I2C: 使能或关闭I2C功能

    该功能仅支持全志芯片系列并且使用Linux-4.14内核的开发板。

    A5 SPI: 使能或关闭SPI功能

    该功能仅支持全志芯片系列并且使用Linux-4.14内核的开发板。
    支持使能部分SPI设备, 包括2.8寸TFT屏幕和SPI Flash。

    使能Matrix - 2’8 SPI Key TFT
    Matrix - 2’8 SPI Key TFT是一个2.8寸的TFT显示屏, 详细的使用方法请参考: Matrix - 2’8 SPI TFT/zh, 这里只关注如何使能该配件。

    $ npi-config
    	6 Advanced Options|     Configure advanced settings
    		A5 SPI|             Enable/Disable SPI
    			spi0 Enable/Disable spi0[enabled]
    				spidev0.0|   SPI0 char device
    				spi-2.8'tft| Matrix-2'8_SPI_Key_TFT(X)				
    				spi-flash|   SPI0 flash
    

    (X)表示SPI0上连接的Matrix - 2’8 SPI Key TFT是使能的, 设置完毕后需要重启系统, 系统启动后屏幕上会显示校准的界面。

    使能SPI0上的SPI Flash

    $ npi-config
    	6 Advanced Options|     Configure advanced setting
    		A5 SPI|             Enable/Disable SPI
    			spi0 Enable/Disable spi0[enabled]
    				spidev0.0|   SPI0 char device
    				spi-2.8'tft| Matrix-2'8_SPI_Key_TFT
    				spi-flash|   SPI0 flash(X)
    

    FriendlyElec H5/H3/H2+的Linux-4.14内核集成了"mxicy,mx25l12805d"的SPI Flash驱动,但是默认并没有使能,选择’spi-flash’后即可将其使能, 设置完毕后需要重启系统。
    启动Linux系统时,看到类似下面的启动信息则说明SPI Flash被成功检测到了:

    m25p80 spi0.0: mx25l12805d (16384 Kbytes)
    1 ofpart partitions found on MTD device spi0.0
    Creating 1 MTD partitions on "spi0.0":
    0x000000000000-0x000001000000 : "spi-flash"
    

    SPI Flash在Linux系统下的使用方法如下:

    $ cat /sys/class/mtd/mtd0/size          # 以byte为单位
    $ cat /sys/class/block/mtdblock0/size   # 以sector(512 byte)为单位
    $ apt-get install mtd-utils 
    $ flash_eraseall -j /dev/mtd0           # 格式成jffs2的格式
    $ mount -t jffs2 /dev/mtdblock0 /mnt    
    $ mkfs.ext4 /dev/mtdblock0              # 也格式化为ext4
    $ mount -t ext4 /dev/mtdblock0 /mnt
    

    A6 PWM: 使能或关闭PWM功能

    该功能仅支持全志芯片系列并且使用Linux-4.14内核的开发板。

    A7 I2S: 使能或关闭I2S功能

    该功能仅支持全志芯片系列并且使用Linux-4.14内核的开发板。

    使能NanoHat PCM5102A

    A8 IR: 使能或关闭IR 接收功能

    该功能仅支持全志芯片系列并且使用Linux-4.14内核的开发板。

    注意: 请先检查红外接收器是否存在。
    红外接收功能默认是关闭的, 可以通过npi-config使能:

    $ npi-config
        6 Advanced Options     Configure advanced settings
            A8 IR              Enable/Disable IR
                ir Enable/Disable ir[enabled]
    

    重启系统, 然后使用下列命令测试红外接收:

    $ apt-get install ir-keytable
    $ echo "+rc-5 +nec +rc-6 +jvc +sony +rc-5-sz +sanyo +sharp +mce_kbd +xmp" > /sys/class/rc/rc0/protocols   # 使能紅外协议
    $ ir-keytable -t
    Testing events. Please, press CTRL-C to abort.
    

    ir-keytable -t用于检查是否有接收到红外信号, 使用任意遥控器发送按键信息给红外接收器, 可以看到类似下列信息:

    1522404275.767215: event type EV_MSC(0x04): scancode = 0xe0e43
    1522404275.767215: event type EV_SYN(0x00).
    1522404278.911267: event type EV_MSC(0x04): scancode = 0xe0e42
    1522404278.911267: event type EV_SYN(0x00).
    

以上是关于NanoPi NEO Air使用三:OverlayFSCPU温度和频率wifi蓝牙npi-config的主要内容,如果未能解决你的问题,请参考以下文章

NanoPi NEO Air使用二:固件烧录

NanoPi NEO Air使用一:介绍

NanoPi NEO Air使用四:操作GPIO

NanoPi NEO Air使用十:自己编写驱动来控制LED

NanoPi NEO Air使用六:使用摄像头

NanoPi NEO Air使用十六:使用python做开发