Astra Yocto Linux用户指南

概述

本文档介绍 Astra Linux 操作系统环境, 以及板级支持包(BSP)。它提供了关于构成BSP的组件以及如何与它们对接的信息。

支持的硬件

本指南涵盖以下参考套件和平台:

  • Astra系列 AI开发套件(Foundation)SL1620

  • Astra系列 AI开发套件(Foundation)SL1640

  • Astra系列 AI开发套件(Foundation)SL1680

参考资料

介绍

Astra Linux板级支持包(BSP)包含操作Astra系列 AI开发套件所需的软件和固件。 它包含启动操作系统和与硬件接口所需的组件。 本指南提供了这些软件组件的说明以及如何与它们进行接口的信息。 本文对于想要评估Astra系列 AI开发套件并使用这些处理器构建产品的用户非常有用。

本文档涵盖了Linux操作系统使用的组件。 为Astra系列 AI开发套件设置构建环境并基于Yocto创建映像的相关说明,请参阅 Astra Yocto Linux开发人员指南

关于Astra系列 AI开发套件硬件的具体信息, 请参阅 Astra系列 AI开发套件 页面。

Astra系列 AI开发套件接口

存在几种与Astra系列 AI开发套件交互的方法, 包括在外部显示器上使用图形桌面。此外,可以通过SSH、ADB和串行控制台进行Shell访问。

图形桌面

Astra系列 AI开发套件的图形桌面是默认启用的。 HDMI端口接入的外部显示器或MIPI显示器上可以显示。 接入标准的HID USB键盘和鼠标可以输入。

wayland-desktop.jpg

Astra系列 AI开发套件上的Wayland桌面

点击左上角的图标将打开一个终端。

wayland-terminal.jpg

打开终端的Wayland Desktop

备注

当前SL1620不支持HDMI

SH Shell

Astra 开发套件默认启用ssh。 通过网络接受来自ssh客户端的连接。使用 root 用户名登录。无需密码:

ssh root@10.10.10.100

备注

在上面的示例中, Astra 开发套件的地址是 10.10.10.100 。请将此IP替换为您的设备IP地址。

ADB Shell

Astra 开发套件支持USB上的Android Debug Bridge(ADB)。 ADB应用于Android设备,并已移植到Astra 开发套件上。谷歌在 这里 提供了大量关于ADB的文档。

要使用ADB,请将USB线将主机系统与Astra 开发套件的USB Type-C USB 2.0端口相连(靠近以太网口)。

usb-c.png

Astra 开发套件 组件图,红框为USB Type-C USB 2.0端口

Google为Mac、Linux和Windows提供了不同版本的ADB。 安装ADB后,请运行 adb devices 以查看连接到主机的所有ADB设备。 然后运行:

adb shell

或者,如果有多个ADB设备:

adb -s SL16x0 shell
powershell-adb.png

在Windows PowerShell中使用ADB

串行控制台

Astra系列 AI开发套件提供了一个串行控制台, 用于在运行在主机系统上的终端仿真器上显示来自Bootloader和操作系统的消息。 在启动过程的早期或显示器未连接时,这些消息有助于确定Astra 开发套件的状态。 它还可以在操作中提供有用的信息。在固件更新过程中,串行控制台也是需要的。

设置串行控制台

Astra系列 AI开发套件(Foundation)SL16xx开发套件配有USB-TTL板和飞线式电缆。 使用电缆将USB-TTL板连接到Astra 开发套件的40针GPIO接头。

USB TTL

Astra 开发套件

GND

6

RXD

8

TXD

10

usb-ttl-board.png

开发套件中提供USB TTL板

board-ports.png

含标注的40 GPIO接头的Astra 开发套件

40-pin-connector.png

Astra 开发套件的40针GPIO接头引脚分配

Windows和Mac主机与USB-TTL板上的USB转UART芯片的连接需要额外的驱动程序。请从 Silicon Labs CP210x USB to UART Bridge VCP Drivers 页面下载适用于您的主机的驱动程序。Linux主机通常支持默认启用该芯片。

一旦安装了驱动程序, 串行控制台便可被Putty、HyperTerminal、Tera Term、Screen或Minicom这类的终端仿真程序访问。

putty.png

Windows上的Putty终端仿真器

configure-minicom.png

Mac操作系统上的Minicon终端模拟器

Linux操作系统登录

Linux成功启动后,串行控制台中将显示登录提示。请使用 root 用户名登录。无需密码。

login-prompt.png

在Minicom中看到的启动成功

多媒体

Astra系列 AI开发套件包含可加速处理多媒体工作负载的硬件和软件组件。 Linux BSP提供多个Gstreamer插件,用户可应用这些多媒体组件来开发程序以提升多媒体性能的。 本节概述了如何使用Gstreamer命令行界面来应用这些插件构建管道。有关Gstreamer框架的信息,请访问 https://gstreamer.freedesktop.org/

Gstreamer插件

