Как устроена архитектура ПО базовой станции Huawei. 2g.. 2g. 3g.. 2g. 3g. linux.. 2g. 3g. linux. lte.. 2g. 3g. linux. lte. rtos.. 2g. 3g. linux. lte. rtos. Сетевые технологии.. 2g. 3g. linux. lte. rtos. Сетевые технологии. Системы связи.. 2g. 3g. linux. lte. rtos. Сетевые технологии. Системы связи. Сотовая связь.. 2g. 3g. linux. lte. rtos. Сетевые технологии. Системы связи. Сотовая связь. Стандарты связи.
Как устроена архитектура ПО базовой станции Huawei - 1

Представьте, что в одной коробке высотой 2U нужно одновременно запустить четыре поколения мобильной связи — 2G, 3G, 4G и 5G, — да так, чтобы они делили между собой процессор, транспорт, радио и антенну, и не роняли друг друга при огромной нагрузке, поддерживали зоопарк из разных плат и плюсом поколений этих плат. Примерно это и есть базовая станция Huawei серии 3900/5900.

Снаружи это модульный «конструктор» из шасси и плат. Внутри — многоуровневая программная платформа на ARM-процессоре, которая абстрагирует железо и раздаёт его «сервисам» разных стандартов связи.

Проблематика, с которой сталкиваются и решают разработчики:

  1. Операционная система может изменятся (VxWorks → Linux).

  2. Версия и API ядра Linux изменяются.

  3. Архитектура процессора может изменятся (ARM → RISC‑V).

  4. Большая вариативность типов baseband плат.

  5. Большая вариативность типов сервисных плат.

  6. Большая вариативность типов радиоблоков и их архитектуры (TDD/FDD/количество RX/TX).

  7. Разные поколения плат построены на разных процессорах, FPGA, ASICах, DSP и несут разную периферию.

  8. Рост числа стандартов связи 2G → 3G → 4G → 5G и все на одной коробке.

  9. Рост числа фич.

  10. Смена поколения шасси BBU3900 → BBU5900.

Ниже — обзор архитектуры: как платформа отделена от приложений, на какой ОС всё работает, как собирается кластер из плат, как устроено управление, логирование и обновление ПО. И как решают выше названные проблемы на уровне архитектуры.  

Небольшой дисклеймер

Статья написана в образовательных целях, она обобщает мой опыт, который был получен в процессе изучения железа и софта базовой станции снаружи и внутри. Будет интересно embedded программистам, архитекторам ПО, инженерам разрабатывающим базовые станции. При написании опирался на две группы источников:

  1. Открытую техническую документацию Huawei на серию 3900 & 5900 (Technical Description, Configuration Principles, Component Description).

  2. Реверс‑инжиниринг образов прошивок плат.

Так что могут в статье могут иметься некоторые неточности, но дизассемблер редко ошибается,а художник так видит.

 

 

Немного о железо: BBU, платы и радио

Чтобы говорить про ПО, сначала посмотрим на железо — архитектура софта ложится прямо на него.

Базовая станция физически состоит из трёх вещей:

BBU (Baseband Unit) это шасси – «мозг» цифровой обработки. В серии это BBU3900, BBU3910 и новый BBU5900. Внутри шасси — слоты, в которые вставляются платы.

RF-модули — радиочасть, бывают двух видов: RRU (выносной радиоблок) или AAU (активная антенная система для 5G Massive MIMO).

Шкафы, питание, обвязка — нам сейчас не очень интересное.

Внутри BBU живут платы нескольких типов, и именно их разделение задаёт архитектуру ПО, для примера возьмем самую простую конфигурацию:

Класс платы

Пример

За что отвечает

Главная управляющая плата

UMPT (Universal Main Processing & Transmission)

Управление, O&M, транспорт, синхронизация

Плата обработки основной полосы

UBBP (Universal BaseBand Processing)

Физический уровень: модуляция/демодуляция, кодирование

Вентиляторы / питание

FAN, UPEU

Охлаждение и электропитание

 

Ключевая деталь: главная плата UMPT совмещает управление и транспорт (буква T — Transmission), а тяжёлая математика радиоканала вынесена на отдельные платы UBBP. Между BBU и радиочастью всё общается по оптике CPRI — поддержаны топологии «звезда», «цепочка», «кольцо» и «двойная звезда».

Фото 1. Плата UMPTb

Фото 1. Плата UMPTb
Фото 2. Плата UMPTb

Фото 2. Плата UMPTb
Фото 3. Плата UBBPg1a

Фото 3. Плата UBBPg1a

Откуда взялась UMPT: LMPT, WMPT, GTMU → UMPT

Буква U в «UMPT» — это Universal, и появилась она не просто так. В первом поколении BBU3900 главная плата была «помодовой»: под каждый стандарт своя — GTMU для GSM, WMPT для UMTS, LMPT для LTE. Каждая несла control-plane, O&M и транспорт только своего стандарта. Хочешь на площадке 2G+3G+4G — ставь три разные главные платы, каждую со своим ПО и каналом управления.

Потом Huawei сделала UMPT — Universal MPT: одну плату, которая умеет хостить GSM, UMTS, LTE и NR, динамически деля между ними ресурсы контроллера. Именно UMPT сделала возможным co-MPT (несколько стандартов на одной плате) и всю виртуализацию ресурсов, о которой пойдёт речь дальше. Семейство росло: UMPTa → UMPTb → UMPTe → UMPTg. Почему росло? —  увеличивали производительность.   

Переезд с «помодовых плат» — это не только про железо, но и про ОС. Платы первого поколения работали на более старых процессорах под VxWorks; UMPT переехала на многоядерный HiSilicon, а на новых чипах — под Linux. Поэтому код, написанный ещё в эпоху «помодовых» плат под VxWorks, продолжает работать на UMPT под Linux — через слой совместимости. В современной версии ПО «помодовых» плат уже почти не осталось: в каталоге плат — GTMU и семейство UMPT.

Схема 1. Эволюция главной платы: помодовые GTMU/WMPT/LMPT сменила универсальная UMPT

Схема 1. Эволюция главной платы: помодовые GTMU/WMPT/LMPT сменила универсальная UMPT

Физика и логика: BTS Node и «сервисы»

Самая важная абстракция во всей платформе — разделение на физический и логический уровни.

Физический уровень — это «железная» базовая станция, BTS Node: инфраструктура и прикладная платформа.

Логический уровень — это сервисы (Services), которые на этой платформе разворачиваются: GBTS Service (GSM), NodeB Service (UMTS), eNodeB Service (LTE) и gNodeB Service (5G NR).

Иными словами, «базовая станция GSM» и «базовая станция 5G» — это не разные коробки, а разные программные сервисы на одной и той же платформе. Станция становится тем, что на неё установили.

Связываются эти два мира через два чётко описанных интерфейса (и это уже чистая архитектура ПО, а не маркетинг):

Интерфейс «платформа — сервис» — через него платформа управляет жизненным циклом сервиса: развёртывание, апгрейд версии, старт/рестарт, мониторинг состояния. По сути API «оркестратора» над прикладными RAT‑стеками.

Интерфейс «узел — RAT» — через него сервис запрашивает у платформы общие ресурсы: транспортные линки, TX/RX‑каналы радио, процессорное время, несущие ресурсы.

Именно поэтому платформа «скрывает различия ПО и железа от сервисов за счёт абстрагированных ресурсов». Это буквально слой виртуализации ресурсов внутри базовой станции.

Схема 2. Платформа BTS Node и логические сервисы, связанные двумя интерфейсами

Схема 2. Платформа BTS Node и логические сервисы, связанные двумя интерфейсами

Шесть подсистем, из которых собрана станция

Логически станция разбита на шесть подсистем — каждая это отдельный домен ПО со своими драйверами и интерфейсом наружу:

  1. CTL (Control) — Управляющая подсистема. Управляет ресурсами станции, даёт management-интерфейс в сторону центра эксплуатации, control-интерфейс в сторону сети и интерфейс согласования общих устройств в многомодовой станции.

  2. Транспортная подсистема. Перекладывает данные между транспортной сетью и станцией, даёт физические порты и user-plane интерфейс.

  3. Обработка основной полосы. Считает uplink/downlink, физический уровень. Живёт на платах UBBP.

  4. Радиочастотная подсистема. Приём/передача радиосигнала, порты к антенне. Соединяются с baseband по CPRI.

  5. Тактирование. Синхронизирует часы станции с внешними источниками (GNSS, сеть). Для мобильной связи синхронизация критична, особенно в TDD и 5G.

  6. MPE (Power & Environment) — Питание и мониторинг. Питание, температура, мониторинг внешних аварий и датчиков.

Разные стандарты могут делить одну подсистему (например, один клок на всех) или использовать независимые экземпляры — это и есть гибкость, ради которой всё затевалось.

Co-MPT против Separate-MPT: как уживаются 2G/3G/4G/5G

Когда на одной станции нужно запустить несколько стандартов (multi-RAT), есть два способа это сделать.

Separate-MPT: каждому стандарту — свой «компьютер»

В separate-MPT режиме сервис каждого стандарта живёт на отдельном узле со своей управляющей платой и управляется по отдельному каналу O&M. Стандарты всё равно могут делить железо — шкаф, BBU, транспорт, клок, RF-модули, антенну, — но на уровне ПО это независимые платформы. Чтобы они не передрались за общие ресурсы, узлы договариваются между собой через отдельный интерфейс согласования: чем меньше ресурсов общие — тем меньше взаимозависимость.

Co-MPT: всё на одной управляющей плате

В co-MPT режиме сервисы всех стандартов разворачиваются на одном узле и управляются как единое целое: одна плата UMPT, один канал управления, общий пул ресурсов. Исторически это эволюционировало от «GSM и LTE на разных платах» до полного фарша «2G+3G+4G+5G на одной управляющей плате».

