赞
踩
NanoPi NEO Air使用一:介绍
NanoPi NEO Air使用二:固件烧录
NanoPi NEO Air使用三:OverlayFS、CPU温度和频率、wifi、蓝牙、npi-config
NanoPi NEO Air使用四:操作GPIO
NanoPi NEO Air使用五:安装Xfce和xrdp,实现远程访问
NanoPi NEO Air使用六:使用摄像头
NanoPi NEO Air使用七:获取并编译U-boot和Linux的源码
NanoPi NEO Air使用八:编写个简单的驱动和应用程序
NanoPi NEO Air使用九:使用Linux内核自带的LED驱动
NanoPi NEO Air使用十:自己编写驱动来控制LED
NanoPi NEO Air使用十一:编写SPI驱动点亮TFT屏幕,ST7789V
固件烧录完成后就进入了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分区;
对于有HDMI接口的板子,如果要在电视上进行操作,需要连接USB鼠标和键盘。
如果需要进行内核开发,最好选购一个串口配件,连接了串口,则可以通过串口终端对开发板进行操作。
FriendlyCore默认帐户:
普通用户:
用户名: pi
密码: pi
Root用户:
用户名: root
密码: fa
进入系统后可以执行下列命令查看文件系统分区大小:
df -h
可以看到其中有一个overlay文件系统。
Overlayfs是Linux下的一种堆叠文件系统,通俗地讲,根文件系统虽然在逻辑仍然是一个分区,但物理上被拆分成了两个分区来存储,其中,一个分区只读存放固化的系统数据(rootfs分区),另一个分区存储写入的数据(data分区),优点如下:
执行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
会有三个分区,分别为 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分区。
手动清除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
欢迎信息主要是这个目录下的脚本来打印的:
/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_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。
无论是SD接口的WiFi还是USB接口的WiFi, 它们的连接方式都是一样的。
NanoPi NEO Air上带的wifi是正基科技的APXX系列芯片,它属于SD WiFi。
另外系统默认也已经支持市面上众多常见的USB WiFi,插在板子的USB接口上就能使用,已测试过的USB WiFi型号如下:
序号 | 型号 |
---|---|
1 | RTL8188CUS/8188EU 802.11n WLAN Adapter |
2 | RT2070 Wireless Adapter |
3 | RT2870/RT3070 Wireless Adapter |
4 | RTL8192CU Wireless Adapter |
5 | 小米WiFi mt7601 |
6 | 5G USB WiFi RTL8821CU |
7 | 5G USB WiFi RTL8812AU |
目前使用 NetworkManager 工具来管理网络,其在命令行下对应的命令是 nmcli,要连接WiFi,相关的命令如下:
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目录下。
上面是把开发板作为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地址、频道和文件名请替换成实际的
执行上述命令后,请留意手机屏幕,正常情况下手机会弹出配对和接收文件的提示,确定后就开始文件传輪了。
蓝牙常见问题:
开发板上找不到蓝牙设备, 可尝试用以下命令开启蓝牙:
rfkill unblock 0
提示找不到相关命令,可尝试用以下命令安装相关软件:
apt-get install bluetooth bluez obexftp openobex-apps python-gobject ussp-push
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
修改默认用户的登录密码
修改主机名,比如我们修改为:ql
有3种选择:
一般设置为否, 就算是网络不通也仍然可以进入系统。
进入后,如果板子接了SSD,可以看到下面的列表
选择 D1 Hard drive,然后按提示进行操作即可,这样就可以让板子从SSD运行系统。
以后要恢复回 TF 卡启动,可在上述菜单中选择 D2 TF card。
当然如果板子上只有TF卡,那么上面的启动列表就为空。
修改系统语言、时区。
控制是否允许使用远程SSH控制系统。
该功能仅支持全志芯片系列的开发板。
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, 请根据实际情况进行选择, 设置完毕后需要重启系统。
该功能仅支持全志芯片系列的开发板。
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设备是不一样的, 请根据实际情况进行选择, 设置完毕后需要重启系统。
该功能仅支持全志芯片系列并且使用Linux-4.14内核的开发板。
该功能仅支持全志芯片系列并且使用Linux-4.14内核的开发板。
该功能仅支持全志芯片系列并且使用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
该功能仅支持全志芯片系列并且使用Linux-4.14内核的开发板。
该功能仅支持全志芯片系列并且使用Linux-4.14内核的开发板。
使能NanoHat PCM5102A
该功能仅支持全志芯片系列并且使用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).
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。