Gstreamer用插件模块来扩展Gstreamer功能。 Astra 开发套件用插件来使其硬件组件能被Gstreamer管道使用。 下表格列出了Astra 开发套件支持的编解码器所用的插件。

视频编码

编解码器

解析器插件

解码器插件

编码器插件

H.264

h264parse

v4l2h264dec

v4l2h264enc

H.265

H265Parse

v4l2h265dec

VP8

N/A

v4l2vp8dec

v4l2vp8enc

VP9

vp9parse

v4l2vp9dec

AV1

av1parse

v4l2av1dec

音频编解码器

编解码器

解析器插件

解码器插件

编码器插件

AAC

aacparse

fdkaacdec

fdkaacenc

Vorbis

N/A

vorbisdec

vorbisenc

Gstreamer示例

要运行以下Gstreamer示例, 请确保在您的环境中设置以下变量。 这些变量可能需要从串行控制台或远程shell运行命令设置:

export XDG_RUNTIME_DIR=/var/run/user/0
export WAYLAND_DISPLAY=wayland-1

XDG_RUNTIME_DIR 变量指定了包含属于用户的Wayland套接字的目录。 WAYLAND_DISPLAY 变量指定了哪个Wayland合成器被连接。

以下这些示例,使用gst-launch-1.0命令行程序来构造一个管道并启动播放。 gst-launch-1.0命令接受一个由感叹号分隔的元素类型列表。 这些元素也可含有可选属性(更多详情,请参阅 GStreamer文档 )。以下示例将显示该命令的结构,提供简要说明,随附一个或多个样例。

媒体播放

音频接收器

以下示例使用ALSA音频接收器通过ALSA音频API来输出音频(更多详情,请参阅 GStreamer文档。 )。示例所用设备 hw:0,7 对应于SL1680上的HDMI输出设备。硬件设备可以在文件 /proc/asound/pcm 中找到。下面是SL1680上的pcm设备示例。Device 0-7对应于HDMI设备,并在下面的示例中使用。

示例 SL1680的/proc/asound/pcm输出:

root@sl1680:~# cat /proc/asound/pcm
00-00: soc-i2so1 snd-soc-dummy-dai-0 :  : playback 1
00-01: soc-i2so3 snd-soc-dummy-dai-1 :  : playback 1
00-02: soc-dmic snd-soc-dummy-dai-2 :  : capture 1
00-03: soc-i2si2 snd-soc-dummy-dai-3 :  : capture 1
00-04: btsco-in snd-soc-dummy-dai-4 :  : capture 1
00-05: soc-i2s-pri-lpbk snd-soc-dummy-dai-5 :  : capture 1
00-06: soc-i2s-hdmi-lpbk snd-soc-dummy-dai-6 :  : capture 1
00-07: soc-hdmio snd-soc-dummy-dai-7 :  : playback 1
视频接收器

下面的示例使用Wayland视频接收器创建一个窗口并渲染解码的帧 (更多详情,请参阅 GStreamer文档 )。

音频播放

播放音频文件涉及读取和解析编码的音频数据,解码数据,并将其输出到音频接收器。 在将数据发送到音频接收器之前,某些数据格式和音频接收器可能还需要对数据做转换和重采样:

gst-launch-1.0 filesrc location=audio_file ! parser ! decoder ! [ convert ] ! [ resample ] ! audiosink

此示例使用外接HDMI设备的扬声器来播放MP3文件:

gst-launch-1.0 filesrc location=audio_file.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! audioresample ! alsasink device=hw:0,7

视频播放

播放视频文件涉及读取文件、对视频流进行解复用、解析编码数据、以及使用视频解码器对数据进行解码。 最后,将解码后的帧输出到视频接收器:

gst-launch-1.0 filesrc location=video_file ! demux ! queue ! parser ! decoder ! videosink

以下示例播放MP4文件的主视频流, 并使用Wayland显示视频。本示例中,视频是H265编码的:

gst-launch-1.0 filesrc location=test_file.mp4 ! qtdemux name=demux demux.video_0 ! queue ! h265parse ! v4l2h265dec ! waylandsink fullscreen=true

类似的示例,但文件采用AV1编码:

gst-launch-1.0 filesrc location=test_file.mp4 ! qtdemux name=demux demux.video_0 ! queue ! av1parse ! v4l2av1dec ! waylandsink fullscreen=true

音视频文件播放

播放同时包含音频流和视频流的文件,需要创建解析和解码这两种流的管道:

gst-launch-1.0 filesrc location=test_file.mp4 ! qtdemux name=demux demux.video_0 ! queue ! av1parse ! v4l2av1dec ! waylandsink fullscreen=true

播放带有H265编码的视频流和AAC编码的音频流的MP4文件:

gst-launch-1.0 filesrc location=test_file.mp4  ! qtdemux name=demux \
  demux.video_0 ! queue ! h265parse ! v4l2h265dec ! queue ! waylandsink fullscreen=true \
  demux.audio_0 ! queue ! aacparse ! fdkaacdec ! audioconvert ! alsasink device=hw:0,7

录制

音频录制