За удобство приходится платить связанностью: любая операция над общими ресурсами (смена параметра, сброс, блокировка, апгрейд и откат ПО) затронет все стандарты, которые эти ресурсы делят. Классический trade-off: co-MPT — меньше железа и единое управление, separate-MPT — изоляция отказов. Та же дилемма, что «монолит против микросервисов», только в embedded-мире и с радиоволнами.

Что показывает архитектура прошивки: Linux, Hi1380 и DOPRA

Теперь посмотрим, на чём всё построено. Главная управляющая плата работает на ARM big-endian (BE8) — довольно редкий зверь в наше время; телеком исторически любит big-endian (сетевой порядок байт). И это не bare-metal и не «чистый» VxWorks, а полноценный встраиваемый Linux RT на многоядерном SoC собственной разработки Huawei — HiSilicon Hi1380.

Ключевые элементы стека:

Схема 3. Программный стек главной платы: от SoC и загрузчика до RAT-сервисов

Схема 3. Программный стек главной платы: от SoC и загрузчика до RAT-сервисов

DOPRA — проприетарная сервисная платформа Huawei (Distributed Object‑oriented Programmable Real‑time Architecture). Играет роль «операционной среды» поверх ОС: планирование, обмен сообщениями между модулями, управление состоянием. Вся прикладная логика станции построена как набор акторов, общающихся сообщениями, — архитектурно это ближе к Erlang/акторной модели, чем к привычному многопоточному C++. Хотя написана на C.

ROSA — абстракция реального времени: процессы‑акторы и обмен сообщениями между ними.

VISP — собственный IP‑стек вместо сетевого стека Linux; рядом сосуществует маршрутизирующая платформа Huawei (VRP). В системе уживается несколько реализаций сокетов сразу.

Транспортные драйверы — Ethernet, E1/TDM (легаси для 2G/3G), встроенный L2-коммутатор.

OpenHPI — управление «корзиной» плат (см. раздел про сельф‑менеджмент).

Зачем вообще свой IP-стек. В зависимостях плат виден не сетевой стек ядра Linux, а собственный TCP/IP Huawei — переносимый «Versatile IP Stack», живущий в пользовательском пространстве; один и тот же на главных и на бейсбенд-платах. Зачем не взять готовый ядерный:

  •   Переносимость между ОС. Платформа родилась на VxWorks, затем переехала на Linux. Свой стек даёт один идентичный API к IP на обеих ОС и на всех платах — сеть не переписывают при каждой смене ядра.

  • User-space + kernel bypass. Стек работает в пользовательском пространстве, в быстром тракте транспорта, минуя ядро — zero-copy и обработка на выделенных ядрах (та же идея, что в DPDK/VPP). Ядерный стек на каждый пакет требовал бы перехода user/kernel.

  • Реальное время. Стек в Linux оптимизирован под пропускную способность, а не под ограниченный джиттер; свой стек интегрирован с реал-тайм-фреймворком платформы и даёт предсказуемый тайминг.

  • Сборка под плату. Стек конфигурируемый: бейсбенду — минимум, транспортной плате — полный набор (SCTP для сигнализации, IPsec, мультикаст, VLAN, QoS и д.р).

  • Наследие. Поверх API этого стека написан весь транспортный и прикладной код — сохранив стек, его не переписывают под сокеты Linux.

Короче: один переносимый userspace-стек реального времени, одинаковый на всех ОС и платах, плюс быстрый data-plane — ценой поддержки «ещё одного TCP/IP».

Загрузочный образ платы устроен как матрёшка: внешняя обёртка с контролем целостности по CRC32 → фирменный загрузчик → сжатое ядро Linux ARM → корневая файловая система squashfs → набор device tree под разные ревизии железа. Одна и та же прошивка грузится на несколько аппаратных вариантов, а загрузчик детектит плату и выбирает нужный device tree.

Схема 4. Слои загрузочного образа: внешняя обёртка → контейнер загрузчика → ядро + rootfs + device tree

Схема 4. Слои загрузочного образа: внешняя обёртка → контейнер загрузчика → ядро + rootfs + device tree

Загрузчик по шагам: от CRC32 до init

Загрузчик оказался на удивление лаконичным.

Обёртка с контролем целостности. Первый рубеж: в заголовке лежит CRC32 всего образа; испортишь прошивку — загрузчик это заметит ещё до старта.

Stage-1 — крошечный ARM-стаб. Всего несколько инструкций: прочитать системный регистр CPU, выключить MMU и кэши, перейти на следующую ступень. Задача — привести процессор в предсказуемое состояние и прыгнуть дальше.

Stage-2. Детектит плату, выбирает подходящий device tree (их в образе больше десятка), формирует командную строку ядра, печатает «goto linux» и передаёт управление сжатому ядру. Из device tree видно железо: SoC Hisilicon на базе ARM Cortex-A9, до четырёх ядер, стандартная периферия (контроллер прерываний, таймеры, watchdog и т.д), последовательная консоль.

Самое интересное — в параметрах ядра: один стандарт системы с процессорными ядрами. Linux сознательно прибивается к одному «мастер»-ядру, а остальные ядра отдаются под другое — baseband/реальное время. Это AMP (асимметричная многопроцессорность) в чистом виде: Linux не занимает весь чип, он сосед по кристаллу. Там же — установка «любой сбой ядра = паника = перезагрузка» (телеком не терпит подвисшего состояния) и заранее выделенная область под аварийный лог («чёрный ящик»).

Финал. Ядро поднимает рамдиск (в него разворачивается корневая ФС), и rootfs — это BusyBox: стартовый init и скрипты инициализации. Дальше стартуют DOPRA/ROSA и прикладные сервисы. Вся цепочка:

BootROM чипа → обёртка (CRC32) → stage-1 стаб (MMU/кэш off) → stage-2 (детект платы → device tree → “goto linux”) → ядро Linux на master-ядре (AMP) → рамдиск (squashfs) → BusyBox init → DOPRA/приложение

Схема 5. Цепочка загрузки платы: от BootROM и контроля целостности до init и приложения

Схема 5. Цепочка загрузки платы: от BootROM и контроля целостности до init и приложения

А где же VxWorks?

Резонный вопрос, потому что VxWorks буквально просвечивает сквозь прошивку. В коде полно классических VxWorks-примитивов и развилок «идти в VxWorks-ветку или в Linux/VISP-ветку». Казалось бы — вот он, работает рядом с Linux.

Но если присмотреться, VxWorks-ядра на этих платах нет: rootfs — чистейший Linux, ядро — обычный zImage, нигде нет ни баннера VxWorks, ни образа Wind River. Разгадка — в слое абстракции ОС (DOPRA/ROSA). Платформа Huawei исторически родилась на VxWorks (ещё на помодовых платах), а на новых чипах переехала на Linux, но прикладной код сохранил VxWorks-совместимый API, чтобы его не переписывать. Чип многоядерный, и AMP архитектурно допускает разные ОС на разных ядрах — но в этой прошивке второго, работающего VxWorks-ядра нет: присутствует только абстракция. Так что корректная формулировка — не «два ядра бок о бок», а «Linux плюс VxWorks-совместимый API как наследие».

Архитектура DOPRA: акторы, VOS и ROSA

Раз уж мы помянули DOPRA и ROSA как «ОС-абстракцию», стоит разобрать, что это за платформа. DOPRA (Distributed Object-oriented Programmable Real-time Architecture) — не ОС и не просто библиотека, а акторный фреймворк поверх ОС.

Схема 6. Архитектура DOPRA: слои платформы (приложения → ROSA → DOPRA → VOS → ОС) и акторная модель (компоненты-PID обмениваются сообщениями)

Схема 6. Архитектура DOPRA: слои платформы (приложения → ROSA → DOPRA → VOS → ОС) и акторная модель (компоненты-PID обмениваются сообщениями)

Фундамент — VOS (Vendor OS). Прикладной код обращается не к системным вызовам ОС напрямую, а к тонкому слою абстракции. Через него идёт всё: асинхронные сообщения, группированные таймеры, пулы памяти (преаллокация вместо malloc), задачи и тики, регистрация компонентов, контроль перегрузки CPU и межъядерный обмен для AMP. Именно VOS прячет реальную ОС: платформа одинаково работает на Linux и VxWorks, потому что знает только этот слой.

Ядро модели — акторы (PID), функции (FID), автоматы (FSM). Это не многопоточный код с общей памятью, а акторная модель, ближе к Erlang/микроядру:

  • PID — у каждого компонента свой идентификатор; сообщения адресуются PID, а не потоку.

  • FID (Function ID) — функциональные юниты регистрируются по FID; старт системы = регистрация компонентов по FID.

  • Сообщения — акторы общаются только асинхронными сообщениями, без прямых вызовов чужих функций; отсюда слабая связность и отказоустойчивость.

  • Автоматы (FSM) — каждый актор обычно реализован как конечный автомат: сообщение = событие, двигающее состояние.

 

ROSA — рантайм, который всё это крутит. Хостит акторов и диспетчеризует сообщения; версионируется отдельно — то есть это самостоятельный переиспользуемый компонент.

Буква

Что значит на практике

Distributed

PID живут на разных ядрах/платах, сообщения маршрутизируются прозрачно

Object-oriented

акторы с инкапсулированным состоянием и интерфейсом-сообщениями

Programmable

состав системы задаётся декларативно (FID + XML), есть хуки

Real-time

группированные таймеры, тики, контроль перегрузки

Короче: DOPRA — акторный микроядерный фреймворк. Компоненты-PID с собственным состоянием (FSM) общаются сообщениями через слой абстракции ОС; он прячет ОС и мультиядро, рантайм диспетчеризует; состав декларативен, таймеры, лицензии и контроль перегрузки — встроенные сервисы. Прикладной код не знает ни про ОС, ни про то, на каком ядре/плате живёт сосед — отсюда переносимость VxWorks↔Linux и раседелённость по ядрам и платам.

Минимальную реализацию такой архитектуры на C можно посмотреть тут (навайбкодил). Почитать про акторы тут и тут.

Процессы станции

