English

Цільовий парк і середовище ППЗ

Дата: 01.10.2023

На початку, а було це восени 2014-го, архітектури процесорів, які розлядались як цільові були такі:

Цільовий парк почався в листопаді 2014-го з купування двох 32 бітних армівських Одноплатних Компутерів (ОПК) — Beagle Bone Black та Cubieboard 2. x86 ПК завжди розглядались як цілі, але самі початки планувались статися на чомусь "екзотичнішому". Шоб не робити розробницьких рішень, нахилених в бік очевидно переважної архітектури, шоб не нашкодити портованості. Тож армівські ОПК бачились як чудовий кандидат для початку. З застрибуванням в x86 так скоро, як буде видно можливість параллельного розробляння, адже не початок з екзотики, а саме параллельне розробляння є ключовим фактором уникнення однобічних, "перекошених" рішень.

Також, того ж місяця, я купив iMac G5. Навіть попри очевидну авантюрність цього задуму, було приємно мати таку різноманітність. Особливо пам'ятаючи, шо NT починалася саме так — цілячи купу RISC процесорів, серед переважного x86. А 2016-го, в мене з'явився mips, подарований мені доброю людиною, тоді працівником Imagination, — Александру Войкою (Alexandru Voica). Шо було надзвичайно мило й бажано.