音频录制包括从麦克风等捕获设备读取数据,对数据进行转换、编码和多路复用后,再写入输出文件:

gst-launch-1.0 -v alsasrc device=device ! queue ! convert ! encode ! mux ! filesink location=output file

以下示例录制来自 ALSA 捕获设备0,2的音频。 然后编码器将原始数据转换为可被Vorbis编解码器编码的格式。 一旦数据被编码,它就被多路复用到Ogg容器中并写入文件 /tmp/alsasrc.ogg

gst-launch-1.0 -v alsasrc device=hw:0,2 ! queue ! audioconvert ! vorbisenc ! oggmux ! filesink location=/tmp/alsasrc.ogg

摄像头

Astra系列 AI开发套件支持带有V4L2驱动程序栈的USB(UVC)摄像头。该栈可与Gstreamer一起构建管道来使用摄像头。

要将摄像头捕获的视频输出到视频接收器,请执行以下操作:

gst-launch-1.0 v4l2src device=/dev/videoX ! "video data,framerate,format,width,height" ! video sink

以下示例从V4L2设备 /dev/video2 读取捕获的数据,并在输出到wayland接收器之前应用了多功能过滤器:

gst-launch-1.0 v4l2src device=/dev/video2 ! "video/x-raw,framerate=30/1,format=YUY2,width=640,height=480" ! waylandsink fullscreen=true

Gstreamer Playbin插件

Astra 开发套件包含Gstreamer playbin插件。该插件可以基于自动文件类型识别来自动确定构建何种类型的管道(请参阅 GStreamer文档。 )。这简化了管道的创建。

Playbin将自动检测位于指定uri的媒体文件, 并为其创建管道。然后,它将在视频接收器上显示视频,并在音频接收器上播放音频。 Video-sinkaudio-sink 的参数是可选的。 如果不带参数,则将使用默认的视频和音频接收器:

gst-launch-1.0 playbin uri=file:///path/to/file video-sink="video sink" audio-sink="audio sink"

使用playbin,音频接收器 中的示例可以简化为:

gst-launch-1.0 playbin uri=file:///path/to/file video-sink="waylandsink fullscreen=true" audio-sink="alsasink device=hw:0,7"

GStreamer SyNAP插件

Astra 开发套件提供了一个Gstreamer插件, 可在Gstreamer管道中添加ML处理。 该插件使用SyNAP框架与硬件加速器交互以提高ML处理的性能 ML处理。 有关SyNAP的信息,请参阅 使用SyNAP进行机器学习

SyNAP插件可以作为Gstreamer appsrc和appsink。 它从管道中获取样本并使用SyNAP框架,应用神经网络对帧执行分类或检测。然后将结果输出为JSON格式的数据。

我们提供了 应用程序示例 。它在播放视频的同时,对视频帧执行图像分类,然后将结果叠加到视频上。 该应用程序的预构建版本已包含在Astra系统映像。

使用以下命令运行该示例应用程序:

gst-ai --appmode=IC --input=test_file.mp4 --output=screen --paramfile=/usr/share/gst-ai/ic.json

使用SyNAP进行机器学习

Astra 开发套件使用SyNAP框架,通过平台硬件加速器来执行神经网络。 该框架允许用户运行程序,利用神经处理单元(NPU)和图形处理单元(GPU)来加速神经网络的执行。 (更多详情,请参阅 SyNAP 下载 。)

连接

Astra系列 AI开发套件通过板载芯片解决方案和外部硬件来支持蓝牙和Wi-Fi。 下表列出了各种板载芯片和外部解决方案:

SL处理器

无线设备

物理接口 (M.2 PCIe/M.2 SDIO)

软件信息

SL1620

SYNA 43456

M.2 SDIO

  • wpa_supplicant v3.0企业版(不包括192位模式)

  • WiFi驱动程序版本:

SL1620

SYNA 43711

M.2 SDIO

  • wpa_supplicant v3.0企业版(不包括192位模式)

  • WiFi驱动程序版本:

SL1640

SYNA 43752

M.2 PCIe

  • wpa_supplicant v2.10

  • WiFi驱动版本:v101.10.478

SL1640

SYNA 43756E

M.2 PCIe

SL1680

SYNA 43752

M.2 PCIe

SL1680

SYNA 43756E

M.2 PCIe

Astra Linux BSP包含使用具备PCIe和SDIO接口的43xxx模块所需的所有驱动程序和固件。无线网络管理由 WPA Supplicant 守护进程处理,该守护进程与WPA验证器进行密钥协商。 它支持WEP、WPA、WPA2和WPA3身份验证标准。(更多细节,请参阅 wpa_supplicant )。

使用WPA Suppliant设置WiFi

以下章节介绍在Astra 开发套件上如何使用WPA Supplicant设置WiFi。

生成WPA预共享密钥

从密码短语生成预共享密钥,可避免将密码短语存储在WPA Supplicant配置文件中。

在shell中,使用 wpa_passphrase 命令行工具,从密码短语中生成WPA预共享密钥:

root@sl1680:^# wpa_passphrase network_name 12345678
network={
    ssid="network_name"
    psk=5ba83b0673ea069dafe5d5f1af8216771c13be6ad6f11dac9dc0e90b0c604981
}

创建WPA Supplicant配置文件

WPA Supplicant使用配置文件来配置WiFi连接。这个配置文件位于 /etc/wpa_supplicant 中。

创建 /etc/wpa_supplicant 目录:

mkdir -p /etc/wpa_supplicant

创建文件 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf ,其中包含WiFi网络的选项。

wpa_supplicant-wlan0.conf 示例的内容:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

network={
    ssid="network_name"
    psk=5ba83b0673ea069dafe5d5f1af8216771c13be6ad6f11dac9dc0e90b0c604981
    key_mgmt=WPA-PSK
    scan_ssid=1
}

配置systemd-networkd

wlan接口需要在 systemd-networkd 系统守护进程配置中启用。

创建新文件 /etc/systemd/network/25-wlan.network ,包含以下内容:

[Match]
Name=wlan0

[Network]
DHCP=ipv4

启用wpa_supplicant进程

后台启动 wpa_supplicant 进程,配置无线网络接口wlan0并加载配置文件:

wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

开启WLAN接口

使用 ifconfig 指示内核开启wlan接口:

ifconfig wlan0 up

启用WiFi服务

新配置的加载需要重启网络守护进程。

重新启动网络守护程序:

systemctl restart systemd-networkd.service
systemctl restart wpa_supplicant@wlan0.service

在启动时启用wpa_supplicant:

systemctl enable wpa_supplicant@wlan0.service

执行吞吐量测试

以下部分介绍如何在TCP和UDP模式下使用 iPerf 命令运行吞吐量测试。

TCP流量

客户端:

$ iperf -c <IP address of iperf server> -i 1 -w 12M -t 60 -l 1470

服务器端:

$ iperf -s -i 1 -w 12M -l 1470

UDP流量

客户端:

$ iperf -c <IP address of iperf server> -i 1 -w 12M -u -b 1000M -t 60 -l 1470

服务器端:

$ iperf -s -i 1 -w 12M -l 1470

使用蓝牙A2DP源角色

搜索并连接到耳机

首先,您需要使用以下命令进入蓝牙控制台:

root@sl1640:~# bluetoothctl
[bluetooth]#

一旦进入蓝牙控制台,您就可以运行各种命令来控制蓝牙协议栈, 如以下段落所述。

您可以使用 show 命令显示主板上蓝牙控制器的信息:

[bluetooth]# show
Controller C0:F5:35:AA:7D:8F (public)
        Name: sl1640
        Alias: sl1640
        Class: 0x00000000
        Powered: no
        Discoverable: no
        DiscoverableTimeout: 0x000000b4
        Pairable: yes
        UUID: Audio Source              (0000110a-0000-1000-8000-00805f9b34fb)
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: Device Information        (0000180a-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v1D6Bp0246d0541
        Discovering: no
        Roles: central
        Roles: peripheral
Advertising Features:
        ActiveInstances: 0x00 (0)
        SupportedInstances: 0x06 (6)
        SupportedIncludes: tx-power
        SupportedIncludes: appearance
        SupportedIncludes: local-name
        SupportedSecondaryChannels: 1M
        SupportedSecondaryChannels: 2M
        SupportedSecondaryChannels: Coded

为了连接到耳机,首先您需要打开蓝牙控制器:

[bluetooth]# power on
[CHG] Controller C0:F5:35:AA:7D:8F Class: 0x00080000
Changing power on succeeded
[CHG] Controller C0:F5:35:AA:7D:8F Powered: yes

然后,您需要将控制器设置为可配对模式:

[bluetooth]# pairable on
Changing pairable on succeeded

然后,您可以搜索耳机(请确保耳机处于可发现模式):

[bluetooth]# scan on
Discovery started
[CHG] Controller C0:F5:35:AA:7D:8F Discovering: yes
[NEW] Device 2D:9A:A9:4F:54:37 2D-9A-A9-4F-54-37
[NEW] Device 4E:E7:B0:20:2A:11 4E-E7-B0-20-2A-11
[NEW] Device 7F:84:A3:29:E9:E9 7F-84-A3-29-E9-E9
[NEW] Device 6A:B0:95:7E:58:79 6A-B0-95-7E-58-79
[NEW] Device 7E:4D:8F:C4:3B:6F 7E-4D-8F-C4-3B-6F
[NEW] Device 40:93:CE:4D:F1:8E 40-93-CE-4D-F1-8E
[NEW] Device 47:14:71:A3:79:A9 47-14-71-A3-79-A9
[NEW] Device 67:62:9C:4B:F9:7D 67-62-9C-4B-F9-7D
[NEW] Device 8C:F8:C5:BD:6F:1D DTKBTQ3
[NEW] Device 0A:73:76:09:55:C0 BT208

此命令将返回当前连接的所有设备的MAC地址。您需从中找出您要配对的那副耳机。

找到该耳机后,您可以使用带有该耳机MAC地址的 pair 命令进行耳机配对:

[bluetooth]# pair 0A:73:76:09:55:C0
Attempting to pair with 0A:73:76:09:55:C0
[CHG] Device 0A:73:76:09:55:C0 Connected: yes
[CHG] Device 0A:73:76:09:55:C0 Bonded: yes
[CHG] Device 0A:73:76:09:55:C0 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Device 0A:73:76:09:55:C0 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 0A:73:76:09:55:C0 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 0A:73:76:09:55:C0 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 0A:73:76:09:55:C0 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Device 0A:73:76:09:55:C0 ServicesResolved: yes
[CHG] Device 0A:73:76:09:55:C0 Paired: yes
Pairing successful
[CHG] Device 0A:73:76:09:55:C0 ServicesResolved: no
[CHG] Device 0A:73:76:09:55:C0 Connected: no

下一步,将设备标记为可信:

[bluetooth]# trust 0A:73:76:09:55:C0
[CHG] Device 0A:73:76:09:55:C0 Trusted: yes
Changing 0A:73:76:09:55:C0 trust succeeded

最后一步,设置与耳机的连接:

[bluetooth]# connect 0A:73:76:09:55:C0
Attempting to connect to 0A:73:76:09:55:C0
[CHG] Device 0A:73:76:09:55:C0 Connected: yes
[NEW] Endpoint /org/bluez/hci0/dev_0A_73_76_09_55_C0/sep1
[NEW] Transport /org/bluez/hci0/dev_0A_73_76_09_55_C0/sep1/fd0
Connection successful
[BT208]# [  286.922414] input: BT208 (AVRCP) as /devices/virtual/input/input1
[CHG] Transport /org/bluez/hci0/dev_0A_73_76_09_55_C0/sep1/fd0 Volume: 0x0060 (96)
[DEL] Device D4:D2:D6:4F:80:60 445HD_BT_60
[CHG] Device 0A:73:76:09:55:C0 ServicesResolved: ye
[BT208]#

如果连接成功,控制台提示符将显示我们连接到的设备的名称。

现在,我们可以获取该设备的信息:

[BT208]# info
Device 0A:73:76:09:55:C0 (public)
        Name: BT208
        Alias: BT208
        Class: 0x00240404
        Icon: audio-headset
        Paired: yes
        Bonded: yes
        Trusted: yes
        Blocked: no
        Connected: yes
        LegacyPairing: no
        UUID: Headset                   (00001108-0000-1000-8000-00805f9b34fb)
        UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: Handsfree                 (0000111e-0000-1000-8000-00805f9b34fb)
        RSSI: -69
        TxPower: 4

通过耳机播放音乐

为了测试播放, 您需要上传一个声音文件( .wav 格式)到板上,比如通过 scp

可以使用 aplay 命令将文件播放到A2DP接收器。 其参数有 耳机的MAC地址(以下示例中为 0A:73:76:09:55:C0 ) 和wave文件的名称(以下示例中为 /home/root/example.wav ):

root@sl1640:~# aplay --verbose -D  bluealsa:DEV=0A:73:76:09:55:C0 -t wav /home/root/example.wav
Playing WAVE '/home/root/example.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
Plug PCM: BlueALSA PCM: /org/bluealsa/hci0/dev_0A_73_76_09_55_C0/a2dpsrc/sink
BlueALSA BlueZ device: /org/bluez/hci0/dev_0A_73_76_09_55_C0
BlueALSA Bluetooth codec: SBC
Its setup is:
stream       : PLAYBACK
access       : RW_INTERLEAVED
format       : S16_LE
subformat    : STD
channels     : 2
rate         : 48000
exact rate   : 48000 (48000/1)
msbits       : 16
buffer_size  : 24000
period_size  : 6000
period_time  : 125000
tstamp_mode  : NONE
tstamp_type  : GETTIMEOFDAY
period_step  : 1
avail_min    : 6000
period_event : 0
start_threshold  : 24000
stop_threshold   : 24000
silence_threshold: 0
silence_size : 0
boundary     : 6755399441055744000

Linux启动过程

在Linux内核开始在Astra 开发套件上执行之前, 底层固件和软件会对硬件初始化并准备启动系统。 本节概述了为系统启动Linux内核所准备的软件组件。

软件概述

Astra系列 AI开发套件 使用多级启动过程。这部分简要描述了每个组件。

预引导固件

预引导固件是一个底层固件集, 用于初始化特定硬件组件并加载在Arm TrustZone环境中运行的软件。 预引导固件完成后,将跳转到bootloader中去执行。预引导固件是以 可写入启动设备的二进制映像的方式 提供。

Bootloader

Astra 开发套件使用Astra U—Boot(SUBoot)bootloader来执行剩余硬件的初始化,并启动Linux内核。 SUBoot是基于开源项目U—Boot的。( U—Boot文档

Linux内核和设备树

Astra 开发套件主要运行使用Linux的操作系统内核。 Linux内核提供应用程序运行的环境,管理CPU、内存和设备等资源。 一般来说,Linux内核将作为《Astra Yocto用户指南》中描述的Yocto构建过程的一部分进行构建。

Linux内核使用设备树数据结构来描述系统的硬件组件及配置。 设备树源文件位于Linux内核源代码树中,其路径为 arch/arm64/boot/dts/synaptics/ 。这些文件放在 Astra Linux Kernel Overlay repository 中。

根文件系统

根文件系统(rootfs)涵盖了Linux操作系统中执行程序所需的所有用户空间二进制文件和库以及系统配置文件。 预构建映像使用Yocto来构建rootfs。 有关如何使用Yocto构建和配置rootfs的说明,请参阅 Astra Yocto Linux开发人员指南

U—Boot

如上所述,Astra 开发套件使用U-Boot作为其bootloader。 Astra 开发套件使用三种类型的U-Boot。 除了SUBoot,还有 SPI U-Boot 和 USB U-Boot 变体,用于闪存或恢复设备。

映像类型

映像用法

SPI U—Boot

通过TFTP服务器或USB主机烧录eMMC映像

USB U-Boot

通过USB磁盘的TFTP服务器烧录eMMC映像

SUBoot

通过TFTP服务器或USB磁盘烧录eMMC映像,启动Linux

USB U-Boot和SPI U-Boot用于启动eMMC未烧录映像的设备,或者需要对emmc进行覆盖更新的设备。

USB U-Boot允许板卡通过USB接口接收U-Boot的USB版本。 主机系统运行usb_boot工具来将USB U-Boot映像加载到板上并执行。 一旦USB U-Boot在板上运行,可用它将映像文件写入eMMC。

SPI U—Boot类似于USB U—Boot,不同之处在于该U—Boot是运行在SPI闪存上。 SPI闪存可以在Astra 开发套件的主板上,也可以在设备中所插的SPI子卡上。 一旦SPI U—Boot在板上运行,就可用它将映像文件写入eMMC。

从SPI和SD卡启动

Astra 开发套件的I/O板有一个标记为 SD-Boot 的跳线。 这个jumper控制设备是从eMMC启动还是从内部SPI闪存启动。 如果连上跳线帽,设备将从内部SPI闪存启动。拔掉跳线帽,则从eMMC启动。

sd-boot-jumper.png

Astra 开发套件组件图,突出显示SD-Boot跳线

Astra 开发套件的内部SPI闪存已预先烧录好SPI U-Boot。 当SD-Boot跳线被连上,设备将从SPI闪存或从SD卡(如果已插入SD卡插槽)启动。

更新固件

上电后,Astra 开发套件将从启动设备中读取固件、bootloader和Linux内核。 最常见的启动设备是板载eMMC设备。 本节将讨论如何将启动映像文件写入eMMC。

Astra系统映像

astra_image.png

Astra映像的屏幕截图

“Astra系统映像”是一个包含多个subimg文件以及emmc_part_list、emmc_image_list和emmc_image_list_full的目录。 emmc_part_list描述了将被用于eMMC的GUID分区表(GPT)。 emmc_image_list*文件则指定哪些子映像文件应被写到emmc上的哪个分区。

SL1640分区表 示例:

分区名称

内容

是否可删除

被谁访问

factory_setting

用户空间使用的MAC地址和其他出厂设置文件

不可

Linux用户空间

key_a

AVB密钥、用户密钥(A 副本)

是的

初期启动(boot分区)

tzk_a

TrustZone 内核(A 副本)

是的

初期启动(boot分区)

key_b

AVB秘钥,用户秘钥(B 副本)

是的

初期启动(boot分区)

tzk_b

TrustZone 内核(B 副本)

是的

初期启动(boot分区)

bl_a

OEM启动加载程序(A 副本)

是的

初期启动(boot分区)

bl_b

OEM启动加载程序(B 副本)

是的

初期启动(boot分区)

boot_a

Linux内核,由OEM bootloader加载(A 副本)

不可

OEM启动加载程序(bl_a)

boot_b

Linux内核,由OEM bootloader加载(B 副本)

不可

OEM启动加载程序(bl_b)

firmware_a

GPU/DSP/SM固件,由初期启动来加载,必须的(A 副本)

是的

初期启动(boot分区)

firmware_b

GPU/DSP/SM固件,由初期启动来加载,必须的(B 副本)

是的

初期启动(boot分区)

rootfs_a

根文件系统,供Linux使用,可更改(A 副本)

不可

Linux(boot_a)

rootfs_b

根文件系统,供Linux使用,可更改(B 副本)

不可

Linux(boot_b)

fastlogo_a

fast logo 映像,由OEM bootloader加载,可更改(A 副本)

不可

OEM bootloader(bl_a)

fastlogo_b

fast logo 映像,由OEM bootloader加载,可更改(B 副本)

不可

OEM bootloader(bl_b)

devinfo

设备信息(如序列号、MAC地址),必须的

是的

初期启动(boot分区)

Misc

启动控制设置,必须的

是的

初期启动(boot分区)

home

挂载在/home下,可定制

不可

Linux用户空间

使用USB更新固件

Astra 开发套件支持使用USB更新固件。

设置USB启动环境

从USB启动需要在主机系统上安装USB_boot软件工具。 支持Windows、Mac和Linux主机。 Windows系统还需要Astra WinUSB驱动。 Mac和Linux系统则不需要任何额外的驱动程序。 USB启动还需要按照前面的 设置串行控制台 章节中的说明来设置串行控制台。 本节介绍如何配置主机系统和准备USB启动。

硬件设置

要运行usb_boot,您需要将USB-TTL板和电缆连接到Astra系列 AI开发套件,如前面 设置串行控制台 章节中所述。 这将让您可以在烧录过程看到控制台消息,并向bootloader输入指令。 您还需要用USB线将主机系统连接到Astra系列 AI开发套件上的USB Type-C USB 2.0端口(靠近以太网端口)。

usb-c.png

Astra系列 AI开发套件 组件图,突出显示USB Type—C USB 2.0端口

安装WinUSB驱动程序(仅限Windows)

Windows需要一个特定的USB内核驱动程序来通过USB与Astra 系列AI开发套件通信。请从以下地址下载驱动程序 GitHub 。Linux和Mac主机可以从用户空间访问Astra板,不需要任何额外的内核驱动程序。

下载并解压缩USB Boot软件包后, 右键单击 Synaptics_WinUSB_Driver 目录中的 SYNA_WinUSB.inf 文件。 从下拉菜单中选择“安装”。

install_driver_win.png

安装驱动程序

安装驱动程序后,在USB Boot模式下运行时, Astra 开发套件将在Windows设备管理器中显示为 “Synaptics IoT: Tools package USB Driver for Synaptics Processors”。

devices_win.png

安装驱动程序后操作系统列出的设备

运行USB Boot工具

Astra usb工具包中还包括usb_boot用户空间工具。 这是通过USB与Astra 开发套件通信的工具。 每个Astra 开发套件变种都有自己的usb_boot目录。 每个目录中都包含一个 usb_boot 二进制文件和用来运行它的 run 脚本。 该目录还将包含一个映像目录,该目录包含通过usb启动板卡所需的所有映像文件。 这些映像文件中包括USB U-Boot bootloader。

在Windows上,双击run.bat文件以启动该工具。 该脚本将以所用Astra 开发套件变种需要的特定选项来执行二进制文件。

usb_user_tool_win.png

Windows上包含USBBoot工具的目录

运行 run.bat 后, 将打开一个窗口,显示flash进程的状态。

usbtool_output_win.png

Windows上usb_boot工具的输出

在Mac上,右键单击包含usb_boot版本的目录,该版本须与您即将启动的Astra 开发套件变种相匹配。 从下拉菜单中选择 Services -> New Terminal at Folder

mac-open-terminal.jpg

在Mac上打开终端,用于USB启动

这将打开所选usb_boot目录中的一个终端。 从那里运行 run.sh 脚本来运行该工具。 由于脚本内部会调用sudo,因此可能会提示您输入密码。 工具需要额外的权限才能连接USB设备并访问系统资源。

mac-run-usbboot.png

Mac上usb_boot工具的输出

在Linux上,右键单击包含usb_boot版本的目录,该版本须与您将要启动的Astra 开发套件变体相匹配。 从下拉菜单中选择 Open in Terminal

linux-open-terminal.png

在Linux上打开终端,用于USB启动

这将打开所选usb_boot目录内的一个终端。 从那里运行 run.sh 脚本来运行该工具。 由于脚本内部调用sudo,因此可能会提示您输入密码。 该工具需要额外的权限才能连接USB设备并访问系统资源。

linux-run-usbboot.png

Linux上usb_boot工具的输出

使用USB Boot启动

一旦设置了usb_boot环境并且在主机系统上运行了usb_boot工具,Astra系列 AI开发套件需要被设置成 USB Boot 模式。 要执行此操作,请按住I/O板上的 “USB_BOOT” 按钮。 然后按下并松开 “RESET” 按钮。 确保按住 “USB_BOOT” 按钮足够长的时间,以便板卡可以复位并检测 “USB_BOOT” 按钮被按下。 启动进入 USB Boot 模式后,串行控制台中将显示 U-Boot 提示符 “=>”。

usb-boot-and-reset.png

Astra系列 AI开发套件组件图,突出显示USB_BOOT和RESET按钮

usb_boot_output_win.png

成功启动后,usb_boot工具和串行控制台的输出

putty-usb-boot.png

备注

使用USB Boot启动后的串行控制台只有设备进入USB Boot模式,Astra系列 AI开发套件才显示在窗口的设备管理器中,才能被工具看到。如上所述,按住USB_BOOT并按下RESET按钮。

使用USB Boot将固件烧录到eMMC
emmc_flash_snapshot.png

包含用来烧录eMMC映像的文件的目录

从USB启动时,usb_boot工具允许直接通过USB接口传输eMMC映像文件。 要通过USB烧录eMMC映像,请将映像文件复制到Astra 开发套件变种的usb_boot工具目录下的 images 文件夹中。

使用以下命令将映像文件写入eMMC:

=> l2emmc eMMCimg

参数 eMMCimg 是 usb_boot 工具下映像文件目录的名称。

复位

如果在主板上电时,eMMC中已写入有效的映像,Astra 开发套件将启动进入linux。 将映像文件写入eMMC后,请在U-boot中发出复位命令。 按下主板上的“RESET”按钮,或重启主板电源,来启动进入Linux。

U-Boot复位命令:

=> reset

备注

确保从eMMC启动时未连接 SD-Boot 跳线。 否则,设备将从内部SPI闪存或SD卡启动。请参阅 从SPI和SD卡启动

从SPI更新固件

从SPI和SD卡启动 中所述,Astra 开发套件有一个内部SPI闪存芯片,其中包含SPI U-Boot Bootloader。 这允许在不使用USB主机系统的情况下更新固件。 映像文件可以从外接的USB驱动器加载或从本地网络上的TFTP服务器下载。

设置SPI启动环境

从内部SPI闪存启动不需要在主机上安装任何附加软件, 除了前面 设置串行控制台 章节所述的使用串行控制台的软件以外。

硬件设置

对于SPI启动,您需要连接串行端口的USB线,如前面 设置串行控制台 章节所述。 这将允许您在烧录过程中看到控制台消息,并将命令输入给SPI U-Boot bootloader。 您还需要一个USB驱动器或以太网线,具体取决于eMMC映像文件的所在位置。 USB驱动器可以插入4个USB Type-A USB 3.0端口中的任一个, 或USB Type-C USB 2.0端口(可能需要USB Type-C转USB Type-A的适配器)。

usb-and-ethernet-ports.png

Astra系列 AI开发套件组件图,突出显示USB口和以太网口

从USB驱动器烧录映像

要从外接USB驱动器烧录Astra系统映像,只需将映像目录复制到USB驱动器即可。 USB驱动器需要有一个 FAT32 格式的文件系统分区,且需要有足够的容量来容纳 Astra 系统映像。

使用以下命令将映像写入eMMC:

=> usb2emmc eMMCimg

参数 eMMCimg 是USB驱动器上映像文件目录的名称。

从TFTP服务器烧录映像

要从TFTP服务器烧录Astra系统映像,您首先需要通过以太网口将Astra 开发套件连接到本地网络。 将Astra映像复制到TFTP服务器上,这样它可以通过网络被设备访问。 设备连接到网络后,启动到U-boot提示符。

初始化网络,并从本地网络上的DHCP服务器获取IP地址:

=> net_init; dhcp; setenv serverip 10.10.10.10;

使用以下命令,将映像文件从TFTP服务器写入eMMC:

=> tftp2emmc eMMCimg

参数 eMMCimg 是TFTP服务器上映像文件目录的名称。

备注

在上面的示例中,TFTP服务器的地址是 10.10.10.10 。 请将此IP替换为承载TFTP的服务器IP地址。

更新内部SPI闪存固件

Astra系列 AI开发套件内部SPI闪存也可以使用上述方法进行更新。

从USB Boot烧录内部SPI闪存固件

要使用usb_boot更新内部SPI闪存固件,必须首先按照 设置USB启动环境 章节中的步骤进行操作。

spi_flash_snapshot.png

包含用来刷新SPI闪存的文件的目录

在Astra 开发套件通过USB启动U-Boot后, 将SPI映像文件复制到 usb_boot 工具目录下的 images 目录中,对SPI闪存进行烧写。

然后使用以下命令,将映像写入SPI闪存:

=> usbload spi_uboot_en.bin 0x10000000
=> spinit; erase f0000000 f02fffff; cp.b 0x10000000 0xf0000000 0x300000;

从外部USB驱动器烧录内部SPI闪存固件

要使用外接USB驱动器更新内部SPI闪存固件,只需将映像复制到该驱动器即可。 有关如何设置USB驱动器的详细信息,请参阅 从USB驱动器烧录映像

使用以下命令,将映像写入SPI闪存:

=> usb start; fatload usb 0 0x10000000 spi_uboot_en.bin;
=> spinit; erase f0000000 f02fffff; cp.b 0x10000000 0xf0000000 0x300000;

从TFTP服务器烧录内部SPI闪存固件

要通过从TFTP服务器下载来更新内部SPI闪存固件,只需将映像复制到TFTP服务器。

使用以下命令,将SPI映像从TFTP服务器写入SPI闪存:

=> net_init; dhcp; setenv serverip 10.10.10.10;
=> tftpboot 0x10000000 spi_uboot_en.bin;
-> spinit; erase f0000000 f02fffff; cp.b 0x10000000 0xf0000000 0x300000;

备注

在上面的示例中,TFTP服务器的地址是 10.10.10.10 。请将此IP替换为承载TFTP服务器的IP地址。