Посмотрим на реальный перечень задач работающей станции (вывод «All Task Infomation» в консоли, формат VxWorks-совместимого ядра: TID, имя задачи, статус, режим, точка входа, время работы, размеры стеков). 128 задач — это и есть тот самый набор процессов-акторов:

Огромный перечень
Перечень запущенных процессов.Так видно задачи в рантайм

Перечень запущенных процессов.Так видно задачи в рантайм

Имена говорят сами за себя: WebLMTTask — веб-интерфейс, openhpi — селф-менеджмент, RunLogTask — логи, tEthLinkChk/udpRecvTask/tTranIPSecAging — транспорт и IPSec, tGNSSTask0/tPtpDoProcTask/tSyncDoProcTask — синхронизация (GNSS/PTP), SerdesStateMonitor/tBBULinkTask — линки SerDes/BBU, smsMsgDeal/smsBChan_* — смс.

Виртуальные процессоры: как функции раскладываются по ядрам

Абстракция ресурсов в прошивке вполне материальна: платформа оперирует виртуальными процессорами (vCPU) и на старте «деплоит» их на ядра 4х ядерного Hi1380. Логический сервис не прибит гвоздями к конкретному ядру — он получает виртуальный процессор, а платформа решает, куда его физически положить.

Фото 4. Вывод команды cat /proc/cpuinfo. Видно 4 ядра Hi1380

Фото 4. Вывод команды cat /proc/cpuinfo. Видно 4 ядра Hi1380

Это и есть техническая реализация фразы «ресурсы можно делить или использовать независимо для каждого сервиса». В co-MPT станции GSM, UMTS, LTE и NR — это, грубо говоря, разные наборы vCPU-задач на общем пуле ядер, с общим планировщиком и общей шиной сообщений.

Внутри UBBP: ASIC, DSP, FPGA и CPU

Главную плату мы разобрали. Теперь самый жир, заглянем в соседнюю — ту, что делает собственно радиоканал. UBBP (Universal BaseBand Processing) устроена принципиально иначе, чем UMPT: это не «один SoC под Linux», а гетерогенная связка из трёх уровней, где каждый слой заточен под свой класс задач.

Про поколения платы. В пакете прошивки есть образы всех ревизий UBBP, и ниже я разбираю именно ту, что на фото, — UBBPg1a: управляющее ядро Kunpeng 529, вычислители HiSilicon SD6603 + SD6186, ПЛИС Pango, релиз SRAN16.1, есть 5G NR. Её второй вычислитель работает на собственном ядре HiSilicon «AVP», а первый — на CEVA. Ранняя ревизия UBBP отличается только кремнием: чип SD6182 с лицензионным ядром Xtensa, релиз SRAN11.1 и без NR; архитектура у них одна и та же.

Схема 7. Три уровня UBBP (UBBPg1a): управление (Kunpeng/Linux), два ядра — CEVA и собственное AVP на SD6186 — с аппаратными ускорителями и фронтхол-ПЛИС Pango

Схема 7. Три уровня UBBP (UBBPg1a): управление (Kunpeng/Linux), два ядра — CEVA и собственное AVP на SD6186 — с аппаратными ускорителями и фронтхол-ПЛИС Pango

Уровень 1 — управление (Linux). Управляющее ядро ARM под Linux, поднятое через U-Boot: на UBBPg1a это HiSilicon Kunpeng 529, на ранней ревизии — Cortex-A15. Linux сам ничего в радиоканале не считает — «деплоит» рабочий код на вычислительные ядра, а командами обменивается с главной платой по backplane.

Уровень 2 — Два DSP-ядра разных архитектур. На плате уживаются два разных ядра, и видно это по двум образам. Один образ — для CEVA DSP (и на UBBPg1a, и на ранней ревизии): софт-PHY — LDPC, FFT, L1/L2; математика считается в коде.Второй — для бейсбенд-чипа SD6186. На UBBPg1a работает на собственном ядре HiSilicon «AVP» (свой набор инструкций), в отличие от ранней ревизии с лицензионным Xtensa (SD6182). Релиз SRAN16.1, с поддержкой 5G NR.

Философия разная: CEVA считает PHY в софте, а код для AVP почти ничего не считает сам — он оркестрирует аппаратные ускорители: конфигурирует их, проверяет и гоняет данные.

Уровень 2.5 — аппаратные ускорители. «Железные» ASIC-блоки покрывают все стандарты, включая 5G NR: FFT/DFT, матричный блок/MIMO, оценка канала, подавление помех (IRC), кодирование и rate matching (LTE и NR), WCDMA-тракт (G-RAKE, деспрединг, демодуляция, регенерация), GSM (GMSK, A5 аппаратно), а также декомпрессия IQ, планировщик и контроль допуска. На SD6186 ядро AVP управляет, а считают блоки — hardware-offload вместо software-DSP.

Уровень 3 — ПЛИС: фронтхол-фабрика. ПЛИС на UBBP — не вычислитель физического уровня. На фото UBBPg1a стоит Pango PGL2100H (китайский вендор). Её роль — цифровой фронт-хол и коммутационная фабрика фронтхола: физический уровень CPRI/eCPRI (SerDes, эквалайзеры CTLE/DFE), IQ-кроссбар по контейнерам антенна-несущая (AxC), раздача кадровой синхры и применение весов цифрового бимформинга.

Китайский цифровой суверенитет. На старых платах (UMPT со Spartan-6) ПЛИС была Xilinx — американская. На UBBPg1a её место заняла Pango (КНР), управляющее ядро — собственный Kunpeng 529, бейсбенд — собственные ASIC SD6603 + SD6186. Причём и внутри ASIC: в ранней ревизии DSP-ядро было лицензионным Xtensa (Cadence), а в SD6186 его место заняло собственное ядро HiSilicon — AVP.

Аппаратные ускорители

Вычислительный ASIC UBBPg1a (SD6186) имеет около полусотни аппаратных блоков — больше, чем ранняя ревизия (~33). По стандартам (⁺ — новые относительно ранней ревизии):

Стандарт

Аппаратный ускоритель

общий

FFT/DFT-движок (OFDM-демодуляция, трансформ восходящего канала)

общий

матричный (де)маппинг ресурсов и матрица MIMO

общий⁺

декомпрессия IQ (распаковка фронтхол-данных)

общий⁺

контроль допуска / выделения ресурсов

общий⁺

планировщик обработки

общий

обработка кодовых блоков, тракт канального кодирования

5G NR⁺

канальное кодирование данных (LDPC) и rate matching

LTE⁺

оценка канала

LTE

канальное кодирование и rate matching (канальное/турбо)

LTE

подавление помех (IRC) — два блока

LTE

цифровой фильтр (ресэмплинг/канальный)

LTE

обработка нисходящего канала

WCDMA⁺

оценка канала

WCDMA

декоррелятор / G-RAKE

WCDMA

деспрединг / декодирование / демодуляция

WCDMA

чип-уровневая обработка / общий пилот

WCDMA

синхроканал (SCH) / пейджинг-индикатор (PICH)

WCDMA

IRC / регенерация сигнала

WCDMA

rate matching / нормализация

WCDMA

канал (HS-)DSCH

GSM

GMSK-модуляция

GSM

A5-шифрование (аппаратно)

GSM

декодирование / разрешение коллизий

GSM/UMTS

общий аппаратный движок и его интерфейс

Главные отличия от ранней ревизии: блоки оценки канала, декомпрессии IQ, планировщик и контроль допуска, и целый набор 5G NR. В ранней ревизии (SD6182) блоков NR не было.

DSP/PHY-функции: что именно считается

Кроме «железных» блоков, цифровую обработку делают и сами ядра — CEVA считает в софте, а ядро второго чипа управляет радиотрактом по CPRI:

Этап

Функция

Канальное кодирование

LDPC-кодек (LTE и 5G NR) — в CEVA + аппаратные блоки

Преобразования

FFT/OFDM, обработка L1/L2 — в CEVA

Оценка канала

channel estimation по антеннам — аппаратно

Фронтхол

декомпрессия/компрессия IQ — аппаратно

Восходящий канал: комбинирование

свод сот с нескольких радиомодулей, выравнивание слотов

Восходящий канал: оценка шума

мощность шума/помех по антеннам и глобально (RTWP)

Восходящий канал: АРУ

цифровая автоматическая регулировка усиления с разнесением

Антенна-несущая (AxC)

приём и раздача IQ по контейнерам, синхро-индикация слота

Тайминг кадра

кадровый клок, выравнивание слотов, режимы таймеров

Математические вычисления

MIMO, IRC, деспрединг, FFT, кодирование — аппаратно (см. выше)

Разделение труда: тяжёлую арифметику вынесли в аппаратные блоки и CEVA, а управляющее ядро занимается конфигурацией тракта, приёмом по антеннам-несущим, оценкой помеховой обстановки и таймингом кадра — «дирижирует», а не считает.

Кластер из плат UMPT: топология и роли

Немного рассмотрим кластеры (это не отказоустойчивый кластер, а скорее способ запустить несколько стандартов на разных платах. Но есть возможность собрать кластер в режиме холодного резерва), это важно, так как в софте есть их поддержка. Одной платы, да и одного шасси, хватает не всегда — когда стандартов много или нужна большая ёмкость, тогда платы UMPT объединяют в кластер. «Кластер» существует на нескольких масштабах: две главные платы в одной BBU, две BBU между собой, и даже два Linux-кластера внутри одного чипа. За топологию в прошивке отвечает отдельная подсистема — назовём её подсистемой топологии BBU. Пойдём от простого к сложному.

Две платы UMPT в одной BBU

Фото 5. Кластер их двух платы UMPT в одной корзине.

Фото 5. Кластер их двух платы UMPT в одной корзине.

Самый компактный «кластер» — две главные платы UMPT в одном шасси. BBU может нести две управляющие платы, и каждая становится отдельным сетевым элементом (NE). Классический пример: одна плата = LTE, другая = 3G — вместе они образуют LNR separate-MPT NE.

Что важно:

Соединены через backplane. Обе платы в одной корзине, поэтому общаются по объединительной плате BBU (встроенный L2-коммутатор, адресация по слотам) — никаких внешних кабелей. Сама объединительная плата — это две фабрики: control-plane по Gigabit Ethernet, а высокоскоростные данные — по Serial RapidIO (4 SerDes-линий, DMA и doorbells). Привычного PCIe здесь нет — его место занимает RapidIO, классический коммутируемый межплатный fabric в телекоме. Doorbell здесь — лёгкое аппаратное уведомление: короткий пакет без данных с 16-битным кодом события, который на приёмной плате вызывает прерывание. Паттерн обычный: сами данные идут DMA-ом, а сигнал «готово» — doorbell-ом (аналог MSI в PCIe или IPI между платами).

Делят железо, но раздельны по софту. У каждого NE свой программный и аппаратный стек, но они совместно используют саму BBU, транспорт, клок, RF-модули и антенну.

Согласование общих ресурсов. Чтобы две платы не передрались за общий транспорт/клок/RF, их узлы договариваются через интерфейс согласования ресурсов. Параметры разделяемых ресурсов на обоих NE должны быть согласованы, и multi-node OMC-тул делает это автоматически.

Ограничения. Нельзя два NE одного стандарта в одном separate-MPT NE; если одна плата несёт LN co-MPT, вторая уже не может нести LTE- или NR-only NE (конфликт стандартов).

По сути это separate-MPT «в миниатюре»: два независимых мозга в одном шасси, делящие периферию и синхронизированные через backplane.

Схема 8. Две платы UMPT в одной BBU: две платы как отдельные NE, общие ресурсы и согласование

Схема 8. Две платы UMPT в одной BBU: две платы как отдельные NE, общие ресурсы и согласование

Меж-BBU кластер: root + leaf

Разберем один из вариантов, все рассматривать не будем, там много нюансов, за полными знаниями в документацию хуавей. Когда одного шасси мало, кластер расширяют на вторую BBU. Две полки соединяются UMPT↔UMPT через специальный порт CI (разъем под SFP). Роли жёстко заданы: root (master) и leaf (slave), причём root обязана быть той полкой, где развёрнут NR, а leaf требует плату UMPTb или новее; максимум — две BBU. Master-UMPT ведёт единую топологию плат всех slave-полок.

