Боже, як швидко летить час. Більше року тому я почав тут писати за проєкт. Шо ж, мої невидимі читачі, я хочу вас запевнити, - я не закинув нічого, просто от так швидко летить час. Не виправдовуючись, можна тільки сказати - проєкт складний, він потребує багато навчання, багато роботи, за навчання не дуже роскажеш, ну читаєш ти, ну учиш, і шо, кому це цікаво. І тим паче це не "документування" процесу створення ОС. І все ж, відчуттям, здавалось пройшло ну місяців, ну хай 8, але ж не 14! А я ж думав писати сюди десь принаймні допис в місяць. Але є як є. Час летить, і я постійно нию за це...
Залишивши лірічний відступ, шо я хочу сьогодні розказати. Мабуть варто описати поточний стан речей коротко. Це ж таки щоденник, який відображає історію. Нажаль, я поки шо не розібрався зі структурою цього документування, того хай поки це буде пласка череда дописів. Така стадія, шо нема перед очима структури, я ж не книжку пишу.
Отже, я зупинився в самому кінці попереднього допису на згадці "вивчання старту на армі". Саме вивчення таких речей привело мене до ідеї, яка тепер уже є реальністю в цій роботі. Я не знаю чи мав я тоді її, коли писав попередній допис, але зараз маю.
Коли вивчаєш старт платформи, ти неминуче пересікаєшся з концепціями ROM-коду і фірмварі. Вивчаючи за останню, ти бачиш, наскільки вона схожа з ОС в своїх потребах, цілях, внутрішній будові і інструментах - вона фактично робить те саме (і так само), шо й ОС, тільки в міні-варіанті, - забезпечує підтримку машини, поки ОС не перебере контроль на себе. І далі ти взнаєш, як тобі не подобаєтья у-бут, який так тісно запиляний на лінукс, який такий такий, шо тобі він не подобається загалом. А саме він робить вигляд фірмварі на платах, які ти вибрав як першу хвилю на твій проєкт. До речі за це. З часу минулого допису, я надбав ще дві машини - armv8 rk3368 восьмиядерний OTT коробок з відроїдом - це 64-бітний арм, таки маю його. це я купив в серпні. І, о диво, я таки отримав Mips Creator CI20! І отримав в прямому сенсі, оскільки Imagination так і не продає в Україну, я б не міг його купити і досі. Мені його просто подарували. Просто так, і безплатно доставили (при чому з третього разу - попередні довізники морочили голову і повертали назад). І зробила цей шляхетний крок одна добра людина з Imagination - Alex Voica. Безмежна вдячність йому за цей безпрецендентний своєю бескорисливістю чин і постійні безперервні промені добра в його бік. :) Ця подія заслуговує на окремий допис. Десь в майбутніх "спогадах". Отже тепер я маю такі цільові машини для проєкту:
Beagle Bone Black, TI Sitara AM3358, Cortex-A8, armv7.
Cubieboard 2, Allwinner A20, Cortex-A7, armv7.
Mips Creator CI20, Ingenic JZ4780, XBurst2 (?), mips32r2.
CSA-90 OTT Box, Rockchip RK3368, Cortex-A53, armv8.
iMac g5, ppc64.
і x86 новт.
Історично, я завсіди хотів починати з міпса. Але не міг його знайти. І переключився на арм. Але міпс таки прийшов до мене, і так, "перша хвиля" була визначена. З певним відривом в ній іде сьомий арм, оскільки я вже заглибився в непролазні нетрі його специфікацій від арма. Але й підтримка міпса планується іти паралельно, як же я можу не починати з міпса маючи його зараз на руках, навіть коли я збирався починати з нього не маючи його! Я вже казав, шо через його непагану документованість і однопроцесорність, BBB взято як найпершу машину. А Cubieboard і CI20 ідуть одразу за ним. Це перша хвиля.
Повертаючись до фірмварей. Я вирішив написати свою фірмварю в рамках оцього початкового кроку до ОС. І нехай не здаватиметься, шо головним мотиватором було моє незадоволення у-бутом, насправді я мало знаю за нього, те, шо знаю, мені не подобається, але це все, це просто моя суб*єктивна думка, вона не є визначальною в цьому рішенні. Просто вона вдало поєднується з рештою контексту. Мені всеодно треба вміти "піднімати" машину на рівні фірмварі, розуміти деталі на цьому ж рівні, і треба вчитися в цьому ж середовищі, руслі. Я б міг починати з завантажувача ОС на пристойній фірмварі, але хіба це багато міняє? Навпаки, написавши фірмварю, я не тільки впевнюсь, шо я можу писати ОС, не тільки набуду неоціненного досвіду, але ще й матиму корисне на виході для інших. Я передивлявся за різні фірмварі і не міг не помітити UEFI. А дивився за OpenFirmware, дивився за ARC, і UEFI. І якшо на x86 полі UEFI підтримується зараз нормально, і було б логічно саме починати з UEFI OSLoader'а для твоєї ОС, так само - з завантажувача ОС на OpenFirmware-ному iMac'у, то, на цих міні-PC машинах з моєї першої хвилі, ти не маєш нічого такого пристойного. То чого б не спробувати в рамках твого проєкту принести це туди, з усіх отих вищезагаданих причин-мотивацій? Сама UEFI не запиляна під сервери, як хтось може подумати, і може добре служити на мобільному, вбудованому й інших сегментах, просто її ніхто не приніс туди. От це звичайно мотивує. І скажіть, шо це заважатиме ОС проєкту, авжеж ні! Це грандіозний крок вперед і перевірка себе, а заодно пристойна фірмваря для міні-PC користувачів. З усіма її смаколиками. Які саме вони, мабуть не треба тут писати, ті хто зацікавлені будуть це читати, напевно мають своє сформоване уявлення шодо UEFI. А я розказуючи за мою роботу над нею, розказуватиму і про неї, і по ходу це відкриватиме й її вигоди. Я давно знав, шо моя ОС використовуватиме ACPI, було б дивно не заангажувати сюди й UEFI - ці стандарти створені один для одного. Буквально. Восьмий арм, він наче як збирається мати UEFI підтримку, але ті, хто там крутить те все, здається вирішили, шо воно тільки йтиме на їхній і досі тільки мітичний серверний напрямок. А того всі оці ОТТ коробки і розробницькі ОПК з "малими" 53-ми кортексами, випадають з їхнього, тих чуваків, огляду. Вони думають за UEFI на восьмому армі тільки в контексті серверного майбутнього. Міпс взагалі не має UEFI. А це ще більше мотивує. І так от я й вирішив імплементувати UEFI на кілька машин з сьомим армом, восьмим, і міпсом, покишо тільки 32-бітним, бо 64-бітного на горизонті поки не має. Чого "кілька"? Бо це ж фірмваря. Залежність імплементації від платформи ще більша, ніж в "низів" ОС. Але цей підпроєкт, може жити окремим життям в разі успіху, і якшо хтось доєднається, діапазон підтримки може розширитися. Початково ж, я вирішив писати UEFI на БББ і CI20 (ну важко весь час перемикати розкладку). До речі, шоб не писати весь час модельні імена і їхні малозрозумілі скорочення, та ще й в різних абетках, я, згадуючи тут окремі цільові машини, далі називатиму їх за іменем, яке я їм дав. Бо це зручно. А зацікавлений читач легко засвоє це. Та й машин не густо. xD Отже BBB машину я назвав "муран" - на честь собаки (насправді двох) з села.) Ясно, адже емблема BBB - бігль, собака. Свій Cubieboard 2 назвав аргоном, не знаю чого, я хімік, от чого. Ci20 - йодом, - те саме, шо з аргоном. Плюс ci20 - фіолеотовий (пурпуровий), йод теж фіолетовий, і грецьке слово яке дало ім*я йоду, "йодес", означає "фіолетовий". CSA90 OTT коробок я назвав чортиком - через намальованого на коробоку зеленого андроїда-відроїда, а айМак назвав "блондином". xD Здогадайтесь чого!)
Продвинутий, серйозний читач, збайдужіло і роздратовано читаючи попередній абзац за імена, скаже тут - UEFI не декларує підтримки міпса! Це так, але це не проблема. Наш little endian-ний ci20 (Йод) легко може бути туди втесаний - нема технічних перешкод. Сформульовані для включених архітектур вимоги чітко показують, шо визначити за аналогією таке саме для міпса не є проблемою. Я маю на увазі, шо міпс архітектура, не має ніяких внутрішніх властивостей, які б завадили сформулювати за аналогєю з вже підтриманими архітектурами, вимоги і для неї. Ну а далі, нічого не заважає цій майбутній імплементації запалити інтерес власників стандарту вставити підтримку в специфікацію. :)
Тож, надалі якийсь час тут можна очікувати балакання переважно за UEFI. Оскільки це іще й окремий проєкт, то, можливо, він також і окремо буде висвітлений.
Ідучи далі, щодо роботи з "старту платформи". Всеодно і в UEFI, виділяється такий собі низ - це стартовий код, ініціалізація з боку заліза, це дуже специфічні для платформи речі і асемблер того процесора, який ти програмуєш. Це всюди однаково. І якшо ОС вже прийматиме контроль через встановлений UEFI інтерфейс і зроблену її UEFI-завантажувачем роботу, то це просто переносить найнижньорівневіший код в UEFI, ОС стартуватиме більш стандартно визначено. Всеодно, це тільки про старт, а повна підтримка машини? Отже, - HAL і драйвери від лазіння в специфіку апаратури не втечуть. Бажаючи набути досвіду, мені взагалі не варто тікати від важкої роботи з самого початку, якою ініціаліація апаратури безумовно є. Тож мій вибір логічний і узгоджується з моїм баченням, шо я маю робити, шоб "зробити" те, шо хочу. На платформах з цільових машин, які мають UEFI чи OF, можна буде починати з завантажувача ОС, клієнта відповідної фірмварі. Не варто й казати як досвід імплементування самої UEFI допомагатиме тут. Отже це буде корисно на всіх цільових платформах, а не тільки на цільових для UEFI-імплементації платформах - власне більшість з них стане уефішними платофрмами, а це - добре визначений інтерфейс для ОС на більшости її цілей. Це полегшує розробку самої ОС. І нарешті ще раз - користувачі матимуть добрерозроблений промисловий стандарт замість тієї самодіяльної хаотичної каші. В ідеалі, вони зможуть мастурбувати з своїми лінуксовими компіляціями набагато інтенсивніше з UEFI фірмварним інтерфейсом - грузитимуться і з флешки і з USB жорсткого диску, і з мережі, і з будь якої незліченної GPT партиції! І навіть з сексі диску! xD (SCSI диску, я читаю цю абревіатуру саме так, і це до речі - саме так, як один з розробників того стандарту пропонував її читати офіційно, пуританство решти завадило мабуть, але взятий варіант "сказі" має для україномовного користувача не вельми приємні коннотації. "Сексі" ж рулєз для всіх, чи не так? Отже, наскільки я не знайомий натепер з сексі стандартом, і в руках не тримав, і в очі не бачив, настільки я вже впевнено знаю, шо називатиму його саме так). Ці вищезгадані можливості треба ще імплементувати. Але в UEFI, ти маєш грубезний довідник стандарт, який чітко і детально каже тобі, шо ти маєш зробити і як воно все пов'язано. Плюс я належу до людей, які вірять, шо така продумана (спеціалістами з досвідом) впорядкованість дає добрі плоди, якшо ти стаєш на її ґрунт. А у-бут - це антипод цього. Де там до речі документація на нього? Ні, не рецепт, як мені "сконпілірувать" їхню фігню, а те, як воно влаштоване, які його ідеї, принципи, концепції й інші фільозофічні речі, яких вони дотримуються? Отож.
Чи багато я зараз знаю за UEFI? Ну не мало. Чи багато ще взнавати? О так! Чи багато я написав КОДУ? Мало. Але я вже не просто базікаю і мрію. Я вже роблю. І звичайно, ця писанина призвана в тому числі бути звітом за результати роботи. Отже маючи успіхи, я обов'язково напишу про них тут. А зараз я прийшов розказати про поточний напрямок роботи. Задокументувати еволюцію.