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键盘和鼠标可以输入。
点击左上角的图标将打开一个终端。
备注
当前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端口相连(靠近以太网口)。
Google为Mac、Linux和Windows提供了不同版本的ADB。
安装ADB后,请运行 adb devices
以查看连接到主机的所有ADB设备。
然后运行:
adb shell
或者,如果有多个ADB设备:
adb -s SL16x0 shell
串行控制台
Astra系列 AI开发套件提供了一个串行控制台, 用于在运行在主机系统上的终端仿真器上显示来自Bootloader和操作系统的消息。 在启动过程的早期或显示器未连接时,这些消息有助于确定Astra 开发套件的状态。 它还可以在操作中提供有用的信息。在固件更新过程中,串行控制台也是需要的。
设置串行控制台
Astra系列 AI开发套件(Foundation)SL16xx开发套件配有USB-TTL板和飞线式电缆。 使用电缆将USB-TTL板连接到Astra 开发套件的40针GPIO接头。
USB TTL
Astra 开发套件
GND
6
RXD
8
TXD
10
Windows和Mac主机与USB-TTL板上的USB转UART芯片的连接需要额外的驱动程序。请从 Silicon Labs CP210x USB to UART Bridge VCP Drivers 页面下载适用于您的主机的驱动程序。Linux主机通常支持默认启用该芯片。
一旦安装了驱动程序, 串行控制台便可被Putty、HyperTerminal、Tera Term、Screen或Minicom这类的终端仿真程序访问。
Linux操作系统登录
Linux成功启动后,串行控制台中将显示登录提示。请使用 root
用户名登录。无需密码。
多媒体
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-sink
和 audio-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 |
|
SL1620 |
SYNA 43711 |
M.2 SDIO |
|
SL1640 |
SYNA 43752 |
M.2 PCIe |
|
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启动。
Astra 开发套件的内部SPI闪存已预先烧录好SPI U-Boot。 当SD-Boot跳线被连上,设备将从SPI闪存或从SD卡(如果已插入SD卡插槽)启动。
更新固件
上电后,Astra 开发套件将从启动设备中读取固件、bootloader和Linux内核。 最常见的启动设备是板载eMMC设备。 本节将讨论如何将启动映像文件写入eMMC。
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端口(靠近以太网端口)。
安装WinUSB驱动程序(仅限Windows)
Windows需要一个特定的USB内核驱动程序来通过USB与Astra 系列AI开发套件通信。请从以下地址下载驱动程序 GitHub 。Linux和Mac主机可以从用户空间访问Astra板,不需要任何额外的内核驱动程序。
下载并解压缩USB Boot软件包后,
右键单击 Synaptics_WinUSB_Driver
目录中的 SYNA_WinUSB.inf
文件。
从下拉菜单中选择“安装”。
安装驱动程序后,在USB Boot模式下运行时, Astra 开发套件将在Windows设备管理器中显示为 “Synaptics IoT: Tools package USB Driver for Synaptics Processors”。
运行USB Boot工具
Astra usb工具包中还包括usb_boot用户空间工具。
这是通过USB与Astra 开发套件通信的工具。
每个Astra 开发套件变种都有自己的usb_boot目录。
每个目录中都包含一个 usb_boot
二进制文件和用来运行它的 run
脚本。
该目录还将包含一个映像目录,该目录包含通过usb启动板卡所需的所有映像文件。
这些映像文件中包括USB U-Boot bootloader。
在Windows上,双击run.bat文件以启动该工具。 该脚本将以所用Astra 开发套件变种需要的特定选项来执行二进制文件。
运行 run.bat
后, 将打开一个窗口,显示flash进程的状态。
在Mac上,右键单击包含usb_boot版本的目录,该版本须与您即将启动的Astra 开发套件变种相匹配。
从下拉菜单中选择 Services -> New Terminal at Folder
。
这将打开所选usb_boot目录中的一个终端。
从那里运行 run.sh
脚本来运行该工具。
由于脚本内部会调用sudo,因此可能会提示您输入密码。
工具需要额外的权限才能连接USB设备并访问系统资源。
在Linux上,右键单击包含usb_boot版本的目录,该版本须与您将要启动的Astra 开发套件变体相匹配。
从下拉菜单中选择 Open in Terminal
。
这将打开所选usb_boot目录内的一个终端。
从那里运行 run.sh
脚本来运行该工具。
由于脚本内部调用sudo,因此可能会提示您输入密码。
该工具需要额外的权限才能连接USB设备并访问系统资源。
使用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启动后的串行控制台只有设备进入USB Boot模式,Astra系列 AI开发套件才显示在窗口的设备管理器中,才能被工具看到。如上所述,按住USB_BOOT并按下RESET按钮。
使用USB Boot将固件烧录到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驱动器烧录映像
要从外接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启动环境 章节中的步骤进行操作。
在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地址。