Вони, Imagination, купили mips десь в 2013-му році, і очевидно мали намір зробити з ним серйозну конкуренцію arm-у на мобільному сеґменті. В рамках цієї мети, вони запустили різні ініціативи (пам'ятаю за таку purpl коаліцію чи альянс чи якось так) і, також випустили mips-івський ОПК, Mips Creator CI20, десь в 2014-му або на початку 2015-го, який мав стати робочим майданчиком для розробників, в першу чергу на андроїді. Плата запалила інтерес у відповідних колах. За неї почали писати в різних статтях і блогах. Я теж побачив такі статті, і, звичайно, схотів її купити. Але швидко виявилось, шо в Україну вона не доставляється — ішов 2015-й рік, другий рік, як росія розпочала втілювати свої давні, мерзенні плани з захоплення України назад в свої лабета, другий рік агресії, коли всім (хто хотів) стало видно, чим росія справді є...

Я залишав в коментарях до таких статей свої незадоволені зітхання з приводу недоступности і, одного разу, восени 2015-го, коло мого дня народження, отримав листа від Александру, який повідомляв, шо вони мали видалити мій коментар (цього разу він, напевно, був на ресурсі Imagination), через "profanity", яка там заборонена, але, також, він додавав, шо хотів би надіслати мені плату. Тут треба додати, шо йому довелося поморочити голову з відправленням, навіть Королівська Пошта (Британії) мала тоді проблеми з довезенням в Україну; він зміг послати плату лише з 3-го разу. А мені вистачило ще нахабства питати чи не забув він за неї (бо не було нічого чути від нього). Так, навесні 2016-го, я отримав бажану mips ціль. Того mips займає особливе місце в моєму серці. І знову, NT власне почала розкручуватися на mips-і. Після того, як той інтелівський RISC чип виявився проблематичним для цього (якшо я пам'ятаю правильно, були серйозні затримки з його випуском і, як наслідок, — доступністю).

Також, парк поповнився 64 бітними армівськими машинами. Тут треба трохи за номенклатуру. Є такі, майже завжди андроїдні (нажаль), компутерні апарати, які призначені для приєднання до телевізора, і які перетворюють його з звичайного телевізора, який просто є великим монітором з дистанційкою, в т. зв. "розумний" один, даючи йому доступ до Інтернету, ігр, локальних сховищ з фільмами й рештою медій і загалом, даючи те, шо маленький армівський міні ПК на андроїді може дати і який в англомовній літературі називають або Set Top Box (STB) або On The Top (OTT), а ми називатимемо Медійний Міні Компутер (ММК). Власне правильніше мабуть було б не за порозумнішання телевізора тут балакати, а за використання ПК як медійного інструменту для оселі. Інструменту, який використовує телевізор як відповідний потребі монітор.

Так от, в рамках наповнення парку таким очікуваним 64 бітним армом, я купив, на аліекспресі, серпня 2015-го, за 64$, такий ММК. Ішов він без ознак брендового імени і з доволі скромним модельним іменем CSA90, я його назвав Чортиком, через антену і моє специфічне ставлення до андроїда, який був намальований на кришці корпусу. Пізніше, в квітні 2016-го, була куплена Pine64+ плата. В кінці 2017-го, була куплена Banana Pi M2 Ultra плата (тут процесор 32 бітний) і Rock64, в липні 2018-го. Нарешті, наприкінці 2020-го, щедра душа Том К'юбі, Tom Cubie, (так, той самий, хто розробив перші плати лінійки Cubieboard) з Радхи, Radxa, подарував мені чудову плату Rock Pi 4B, в її максимальній конфігурації — 4ГБ ОЗП і додавши 32ГБ eMMC модуль. Так я отримав таку довгоочікувану RK3399 плату.

Нижче йде список первинного цільового (тестового) парку. Він складається з згаданих плат а також нової ASRock x86 ПК плати, купленої десь в 2016-му як заміну для старішої материнської плати Asus, з приблизно 2001 ‐ 2002, на запасному ПК, взятому в родичів. Ця ASRock плата, оборудувана потужним 3 ГГц-ним Intel Core 2 Duo E8400 процесором, відтоді розглядалась як цільова машина для x86:

ASRock ПК в списку був єдиною "справжньозалізною" (не віртуальною) x86 машиною в парку. Але вона не мала блоку живлення, тож стояла без діла. І, нажаль, вона не вміла Uefi, яке планувалося для Ант бути основним платформним ПЗ (ППЗ, англ. Firmware, див. далі за це). Тут слід нагадати, шо x86 не була спочатку в першій лінії цілей. Mips Creator CI20 був єдиною mips-івською машиною, вона мала 32-бітний, двоядерний ЦП, на частоті 1,2 ГГц. Аймаковий процесор був 64 бітним, одноядерним. Це були цікаві цілі і мання різноманіття цільових архітектур було саме по собі цікавим, як було сказано вище, але брак компіляторів, здатних збирати образи в PE форматі, був серйозною перешкодою. Тим не менш, я мав досвід програмування на "голому залізі" на mips машині і продовжував сподіватися, шо я зможу вирішити проблему з компіляторами, тож не закидав ті цілі (шкода, шо власники mips, на той час якась китайська безлика контора, не мали таких самих намірів шодо архітектури — вони купили її просто шоб закрити одразу).

А потім війна постукала в наші двері. Знову... Як вже було згадано вище, російські потвори почали вторгнення ще в кінці 2013-го, а 24-го лютого 2022-го, вони пішли повномасштабною війною. Протягом жовтня 2022-го до лютого 2023-го, російська атака на Бахмут перетворила наш дім в ці руїни і всі плати, які я купив або які мені подарували до 2022-го, були втрачені, разом з моїм основним робочим компутером "Другом". Всі вони залишилися в нашій рідній квартирі, в 5-ти поверховому будинку на Опитній, тихому передмісті на півдні Бахмута, з якого нам довелося швидко тікати 13-го квітня 2022-го, через ризик бути вбитими, який стрімко наростав (обстріли "Ураганами" стали буденним явищем). За більше, ніш рік біснуватих московитських атак, дім було зруйновано, разом з усім Бахмутом. Все залишилось там, нам лишилась пам'ять. Єдині машини, які я маю зараз (липень 2023-го) і на яких можу тестувати проєкт суть 2 робочих/домашніх ноутбуки — Іридій і Галій (дивіться тут про кодові імена машин. Всі втрачені машини позначені в списку і таблиці відповідно. Список цільових архітектур був зменшений до x64 і arm64. Цільовий парк як на липень 2023-го складається з 2-х згаданих ноутбуків і віртуальних машин, наданих емуляторами Qemu і Virtual Box, для згаданих архітектур.

Перед тим, як звузити список підтримуваних архітектур, був період, коли я розглядав mips-івські чипи, які можна було знайти в сучасних ретро ігрових ручних (handheld) консолях. Якось я дізнався, шо існує багато таких консолей, зроблених з дуже схожими процесорами, від одного виробника (Ingenic). Переважно це був одноядерний jz4770 (Creator CI20 мав jz4780), але також був новіший і таємничий x1830. Він бігав на 1,5 ГГц і міг бути розігнаний до 1,9 ГГц. Game Kiddy 350H, наприклад, використовував саме його. Тож, може, якби була можливість дістати якусь з цих консолей, це було б гарним розширенням парку? Однак, беручи до уваги особливий сценарій використання і формфактор цих платформ, вони б могли бути цілями для такого ж "особливого" порту, шо було б, звичайно, цікаво теж, тим не менш!

Ці балачки за ретроігрові цілі торкаються теми, яка описана на цій сторінці, тож тут лише коротко за це: Ант розробляється не лише для обслуговування ролі настільного компутера. Мобільна роль є також в списку. Настільна роль може бути "основною", але точно не єдиною. Беручи до уваги, наскільки поширеними суть мобільні системи зараз, це було б немудро не звертати уваги на цей сегмент. Ручні ретроігрові пристрої суть ще далі специфікованішою підмножиною мобільного сегменту і цікаві теж. Але mips був закинутий власником, а ми вирішили звузити список підтримуваних архітектур, тож ці думки з приводу mips-івських ручних консолей як цілей, тепер історія. Однак, мобільний сегмент і навіть ретроігрові консолі (тепер вже на базі arm64, такі як Odroid Go) розглядаються.

Балакаючи за "якби була можливість"...

Оскільки проєкт ще не може похизуватися корисністю, просити за донації і очікувати задоволення цього прохання було б наївно. Але я, будучи наївним, таки наваяв сторінку допомоги. Хай буде, за принципом "краще перебдіти, ніж недобдіти", шоб не взівати момент, коли орди охочих помогти проєкту повалять втілювати своє нестримне бажання. Відвідайте її, якшо ваша ласка, для детальнішої інформації за те, як помогти. А нижче додається список бажання (неактуальні записи позначені відповідно), який показує, шо за машини ми хотіли мати в парку або досі хочемо:


Цільове середовище ППЗ

Термінологія

Ми називатимемо те, шо англійська термінологія називає "firmware" "платформним програмним забезпеченням" і використовуватимемо абревіатуру "ППЗ" для цього. Чого? Того шо "прошивка" — це убога калька, яка взагалі нічого не каже про те, шо мала б називати, це нонсенс, та ще й зідраний з московської. Цілком розумію, шо термін ППЗ теж не сяє в плані описальности, але принаймні він намагається і це не безглузде запозичення, яке саме є несусвітною калькою "фірмварі", яка, д.р. теж вельми невдала як термін — твердий/ригідний товар/виріб/посуд? Хоча й зрозуміло, шо його винахідники хотіли сказати, та все ж, термін нікудишній. "Платформне ПЗ", "платформний код" і рятівне скорочення — "ППЗ" виглядають в цьому ряду не так вже й пагано.

x86

Цільове середовище ППЗ — в першу чергу UEFI. Старе BIOS також розглядається, однак воно суттєво втратило актуальність станом на 2023-й. Підтримувана бітність на x86 є лише 64 біти, того шо x86 перейшла на них дуже давно. Погодьтесь, 32 біти не здаються актуальними на цій архітектурі зараз, всі x86 процесори, зроблені за останні 15 років суть 64 бітними. Але намір є робити Ант таким портабельним, як тільки можливо, тож, пізніше, підтримка 32 бітів може бути додана тими, хто цього бажає.

arm

Цільове середовище ППЗ є в першу чергу UEFI, чи то як edk2 чи uboot чи будь яка інша сумісна імплементація. Голе середовище uboot, без якої небудь функціональности, виставленої для вантажника, було відкинуте як шлях в нікуди ще в 2020-му, хоча певна робота зі спроб його використовувати (мучаючись з тими go, bootm та booti командами) була. Результатами стали — додавання в досвід програмування голого заліза і розуміння, шо голий убут — це просто лодарь лінукса, а не фірмваря і шо треба переходити вже й на arm-і на UEFI, підтримка якого в uboot-і значно покращилась на той момент.

Спочатку, для arm-у, як видно з тоді доступних ОПК, існувала суміш 32 і 64 бітних машин, шо показувало первинний намір підтримувати обидві бітності. Але пізніше, все більше ставало ясно, шо 32 біти на arm-і втрачають актуальність, точно як на x86. Не дивлячись на це, я продовжував підтримувати arm32 цілі, збирав і тестував код на них, хоча факт втрати актуальности цією версією був таки дискомфортним. Нарешті, після втрати початкового, назбираного за роки цільового парку, я вилучив arm32 з списку підтримки.

Інші (історичне)

Для mips машини, "ППЗ" був голий uboot, а для iMac-а — OpenFirmware. Не було 64 бітної mips машини, як вже згадувалось вище. Шодо iMac-у, його ЦП був 64 бітним, але моноблок мав лише 512 МБ пам'яти. Оскільки на ppc (як і на mips-і), ви маєте однаково (багато) регістрів загального призначення на обох бітностях, використання 64 бітного режиму лише б тиснуло на кеші процесора. Думка була така: хто знає, ppc є найменш дослідженим полем, це не перша ціль, подивимось пізніше. "Пізніше" показало ці цілі зниклими в руїнах війни...

Коротка ретроспектива

Спочатку, першими цільовими архітектурами були arm та mips, але з усвідомленням, шо відсутність підтримки PE в компіляторі для mips є проблемою, яка не дає писати ОС на цю архітектуру, замість неї, x86 була додана в першу лінію. Найбільше уваги приділялось arm64, тут мається на увазі читання мануалів й міркування, ним наведені, далі йшла arm32, а тоді x86. Але, тоді arm32 була відкинута. "Популярна" й "перспективна" riscv розглядалася для включення в цільовий набір, принаймні на майбутнє, але аргументи з переліку внизу заперечили це. Вони, д.р. і досі в силі:

  1. Нема жодної цільової машини в парку, крім дуже обмеженої Qemu-ївської virt машини.
  2. Так само як і для mips (і ppc д.р. теж), нема PE підтримки в компіляторах. І навіть не дивлячись на те, шо я з часом написав утиліту PeGen (riscv був першим д.р.), яка транслює ELF в PE, в т.ч. дбаючи і про генерацію базових релокацій, навіть цього недостатньо, бо це не вирішує проблеми браку підтримки __declspec(dllimport). Її додавання вимагає змін в кодовому генераторі компілятора, — нетривіальне завдання, явно поза нашими можливостями, покишо.
  3. Нарешті, нема достатньої кількости часу для однієї особи взяти цю архітектуру на борт, особливо беручи до уваги, той демотиваційний факт, шо архітектура не сяє так сильно в реальності, як вона робе в розповідях фанів, гляньте наприклад на те, яким жалюгідним є наявний парк.

Тож, як на 2023-й, riscv не розглядається як ціль. Однак, це може змінитися, стань вона справді привабливою, практичною і доступною для роботи з нею.


В кінці секції, подам деякі найменувальні домовленості, для уникнення повторень довгих імен та інших спантеличень, отже:

І ще, для економії місця, ничже дається список імен для тестових машин з цільового парку, того шо, дурість чи ні, але писати шоразу "Beagle Bone Black" або "та ASRock x64 плата" замість Муран чи Сірко не надто зручно, тож даю імена. Старатимусь писати їх стилізовано частіше, як у щойно наведених прикладах і даватиму посилання на цю секцію в документації, резонно часто:

Список нижче — це не зовсім машини з парку, це робочі або домашні машини, але іноді, вони використовуються (обережно) для тестів:


Долі, подаємо таблиці про залучені машини, які показуватимуть деякі їхні функціональні якості.

Ім'я машини Чипсет (СнЧ), Виробник Імплементація ЦП Версія архітектури, бітів Число ядер Макс. частота МГц Тип ОЗП Розмір ОЗП ГПО Прим.
ASRock G41C-GS-R2.0 Core Duo 2 E8400, G41, ICH7, Intel Wolfdale x64, 64 2 3000 DDR2 2 ГБ Intel GMA X4500 втрачена в зруйнованому домі
Beagle Bone Black Sitara am3358, TI Cortex-A8 armv7, 32 1 1000 DDR3L 512 МБ PowerVR SGX530 втрачена в зруйнованому домі
Cubieboard 2 a20, Allwinner Cortex-A7 2 1008 DDR3? 1 ГБ Mali400 MP2 втрачена в зруйнованому домі
Banana Pi M2 Ultra r40, Allwinner 4 1200 DDR3? 2 ГБ втрачена в зруйнованому домі
Pine64+ a64, Allwinner Cortex-A53 armv8, 64 4 1125 DDR3L 2 ГБ втрачена в зруйнованому домі
CSA 90 rk3368, Rockchip (4 + 4)1 1600? + 1400? DDR3? 1 ГБ PowerVR G6110 втрачена в зруйнованому домі
Rock64 rk3328, Rockchip 4 1300 LPDDR3 4 ГБ Mali450 MP2 втрачена в зруйнованому домі
Rock Pi 4B rk3399, Rockchip Cortex-A53 armv8, 64 4 1600? LPDDR4? 4 ГБ Mali T860? втрачена в зруйнованому домі
Cortex-A7221800?
MIPS Creator CI20 jz4780, Ingenic XBurst mips32r2, 32 2 1200 DDR3 1 ГБ PowerVR SGX540 втрачена в зруйнованому домі
iMac G5 PowerPC 975FX, IBM POWER4 POWER4, 64 1 1800 DDR 512 МБ nVidia GeForce FX 5200 Ultra втрачена в зруйнованому домі
1 — big.LITTLE конфігурація з двокластерним ЦП, однак обидва кластери суть "малі" ("little") Cortex-A53 ядра, хоча максимальні частоти й кеші відрізняються.

Таблиця нижче перелічує "не зовсім цільові/тестові" машини, які, все ж, іноді використовуються як такі, через певні причини, переважно, це наші робочі та/або домашні машини.

Ім'я машини Чипсет (СнЧ), Виробник Імплементація ЦП Версія архітектури, бітів Число ядер Макс. частота МГц Тип ОЗП Розмір ОЗП ГПО Прим.
HP ProBook 4530s Core i3 2330M, Intel Sandy Bridge x86, 64 2 (41) 2200 DDR3 8 ГБ GMA, Radeon HD 7470M Робочий/домашній ноутбук
Xiaomi RedmiBook 16 Ryzen 5 4500U, AMD Ryzen 4-те покоління? 6 4??? DDR4? 16 ГБ AMD Vega Робочий/домашній ноутбук
1 — Hyperthreading, шо означає, шо ядро процесора підтримує кілька контекстів потоків, тобто кілька потоків можуть виконуватися на ядрі одночасно (принаймні до певної міри).