Что нужно физически. Два соединения: control-plane между UMPT (оптика при расстоянии > 5 м — комплект из двух SFP и оптический патчкорд и baseband-данные через HEI-порты на UBBP (у новых UBBP — порты 40 Гбит/с). Клок раздаёт плата USCU. На панели UMPT за control-plane отвечает выделенный порт CI (SFP): «used for connecting to another BBU or a USU»; при бóльших конфигурациях BBU связывают через коммутатор USU или плату UCIU (интерфейс SCPRI, 2.5/4.9 Гбит/с).

Ограничения:

максимум две BBU — ровно root + leaf

root = BBU с NR, leaf = UMPTb+;

нельзя соединять при конфликте стандартов (пример: BBU1 с LNR co‑MPT + BBU2 с LTE‑only — нельзя, LTE дублируется).

Схема 9. Меж-BBU кластер: роли root/leaf, соединения и ограничения

Схема 9. Меж-BBU кластер: роли root/leaf, соединения и ограничения
Схема 10. физические соединения

Схема 10. физические соединения

Единая модель объектов. На обоих масштабах подсистема топологии строит одно дерево узлов, каждый — с адресом (стойка → субрэк → слот), типом и статусами (авария / админ-состояние / рабочее / standby / доступность). В это же дерево попадают CPRI-цепочки RRU с хопами — топологии «звезда / цепочка / кольцо».

Как кластер живёт в рантайме:

Discovery. Каждая плата рапортует свой адрес и тип; master собирает полное дерево, включая slave‑шасси и цепочки RRU.

Контрольные линки. Поднимаются и проверяются control‑plane линки плата‑плата и шасси‑шасси, поверх работает BFD для быстрого обнаружения обрыва.

· Единый O&M. Один master‑UMPT отдаёт в NMS единую картину (станция видится одним узлом), раздаёт конфигурацию всем платам и полкам, агрегирует аварии.

Синхронизация. Root — источник времени; по IEEE 1588v2 PTP плюс SyncE частота и время расходятся на leaf и дальше на RRU.

Ресурсы. В co‑MPT master динамически раздаёт vCPU, baseband и транспорт между стандартами; в separate‑MPT платы согласуют общие ресурсы через интерфейс согласования.

Главная понять, когда вообще нужны две главные платы: co-MPT — все четыре стандарта на одной плате, хватает одной платы и одной BBU; separate-MPT — стандарты на разных платах, нужны две главные платы (либо в одной полке, либо в двух BBU). То есть кластер — это способ собрать мультимод из раздельных плат/полок (частый кейс — legacy-эволюция: GU в старой BBU + L*N в BBU5900), когда свести всё на одну co-MPT-плату не вариант.

Схема 11. Кластер из плат UMPT: root-полка и leaf-полка с единым деревом топологии

Схема 11. Кластер из плат UMPT: root-полка и leaf-полка с единым деревом топологии

Заглянем глубже: два кластера на чипе, память и монтирование

Если копнуть прошивку дальше, выясняется, что «кластер» есть даже внутри одного чипа — и это закрывает сразу несколько вопросов.

Мастер выбирается на четырёх уровнях:

Тип платы. На старте загрузчик определяет, что за плата (мастер и слейв грузят разные бинарники), и выбирает нужный device tree. Не определил — перезагрузка.

CPU‑кластер на чипе (это и есть AMP). Hi1380 поделён на два Linux‑кластера. Роль (кластер A или B) читается из специального интерфейса ядра плюс параметра загрузки. Cluster A — основной, cluster B выполняет отдельный набор стартовых скриптов. Кластеры делят общую память и общаются через внутричиповые механизмы: аппаратный мейлбокс (сигналы и короткие сообщения с прерыванием), менеджер буферов (передача данных по общим пулам без копирования) и когерентный порт ACP (доступ к общей памяти без ручного сброса кэшей).

Главная плата в полке. Система знает, какая плата главная — по назначенному слоту.

Root в меж‑BBU кластере. Root BBU = та, где NR; leaf = UMPTb+.

Память мапится статически. Linux не владеет всей DDR — каждый кластер/ОС получает заранее нарезанные окна. Из device tree видно, что Linux‑кластеру отданы конкретные регионы DDR (несколько окон от единиц до сотен мегабайт плюс большой гигабайтный регион), а промежутки — память второго кластера, DSP/baseband и буферы данных. Плюс фиксированные области под рамдиск и под «чёрный ящик». Это каноничный AMP: каждая ОС владеет своим куском DDR плюс общие окна для IPC.

Точки монтирования:

  • Виртуальные ФС (стандартный Linux): псевдо-ФС на RAM-диске для временных данных — всё волатильное, пропадает при ребуте.

  • Постоянный флеш: NOR/NAND через MTD с фирменной флеш-ФС (на базе YAFFS), разбитый на разделы: конфигурация и бинарники, логи, рабочая и резервная зоны ПО, boot-уровень. Исторически разделы именуются в стиле VxWorks (через двоеточие) — наследие платформы.

  • Образ платы: при старте монтируется петлёй per-board файловый образ, откуда запускаются board-специфичные скрипты.

  • USB и сеть: USB для обновления, NFS-клиент и сервер(для обмена файлами в кластере).

Обновление ПО в кластере. Что бы поднять кластер ПО должно быть одной версии. Мастер проверяет версии, если они не сходятся, то обновляет: новый образ пишется в резервную A/B-зону флеша; манифесты совместимости проверяют версии всех плат и шасси; master активирует образ и поднимает вторичные ядра/кластеры новой версией; slave-шасси получают софт по control-линкам, а RRU — по TFTP через CPRI; при сбое активации — откат на старую зону. Один master дирижирует обновлением всего кластера, а две зоны и матрица совместимости не дают получить «кирпич» или рассинхрон версий.

Схема 12. Внутри платы: два Linux-кластера (AMP), карта памяти, монтирование и обновление

Схема 12. Внутри платы: два Linux-кластера (AMP), карта памяти, монтирование и обновление

Два кластера на чипе: кто за что отвечает

Разбиение чипа на два кластера (какие ядра, какие окна DDR) делает загрузчик и device tree. Отдельный драйвер ядра выполняет только две узкие функции:

Идентичность кластера. Читает номер кластера из SoC, проверяет, что это 0 или 1, и публикует его ядру и юзерспейсу через специальный интерфейс. По нему стартовые скрипты ветвятся: cluster A идёт одним путём, cluster B — другим.

Арбитраж общей консоли. Оба кластера делят один физический UART. Драйвер разруливает, чей он сейчас, через регистр‑переключатель и прерывание, перенаправляет печать ядра и сигналит соседу межпроцессорным прерыванием («забирай консоль»).

Сам обмен данными между кластерами и DSP-ядрами делает многоядерная подсистема обмена: аппаратный блок управления буферами, пулы в разделяемой памяти (zero-copy) и Ethernet-подобный интерфейс поверх shared-памяти (виртуальные MAC на каждое ядро). Это и есть канал, по которому cluster A ↔ cluster B ↔ DSP гоняют пакеты через общий DDR.

Схема 13. Драйвер идентичности кластера: идентичность, арбитраж консоли и роль подсистемы обмена

Схема 13. Драйвер идентичности кластера: идентичность, арбитраж консоли и роль подсистемы обмена

Транспорт, управление и селф-менеджмент

Вещи, которые делают эту коробку именно телеком-оборудованием операторского класса, а не просто ARM-компьютером с радио.

Транспорт. Набор транспортных драйверов организован в отдельных .so либах. платы UMPT: Ethernet/IP (современный backhaul), E1/TDM (легаси для 2G/3G), встроенный L2-коммутатор. Поверх — собственный IP-стек VISP вместо сетевого стека Linux; рядом сосуществует маршрутизирующая платформа(VRP) Huawei.

Управление (O&M). Управляющая подсистема отдаёт management-плоскость в сторону NMS/OSS: либо единым каналом (co-MPT), либо несколькими независимыми (separate-MPT). Локально инженер цепляется через веб-интерфейс (см. ниже).

Селф-менеджмент. Построен на OpenHPI, открытая реализация стандарта HPI (Hardware Platform Interface) от SA Forum — консорциума carrier-grade систем .Он превращает «корзину с платами» в управляемую программную модель:

Домен → ресурсы → RDR. Полка BBU — домен; каждая вставленная плата — ресурс; возможности ресурса описаны записями RDR (датчики, контролы, инвентарь).

Сенсоры (температура, напряжения, обороты вентиляторов), контролы (светодиоды), инвентарь FRU (серийники, парт-номера из EEPROM), hot-swap (конечный автомат горячей замены) и сторожевые таймеры.

Поверх — событийная модель: ресурсы асинхронно шлют события, а ПО на них реагирует, а не опрашивает железо в цикле.

Вывод: Huawei не изобретала свой велосипед для управления шасси, а взяла открытый телеком-стандарт. BBU управляет собой ровно как серверная blade-корзина carrier-grade класса.

Веб-интерфейс и OAM: чем и как управляют станцией

Управляющих плоскостей две: локальный веб сервер и система управления сетью оператора(NMS).

WebLMT — веб-сервер в базовой станции

Фото 6.Веб интерфейс управления BBU (WebLMT)

Фото 6.Веб интерфейс управления BBU (WebLMT)

Локально станция управляется через WebLMT (Web Local Maintenance Terminal) — да, у базовой станции есть свой веб-интерфейс:

· На главной плате поднимается встроенный HTTP‑сервер (HTTP/1.1), поверх — HTTPS/TLS (TLSv1.0–1.2) с серверным сертификатом и зашифрованным ключом.

  • Отдаётся обычный SPA: HTML плюс gzip‑упакованные JS и XML.

  • Общение с бэкендом — через REST‑подобный API (login/logout, выполнение команд).

  • Логин — challenge‑response (HMAC + клиентское шифрование), так что пароль в открытом виде по сети не передается; таймаут сессии, парольные политики, принудительная смена пароля, блокировка учётки.

Веб‑движок подгружает плагин на каждый стандарт — интерфейс подстраивается под развёрнутые RAT.

Файловые операции вынесены в отдельный Java Web Start‑клиент. Я не любитель явы, не одобряю.

И ещё про «локально»: инженеру необязательно подключать Ethernet кабель. В прошивке есть драйвер USB-WiFi (чип Ralink/MediaTek) в режиме точки доступа — в USB-порт платы можно воткнуть WiFi-свисток, и станция поднимет локальную беспроводную точку, чтобы подключиться к WebLMT/MML по воздуху.

MML — единый язык команд

И локально, и с системы управления станция управляется на MML (Man-Machine Language) — текстовых командах вида «глагол объект: параметры»: просмотр, изменить, установить, добавить, активировать, показать. WebLMT просто оборачивает тот же MML в REST-вызов.

Лично мне веб управление не понравилось. Нужно: зайти на веб, ввести капчу с картинки, выбрать нужное меню в веб интерфейсе. Отнимает много времени, особенно капча с картинки, которую не всегда с первого раза угадаешь. После cisco/juniper/linux cli – кажется, что это не удобно. Поэтому я написал свой клиент, который поднимает OAM канал на сертификатах и дает вводить команды привычным способом. Так же умеет слать бинарные команды, так что можно написать свою NMS, или интегрировать в стороннюю.

Фото 7. Собственный клиент OAM

Фото 7. Собственный клиент OAM

Северный интерфейс (Northbound interfaces)

С операторским NMS станция общается по OM‑каналу (IPv4 и IPv6). Поверх канала:

  • SOAP как кодек управляющих сообщений; Два формата передачи команд — бинарный и текстовые MML. Набор команд хранится в xml, плюс отдельная либа.so которая их обрабатывает.

  • Массовая передача файлов (ПО, конфигурация, логи) — через выгрузку на внешний FTP‑сервер

  • Аварии уходят на NMS уведомлениями.

 Telnet, SNMP, или привычного SSH — нет, управление строится на связке MML + SOAP.

Протоколы — как плагины

Стек протоколов управления и транспорта сделан как загружаемые модули: нужен протокол — грузится .so:  (802.1ag CFM, 802.3ah link-OAM, 802.1X, CMPv2, IP-протоколы, трассировщики). Тот же плагинный подход, что и у прикладных библиотек платформы.

Схема 13. Веб-интерфейс и OAM: клиенты, движок на главной плате, PKI и хранилище конфигурации

Схема 13. Веб-интерфейс и OAM: клиенты, движок на главной плате, PKI и хранилище конфигурации

Безопасность: PKI, доступ и защита станции

Безопасности в прошивке уделено много внимания — это несколько уровней, видно что инженеры хуавей старались:

Полноценная PKI. Вокруг управления выстроена полноценная инфраструктура открытых ключей:

  • операторский корневой УЦ и серверные/компонентные сертификаты;

  • CMPv2 — автоматический выпуск и обновление сертификатов самой станции из PKI оператора;

  • 802.1X — станция аутентифицируется в транспортной сети, прежде чем в неё пустят;

  • LDAP — централизованная аутентификация учёток инженеров;

  • CMS/PKCS#7 для защищённых сообщений.

Плюс сам вход: HTTPS-портал с challenge-response логином (пароль в открытом виде по сети не уходит), таймаут сессии и блокировка учётки.

Пароли — хешами, дефолты в XML. Пароли не лежат в обычном системном файле паролей в рутфс — учётки хранятся в персистентном конфиге на NOR-флеш (там же, где корень доверия), и только в виде хешей (SHA-512): открытого пароля на плате нет. Заводские (дефолтные) пароли поставляются отдельно — в XML-конфиге — и подлежат обязательной смене при первом входе (парольные политики, блокировка учётки).

Защита от сканирования портов. Встроенный пакетный фильтр: ACL-правила плюс списки доверенных узлов и пиров (security-host/peer/template) и бело/чёрные списки. Трафик с неизвестных адресов и на незадействованные порты отбрасывается — сканер портов не видит открытых сервисов. Детектор обнаружения сканирования отравляет атакующего в бан (походит на  fail2ban, но реализация собственная)

Контроль запущенных процессов. Есть белый список процессов: стартовать разрешено только «своим» бинарям из списка — посторонний или подменённый процесс не запустится. Вместе с контролем целостности образов (контрольные суммы/подпись на загрузке) это закрывает подмену кода.

ARM TrustZone — аппаратный корень доверия. Самый нижний уровень защиты — не в Linux, а под ним. SoC аппаратно разделён на два «мира»: Normal World (Linux и приложения) и Secure World — изолированная доверенная среда исполнения (TEE) на базе OP-TEE. У Secure World своя защищённая память, куда Normal World физически не залезет, а переключение миров — через механизм безопасного вызова (SMC). В TEE — самое чувствительное: проверка подписи при secure boot, защищённое хранилище ключей и блокировка отладки.

JTAG закрыт на уровне eFuse и не разведен на стандартный разъем.  Даже при компрометации Linux ключи и проверка целостности остаются за аппаратной границей.

UART отключен на ввод/вывод.

Если собрать вместе: HTTPS-портал с REST-API и challenge-response логином, северный SOAP к системе управления, файловые серверы, плагинный стек протоколов, автоматический PKI-энролмент, хеши паролей на защищённой NOR, пакетный фильтр от сканирования, белый список процессов и — в самом низу — аппаратный TrustZone/TEE (OP-TEE) как корень доверия. Маленький, но взрослый enterprise-бэкенд — причём с «безопасностью по умолчанию».

Логирование и отладка: чёрный ящик, логи и трейс

Логирование — это не «один лог-файл», а несколько независимых подсистем:

BlackBox / «чёрный ящик». Перед крахом или сбросом система сохраняет «последнее слово» в зарезервированную область RAM, которая переживает перезагрузку. Нюансы, делающие это бортовым самописцем: отдельный lastword на каждый виртуальный процессор, защита контрольным полем, своё «последнее слово» даже у FPGA; после ребута содержимое сбрасывается в файл. В связке с установкой «любой сбой ядра → паника → ресет» получается: станция падает, но успевает записать состояние.

Файловые логи с ротацией и сжатием. Несколько потоков, кольцевые и сжатые: платформенный лог (модули регистрируются в нём), рабочий лог рантайма, и трейс шагов загрузки.

Распределённый сбор. Каждый драйвер и модуль умеет отдавать свою диагностику, а коллектор собирает это в единый дамп. То есть логирование не централизованное «сверху», а федеративное: каждый компонент сам рапортует о себе.

Operation / Security (аудит). Отдельный журнал: кто вошёл и что делал. Записи структурированы (login/logout, оператор), с разделением ручного логина и авто-логина по ключу.

Trace — онлайн-трейс сигнализации. Принципиально другой поток: не файлы «что было», а живой стрим «что происходит прямо сейчас». Трейс-модули монтируются на лету (свои на каждый стандарт), а сам трейс привязывается к конкретному объекту — сигнальной ассоциации, линку, соте, абоненту. Результат стримится вживую в WebLMT инженеру.

Точечное включение логов. У каждого модуля свой набор: включить/выключить отладочную печать глобально или по одному объекту, выставить уровень, показать/сбросить счётчики. Это критично: на боевой станции включение полной отладка — это к падению сервиса, поэтому детализацию включают точечно.

Хранение — на флеше (отдельный раздел под логи, ротация и сжатие), таймстемпы от NTP/SNTP; наружу логи уходят по FTP/SFTP на NMS или скачиваются через веб-интерфейс. Если смотреть глазами «серверного» разработчика — это ровно современная модель наблюдаемости: логи, трейсы, crash-dump, аудит и метрики-счётчики, только вместо ELK и Jaeger — флеш-раздел и SFTP на NMS.

Схема 14. Подсистема логирования: post-mortem логи, live-трейс, чёрный ящик, хранение и выгрузка

Схема 14. Подсистема логирования: post-mortem логи, live-трейс, чёрный ящик, хранение и выгрузка

Как читают логи инженеры

Для удобства анализа логов/CDR/перфоманса/траблшутинга/анализа KPI есть отдельный софт под Windows с названием Fault Management Application (FMA). Инженер выгружает логи с БС на FTP, и далее просматривает их в FMA.  выглядит вот так:

Фото 8. Интерфейс программы FMA

Фото 8. Интерфейс программы FMA

Как устроено обновление ПО

Доставка ПО — трёхуровневая матрёшка.

Верхний уровень: релизный пакет SRAN

Весь релизный —пакет SRAN, собран из независимо версионируемых кусков:

Release SRAN  V100R016C10SPC130
├─ packcfg.xml / vercfg.xml / ratadapt.xml / VERMATCH.XML   ← манифесты (namespace ROSA/SoftwareManagement)
│   · .sgn (RSA) · .cms (PKCS#7 + цепочка) · .crl / SWSCRL.crl
├─ COMM/   comm.csp     V500R010C10SPC130   ← общая платформа
├─ eGBTS/  rat_g.csp    V100R022C10SPC130   ← GSM (2G)
├─ NodeB/  rat_u.csp    V200R022C10SPC130   ← UMTS (3G)
├─ eNodeB/ rat_l.csp    V100R016C10SPC130   ← LTE (4G)
├─ gNodeB/ gNodeB.csp   V100R003C10SPC130   ← 5G NR (type=10)
├─ GBTS/  
Download.zip                     ← legacy GSM (старый .zip)
└─ RFA/    RFA.csp      V100R016C10SPC130   ← радио (type=8)
     каждый product-каталог: <pkg>.csp + .sgn + VERMATCH.XML/.SGN + Precfg.ini

Что здесь важно архитектурно:

·         Станция — это композиция версий, а не монолит. Общая платформа в одной ветке, каждый стандарт — в своей; SRAN их склеивает. Манифест версий перечисляет всё с путями и типами, плюс список поддерживаемых моделей станций.

·         Матрица совместимости версий. Отдельный манифест задаёт приоритет стандартов и правила, с какими версиями соседних стандартов данная версия уживается. Именно это не даёт собрать мультимод из несовместимых кусков.

·         Адаптация. Отдельный манифест маппит функции на типы приложений — какую app-адаптацию платформе грузить.

·         Подпись — на каждом уровне. Отдельные RSA-подписи, контейнеры PKCS#7 с цепочкой сертификатов и списки отзыва. Ровно та PKI/целостность, что мы видели в управлении.

 

Почему у пакета прошивки две подписи? Потому что Вася Пупкин работающий в хуваей выложил в паблик утилиту для подписывания файлов с приватными ключами. По той же причине, теперь две схемы обновления ПО через USB. И вся та безопасность, о которой говорили ранее помножилась на ноль. Не делайте как Вася.

Схема 15. Структура релизного пакета: Release → пакет стандарта → образ платы

Схема 15. Структура релизного пакета: Release → пакет стандарта → образ платы

Что реально лежит в пакете прошивки

Каждый product-пакет — это манифестный архив (дескрипторная таблица: имя файла + смещение + размер, достаётся без сканирования маркеров). Внутри — образы конкретных плат (вложенные контейнеры → squashfs → исполняемые модули), конфиги и подписи.

Пакет главной управляющей платы показывает, из чего вообще состоит «прошивка»: ОС (загрузчик + Linux + rootfs + device tree), прикладные squashfs-образы, платформа и фреймворк отдельными модулями, IP-стек и транспортные драйверы, конфигурация процессов в XML (тот самый актор-рантайм описан декларативно, а не зашит в код), прошивка FPGA и CPLD, device tree, лицензионные item’ы.

А для радиомодулей(RRU/AAU) состав совсем «SDRный»: загрузчик, образ SoC, DSP-образы, FPGA-битстрим, файлы цифрового предыскажения усилителя (DPD), калибровки радиотракта, доверенная среда исполнения (ARM TrustZone). То есть одна «прошивка базовой станции» — это на самом деле десятки прошивок для десятков разных процессоров, DSP и ПЛИС, собранные в один подписанный контейнер.

Флеш-память: NOR и NAND — и почему их разделили

У платы два разных типа флеш-памяти, и это осознанное архитектурное разделение. Видно даже по загрузке: ядро поднимает драйверы обоих — NOR (через интерфейс CFI) и NAND (с ECC), плюс слой MTD и разборщик разделов.

Схема 16. Раскладка флеш-памяти: NOR (загрузчик, пароли, сертификаты — корень доверия, обновляется вручную) и NAND (ОС, A/B-зоны ПО, логи — онлайн-обновление)

Схема 16. Раскладка флеш-памяти: NOR (загрузчик, пароли, сертификаты — корень доверия, обновляется вручную) и NAND (ОС, A/B-зоны ПО, логи — онлайн-обновление)

На NOR — то, что должно быть маленьким, надёжным и всегда доступным: загрузчик и переменные окружения; пароли / учётные данные; сертификаты и ключи (PKI — корень доверия); критичные мелкие конфиги (идентификатор платы, указатели на калибровку). NOR байт-адресуема и поддерживает XIP (процессор читает и исполняет прямо из неё при reset), без бэд-блоков, очень надёжна; пишется редко — выравнивание износа не нужно, можно аппаратно защитить от записи. Загрузчик на NOR обновляется вручную — не через онлайн-апгрейд: прошивать его «на лету» — верный «кирпич». Поэтому его трогают редко, отдельной ручной процедурой.

На NAND — весь объём: ОС (ядро Linux + rootfs в squashfs); две зоны ПО A/B (с откатом); прикладные образы (приложение, DSP, FPGA); логи (чёрный ящик) и большие конфиг-БД. NAND дёшева и ёмка — сотни мегабайт помещаются; зато есть бэд-блоки, поэтому нужны ECC, выравнивание износа и флеш-ФС, которые прячут изнашивание. Эта память часто перезаписывается (логи, A/B), и штатное обновление идёт сюда — в резервную зону, с откатом.

Как прошивка вообще попадает на плату. На заводе ПО заливают на NOR программатором (на стенде, а не «через станцию»), и на микросхемe клеят наклейку с версией — чтобы на складе и при монтаже было видно, что внутри, не включая оборудование. А дальше — «на носителе минимум, остальное по сети»: в NOR лежит, по сути, только загрузчик, а основную прошивку (ОС, приложение, образы) загрузчик вытягивает по IP и раскладывает в NAND. Тот же приём, что у радиомодулей (грузятся по сети). Поэтому NOR практически не меняется за всю жизнь платы (отсюда и ручное обновление загрузчика), а весь «живой» объём — на NAND. Логика работы одинакова.

Почему разделено:

  • Надёжность загрузки и корень доверия. То, что обязано загрузиться всегда (загрузчик), и секреты/ключи — на надёжной NOR без бэд-блоков, которую процессор читает напрямую при reset. Корень доверия изолирован от часто-перезаписываемого объёма.

  • Ёмкость против цены. Секреты и загрузчик крошечные → маленькая (но дорогая за бит) NOR; ОС + ПО + логи — сотни мегабайт → дешёвая ёмкая NAND.

  • Паттерн записи и безопасность. NOR пишется редко (без выравнивания износа), NAND часто (ECC + флеш-ФС). И это защита: NAND можно перепрошить целиком, а NOR-корень доверия это переживёт и проверит подпись нового образа перед запуском — та же PKI.

Обновление, подпись и «две зоны» с откатом

Отдельного разговора заслуживает то, как обновление накатывается. Возьмём обновление с USB-флешки (Тут надо сказать, что обновление с флешки – это аварийная процедура, пакет обновления подписывает сертификатами тех. поддержка и присылает под каждую BBU). Штатный механизм обновления через O&M или веб-LMT.

Есть два формата пакета обновления на флешке:

  • Новый, манифестный. В корне лежит DeployCfg.xml — единый манифест: какие платы (по серийнику ESN/MPTSN, где ANY — wildcard), в каком режиме (ServiceMode = буквы G/U/L для 2G/3G/4G) и какие файлы ставить (Software, ColdPatch, HotPatch, CfgDataFile, License…). Один файл на флешке описывает мультиплатформенную, мультистандартную установку.

  • Старый, каталоговый. Если DeployCfg.xml нет — откат на фиксированные папки по типу продукта: /usb:/NodeB, /usb:/eNodeB, /usb:/BTS3900 GSM, /usb:/TDNodeB.

Либа отвечающая за обновление  берёт тот каталог, который физически присутствует (и ругается, если их сразу два). Пайплайн: детект USB → монтирование файловой системы → разбор манифеста → precheck по каждому типу приложения (загрузить пакет обновления, проверить версию, проверить подпись и «криптозащищённость») → и только потом установка. Любой сбой подписи, версии или контрольных сумм останавливает процесс — обновление не начинается, а не ломается на середине.

 

Многоступенчатый контроль целостности и подлинности:

  • дескриптор безопасности с HMAC и шифрованием;

  • отдельная ЭЦП на конфиг пакета;

  • заголовочная цифровая подпись пакета (RSA/CMS, со списками отзыва);

  • CRC16 в метаданных и CRC32 на загрузочных образах;

  • сверка версий: смешанные версии или неподдержанный тип платы отбраковываются до установки.

Две зоны и откат. Классическая A/B-схема: новый образ пишется в резервную зону, и только при успешной активации станция переключается на неё; при неудаче — остаётся жить старая. Плюс «горячие» патчи (без перезагрузки) и «холодные» (с рестартом). Именно так гигантскую коробку на вышке обновляют удалённо, не посылая инженера.

Алгоритм детектирования сбоя активации простой: если три раза загрузка не прошла успешно — загрузчик накатывает прошивку из резервной зоны.

Кстати, фоновую механику обновления Huawei описывает в своей документации (Commissioning Guide): станция сама детектит USB, читает ПО и конфиг из фиксированных каталогов, сверяет версии и обновляется только при расхождении, а при совпадении — пропускает. Весь процесс оператор видит по миганию RUN-светодиода: быстрое мигание (0.125 с) — идёт загрузка/активация (~12 + ~3–4 минуты), медленное (1 с) — штатная работа.

 

Схема 17. Две зоны прошивки (A/B) с откатом во флеше

Схема 17. Две зоны прошивки (A/B) с откатом во флеше

Как грузится RRU: загрузчик, диагностическая ОС, софт — по CPRI

Радиоблок устроен как «тонкий» клиент: в собственной флешке у него лежат загрузчик и компактная резидентная ОС с диагностикой, а весь рабочий софт приезжает с BBU по оптике. Эта резидентная ОС поднимается и без связи с BBU и отвечает за первичный подъём и самотест железа, мониторинг и аварии, сбор диагностики и захват аварийного дампа, восстановление. Постоянного рабочего приложения радиоблок у себя не держит — его забирает с BBU.

Рабочий софт лежит на BBU и содержит полный набор: ядро Linux (для современных радиоблоков), главное приложение, DSP-образ, FPGA-битстрим, DPD, калибровки.

Протокол — TFTP. На BBU для радио стороны поднят TFTP-сервер.

Процесс:

1. Питание → стартует загрузчик из флеша RRU
2. Загрузчик поднимает оптический CPRI‑линк к BBU, согласует line rate
3. По in‑band C&M‑каналу CPRI RRU получает связность (L2/IP) с BBU
4. Загрузчик по TFTP качает с BBU набор: ядро, приложение, DSP, FPGA, DPD, калибровки
5. Образы разворачиваются в RAM → RRU грузит Linux и запускает радио
6. Софт тянется заново при КАЖДОЙ загрузке → версия RRU всегда = версии BBU

Раз радиоблок каждый раз берёт софт с BBU, его версия автоматически синхронна с головной платой. Отдельного апгрейда RRU не существует: заменил модуль на вышке — он сам провизионится. Весь интеллект и управление версиями — на BBU, в RRU — загрузчик, резидентная ОС с диагностикой железа.

Схема 18. Загрузка RRU: в флеше загрузчик и диагностическая ОС, рабочий софт качается с BBU по CPRI/TFTP

Схема 18. Загрузка RRU: в флеше загрузчик и диагностическая ОС, рабочий софт качается с BBU по CPRI/TFTP

Старые RRU: ещё живой VxWorks

Новые радиоблоки работают на Linux. А вот если взять что постарше — например, RRU3232, — там под капотом VxWorks. И это показывает, что радио-сторона прошла ту же миграцию, что и главная плата.

Образ запрятан в несколько слоёв сжатия и обёрток, а размотав его, VxWorks видно в упор: сообщения инициализации ядра, его системные задачи, классические API, отладочный агент Wind River. Старт образа — с ARM-инструкции перехода (reset-вектор), то есть VxWorks на ARM. Модули грузятся как отдельные объектные файлы — самая характерная подпись VxWorks (Linux так не делает; у него были бы модули ядра). И никакого Linux-ядра в пакете нет, в отличие от новых радиоблоков.

Поверх VxWorks работает тот же DOPRA — фирменная платформа Huawei, только в VxWorks-флейворе. Состав пакета вполне «SDRный»: битстрим ПЛИС, цифровое предыскажение и его коэффициенты, коэффициенты фильтров и частотные шаблоны, списки регистров. В логике — управление усилителем мощности (HPA), адаптация DPD, CPRI. И двойной BOOTROM (Active/Standby) — та же A/B-идея, что на главной плате.

Вывод: и UMPT плата, и радио прошли один путь — VxWorks → Linux. На управлении это помодовые платы (VxWorks) → UMPT (Linux), на радио — старые RRU (VxWorks) → новые RRU (Linux). А DOPRA как слой абстракции пережил оба перехода, поэтому VxWorks-наследие и просвечивает даже там, где уже давно Linux. При этом старое железо до сих пор совместимо с новым.

Схема 19. Старое RRU на VxWorks: структура пакета, стек VxWorks/DOPRA на ARM, контраст старое/новое

Схема 19. Старое RRU на VxWorks: структура пакета, стек VxWorks/DOPRA на ARM, контраст старое/новое

RF API: как BBU управляет радиоблоком

Схема 20. RF API: путь команды BBU → CPRI C&M (HDLC/SCP) → шина сообщений → HAL радио (ROC) → RFIC (ADI/AFE75xx), и категории команд

Схема 20. RF API: путь команды BBU → CPRI C&M (HDLC/SCP) → шина сообщений → HAL радио (ROC) → RFIC (ADI/AFE75xx), и категории команд

Транспорт — HDLC поверх CPRI. Команды едут по управляющему каналу CPRI (C&M), кадрированному HDLC, поверх тех же SerDes, по которым идёт IQ: с адресацией узлов и согласованием скорости канала.

Диспетчер — шина сообщений + обработчики модулей. На стороне радиоблока команда принимается внутренней шиной сообщений и роутится в обработчик своей подсистемы (на каждую — свой).

HAL радио. Сами команды живут в слое аппаратной абстракции радио (ROC — «Radio-On-Chip»). Это не зависящая от поставщика прослойка: один набор команд транслируется в регистры конкретного трансивера. Видны бэкенды под разные RFIC — Analog Devices и AFE75xx-класс.

Категории команд и подкоманды. Имя строится как «подсистема → элемент → запись/чтение» (почти всё — запись, пара — чтение):

Категория

Подкоманды

Что настраивают

TOP

включение системного клока, включение питания

системный клок и питание трансивера

RFPLL

включение синтезатора

синтезатор / гетеродин

SYSREF/JESD

запуск SYSREF по TX и RX, конфигурация JESD

синхронизация конвертеров (детерминированная задержка)

TX

установка аналогового усиления

усиление передатчика

RX

установка усиления, цифровая АРУ, выбор входа, выбор гетеродина

усиление и front-end приёмника

AGC

настройка детекторов (ADC/BB/RF/RMS), таймеры, постоянные интегрирования, пороги

детекторы, тайминги и пороги автоматической регулировки усиления

CAL

вкл/выкл калибровки, pre/post-config прогоны, калибровка RX-трактов, сброс статуса

калибровка (из следующего раздела)

TDD

конфигурация TDD

переключение приём/передача

USECASE

применение профиля

профиль применения (полоса/режим)

GPIO / регистры / аварии / отладка

режим и тип GPIO, чтение/запись регистра, конфиг аварий, отладочные тесты

низкий уровень (в т.ч. прямой доступ к регистрам как escape hatch)

FINALIZE / USER

подтверждение готовности, пользовательские расширения

подтверждение готовности; расширения под конкретную плату

Обычная последовательность запуска радио: клок и питание → синтезатор → синхронизация конвертеров → усиление и АРУ → профиль применения → калибровка → подтверждение готовности. Отсюда и связка «RF-команды ↔ синхронизация ↔ калибровка».

А если eCPRI? Транспорт меняется, API — нет. В eCPRI фронтхол пакетный (поверх Ethernet). И самое интересное — как едет управление (C&M): по прошивке AAU видно, что оно кладётся в eCPRI-сообщение типа «Vendor Specific» — вендорскую «ячейку» стандарта, и несёт те же управляющие сообщения, что и в CPRI (там — в HDLC-кадре, здесь — в кадре Vendor Specific по Ethernet). Сам набор RF-команд не меняется — меняется «конверт». O-RAN M-plane тут ни при чём: ни NETCONF, ни YANG в прошивке нет — это проприетарный Huawei-eCPRI (BBU и AAU оба Huawei). Диспетчер, HAL радио и работа с трансивером идентичны. Что eCPRI добавляет: синхронизация по PTP (IEEE 1588) + SyncE (в Ethernet нет встроенного клока), задержку меряют явно, IQ обычно сжимается. Фронтхол-ПЛИС поддерживает оба режима.

Калибровка и метрология RF-тракта

Раз зашла речь про RF, отдельно стоит калибровка — в прошивке это не пара функций, а целая подсистема. Она делает так, что «заданная» мощность равна реально излучённой.

Схема 21. Калибровка RF-тракта: зачем (MIMO/метрология), распределённый процесс BBU↔RRU, что калибруется (мощность/фаза/задержки/частота/температура/DPD…) и как хранится

Схема 21. Калибровка RF-тракта: зачем (MIMO/метрология), распределённый процесс BBU↔RRU, что калибруется (мощность/фаза/задержки/частота/температура/DPD…) и как хранится

Это управляемый процесс, а не разовая заводская операция. Калибровкой рулит не файл-сценарий, а командный RF-API: BBU шлёт команды в RRU в две фазы — до и после конфигурации несущих. Приёмный тракт калибруется поэлементно (все тракты либо feedback-тракт DPD). При сбое тракт помечается «некалиброванным».

Что калибруется:

  • TX-мощность — «скомандовано → реально излучено» по каналам/трактам (плюс пороги предупреждений/аварий);

  • RX-тракты — усиление по приёмным путям, включая feedback-тракт DPD;

  • Канальная / фазовая когерентность — выравнивание амплитуды и фазы всех антенных трактов, основа MIMO и бимформинга;

  • Задержки — компенсация задержек по CPRI-волокну, чтобы антенны были выровнены по времени;

  • RTWP / шумовой порог — опорный уровень приёма, чтобы измерения шума/помех были абсолютными;

  • Частота / клок — подстройка опорного генератора (автоподстройка частоты через ЦАП, VCXO/VCTCXO);

  • Температурная компенсация — дрейф мощности/частоты от температуры + защита по перегреву;

  • CFR / DPD — линеаризация усилителя; фильтры и ALD / RET — электрический наклон антенны по AISG.

Процесс распределённый: BBU ↔ RRU по CPRI. BBU инициирует, RRU измеряет свой RF-фронт-энд и рапортует обратно; результаты сливаются и раздаются по стандартам. Фазовое выравнивание завязано на подсистему синхронизации — калибровка, тайминг и бимформинг в одной связке.

Хранение. Калибровочные коэффициенты привязаны к конкретной железке (копируются/очищаются при замене юнита), с бэкап-копией и статусом «калиброван/нет». Это ровно те «критичные мелкие данные», что живут на надёжной стороне флеша (рядом с корнем доверия) — потерять калибровку значит, что станция начнёт «врать» по мощности и частоте.

Связь с метрологией прямая: калибровочные таблицы лежат в основе RF-тест-режима, поэтому расхождение «внешний тестер (вроде CMU200) vs внутреннее измерение станции» — это и есть прямая оценка состояния калибровки.

Как мы это проверяли: запуск прошивки в QEMU

Чтобы не верить дизассемблеру на слово, образ главной платы я реально загрузил — в эмуляторе. Написана минимальная машина QEMU, моделирующая железо по настоящим device tree из прошивки: Cortex-A9 с A9 MPCore (контроллер прерываний, таймеры), память, UART-консоль и контроллер Ethernet HiSilicon GMAC, так что сетевые интерфейсы поднимаются и гоняют реальный трафик.

Фото 9. Консоль QEMU: образ главной платы грузится до Linux 4.4.197 (ARM big-endian) и интерактивного шелла; видны драйверы NOR/NAND

Фото 9. Консоль QEMU: образ главной платы грузится до Linux 4.4.197 (ARM big-endian) и интерактивного шелла; видны драйверы NOR/NAND

Оно грузится: декомпрессор → Linux 4.4.197 → загрузка модулей (включая драйверы флеша NOR/NAND) → стартовые скрипты → детект платы → интерактивный шелл на консоли. Главного приложения в эмуляции нет, я запустил его не до конца, слишком большой объем по эмуляции реального железа, хотя до какой‑то стадии грузится, но дальше продолжать играть с этим я не стал, нужен был сам факт возможности запуска в эмуляторе. Наблюдения из живой системы:

  • uname → Linux 4.4.197 armv7b — то самое ARM big‑endian;

  • консольный ввод работает;

  • в логе видны драйверы флеша (NOR через CFI, NAND с ECC) — подтверждает раздел про NOR/NAND.

.

Выводы

Сложные системы требуют сложную архитектуру. Архитектура базовой станции Huawei 3900/5900 — это красивый пример того, как общие принципы «большого» software-инжиниринга перенесены в embedded-телеком:

  • Разделение платформы и приложений. BTS Node — платформа, RAT-стеки (2G/3G/4G/5G) — приложения-сервисы поверх неё, со строго описанными интерфейсами. По сути — PaaS внутри одной коробки.

  • Виртуализация ресурсов. Виртуальные процессоры, абстрагированные ресурсы, общий пул ядер — чтобы один и тот же кусок железа гибко раздавался разным стандартам связи.

  • Актороориентированный рантайм. DOPRA + ROSA и обмен сообщениями между процессами-задачами — вместо монолита множество изолированных акторов.

  • Честный trade-off. Co-MPT (всё на одной плате, минимум железа, но сильная связанность) против separate-MPT (изоляция отказов ценой дублирования) — та же дискуссия, что монолит против микросервисов.

  • Обычный фундамент под необычной задачей. Под капотом — встраиваемый Linux на ARM big-endian, zImage и squashfs, OpenHPI, собственный IP-стек, RapidIO-backplane. Ничего магического; магия — в том, как это собрано вместе, чтобы четыре поколения связи ужились в одном корпусе и не мешали друг другу.

  • Зрелый жизненный цикл ПО. Манифестные пакеты с дескрипторной таблицей, многослойный контроль целостности (CRC + RSA/CMS-подписи), две зоны прошивки с откатом и горячие/холодные патчи — всё, что нужно, чтобы безопасно обновлять оборудование, до которого нет физического доступа.

Для тех кто дочитал до конца – маленький анонс

В следующей статье расскажу, как запустить 4G на BBU3900 и Open5GS.

Фото 3. Спектр LTE TDD  на экране моего радиотестера.

Фото 3. Спектр LTE TDD  на экране моего радиотестера.

Перечень сокращений

Сокращение

Расшифровка

802.1X

аутентификация устройства в сети по порту

A/B-зоны

две зоны ПО во флеше с откатом

A5

алгоритм шифрования GSM

AFC

Automatic Frequency Control — автоподстройка частоты

AGC

Automatic Gain Control — автоматическая регулировка усиления

AISG

стандарт управления антенной (RET и т.п.)

ALD

Antenna Line Device — устройство антенно-фидерного тракта

AMP

Asymmetric MultiProcessing — асимметричная многопроцессорность

ASIC

специализированная интегральная схема

AVP

вычислительное ядро HiSilicon в бейсбенд-ASIC

AxC

Antenna-Carrier — контейнер «антенна-несущая» в CPRI

BBP

BaseBand Processing — плата обработки основной полосы (UBBP)

BBU

BaseBand Unit — блок цифровой обработки

BER / BLER

Bit / Block Error Rate — частота битовых/блочных ошибок

BTS

Base Transceiver Station — базовая станция

CEVA

вендор лицензируемых DSP-ядер

CFR

Crest Factor Reduction — снижение пик-фактора

CMPv2

Certificate Management Protocol — управление сертификатами

CMS / PKCS#7

форматы криптографических сообщений

CPLD

программируемая логическая матрица (малая)

CPRI

Common Public Radio Interface — фронтхол к радио

CRC

Cyclic Redundancy Check — циклический контроль целостности

CRM

менеджер ресурсов узла

CSP

формат пакета доставки ПО Huawei

CTLE / DFE

эквалайзеры высокоскоростных линий SerDes

DBF

Digital Beam Forming — цифровое формирование луча

DFT / FFT

дискретное / быстрое преобразование Фурье

DOPRA

акторная платформа Huawei

DPD

Digital Pre-Distortion — цифровое предыскажение усилителя

DSP

цифровой сигнальный процессор

ECC

Error-Correcting Code — коррекция ошибок (в NAND)

EQM

модель оборудования — объекты-ресурсы

EVM

Error Vector Magnitude — качество модуляции

FDD / TDD

частотный / временной дуплекс

FID

Function ID — идентификатор функционального юнита

FPGA

программируемая логическая интегральная схема (ПЛИС)

FSM

Finite State Machine — конечный автомат

GMAC

контроллер Gigabit Ethernet

GMSK

модуляция GSM

GNSS

глобальная навигационная спутниковая система

HAC

Hardware ACcelerator — аппаратный ускоритель

IRC

Interference Rejection Combining — подавление помех

LDAP

протокол централизованной аутентификации

LDPC

помехоустойчивый код (Low-Density Parity-Check)

LMT

Local Maintenance Terminal — локальный терминал обслуживания

MIMO

Multiple-Input Multiple-Output

MML

Man-Machine Language — командный язык управления

MPT

главная плата управления и транспорта (UMPT)

MTD

Memory Technology Device — слой флеша в Linux

NMS

система управления сетью оператора (U2000/iManager)

NOR / NAND

типы флеш-памяти

NR

New Radio — радиоинтерфейс 5G

OAM

Operations, Administration & Maintenance

OFDM

ортогональное частотное мультиплексирование

OP-TEE

открытая ОС доверенной среды (Secure World)

PA

Power Amplifier — усилитель мощности

PICH

пейджинг-индикатор-канал WCDMA

PID

идентификатор процесса-актора в DOPRA

PKI

инфраструктура открытых ключей

PTP

Precision Time Protocol (IEEE 1588)

RAT

Radio Access Technology — технология радиодоступа (2G/3G/4G/5G)

RET

Remote Electrical Tilt — электрический наклон антенны

RF

радиочастота / радиочастотный тракт

RRU

Remote Radio Unit — выносной радиомодуль

RSSI

индикатор уровня принятого сигнала

RTWP

Received Total Wideband Power — UL-шум/помехи

ROSA

Realtime OS abstraction — рантайм акторов DOPRA

SCTP

транспорт сигнализации

SHA-512

алгоритм хеширования паролей

SMC

Secure Monitor Call — переключение миров TrustZone

SoC

System-on-Chip — система на кристалле

SRE

Service/Software Running Environment — рантайм на DSP-ядрах

SRIO

Serial RapidIO — шина backplane

SWM

SoftWare Management — подсистема обновления ПО

TEE

Trusted Execution Environment — доверенная среда исполнения

TLS

Transport Layer Security

TrustZone

аппаратное разделение Normal/Secure World в ARM

UBBP

Universal BaseBand Processing — плата baseband

UMPT

Universal Main Processing & Transmission — главная плата

VCXO / VCTCXO

управляемый напряжением (термокомп.) кварцевый генератор

VISP

Versatile IP Stack — собственный TCP/IP Huawei

VOS

Vendor/Virtual OS — слой абстракции ОС (фундамент DOPRA)

VSWR

КСВН — коэффициент стоячей волны по напряжению

vCPU

виртуальный процессор

XIP

eXecute In Place — исполнение прямо из флеша

YAFFS

флеш-файловая система (для NAND)

АРУ

автоматическая регулировка усиления (= AGC)

БД

база данных

ГБ / МБ / КБ

гига- / мега- / килобайт

КНР

Китайская Народная Республика

КСВН

коэффициент стоячей волны по напряжению (= VSWR)

ОЗУ

оперативное запоминающее устройство (RAM)

ОС

операционная система

ПЛИС

программируемая логическая интегральная схема (= FPGA)

ПО

программное обеспечение

УЦ

удостоверяющий центр (Certificate Authority)

ФС

файловая система

ЦАП

цифро-аналоговый преобразователь (= DAC)

ЭЦП

электронная цифровая подпись

 

Автор: yakov_cyb

Источник