diff --git a/po/uk.po b/po/uk.po index b04c422e..c79aacc9 100644 --- a/po/uk.po +++ b/po/uk.po @@ -971,7 +971,7 @@ msgstr "Драйвер" #: src/SUMMARY.md msgid "Using It" -msgstr "Його використання" +msgstr "Використання" #: src/SUMMARY.md src/bare-metal/aps/exceptions.md msgid "Exceptions" @@ -16986,7 +16986,7 @@ msgstr "Написання мікропрограм для мікроконтр #: src/bare-metal.md msgid "Writing bootloader / kernel code for application processors." -msgstr "Написання коду завантажувача/ядра для процесорів програм." +msgstr "Написання коду завантажувача/ядра для прикладних процесорів." #: src/bare-metal.md msgid "Some useful crates for bare-metal Rust development." @@ -17942,7 +17942,7 @@ msgstr "" #: src/bare-metal/aps.md msgid "Application processors" -msgstr "Процесори додатків" +msgstr "Прикладні процесори" #: src/bare-metal/aps.md msgid "" @@ -17963,8 +17963,8 @@ msgid "" "processors do." msgstr "" "Загалом кажучи, мікроконтролери не мають MMU або кількох рівнів привілеїв " -"(рівні винятків на центральних процесорах Arm, кільця на x86), тоді як " -"процесори додатків мають." +"(рівні виключень на центральних процесорах Arm, кільця на x86), тоді як " +"процесори прикладних програм мають." #: src/bare-metal/aps.md msgid "" @@ -17973,7 +17973,7 @@ msgid "" "hardware, but is designed purely for virtual machines." msgstr "" "QEMU підтримує емуляцію різних машин або моделей плат для кожної " -"архітектури. Плата virt не відповідає жодному конкретному реальному " +"архітектури. Плата 'virt' не відповідає жодному конкретному реальному " "апаратному забезпеченню, а розроблена виключно для віртуальних машин." #: src/bare-metal/aps/entry-point.md @@ -18058,6 +18058,79 @@ msgid "" " b 2b\n" "```" msgstr "" +"```armasm\n" +".section .init.entry, \"ax\"\n" +".global entry\n" +"entry:\n" +" /*\n" +" * Завантаження та застосування конфігурації керування пам'яттю, " +"готової\n" +" * до ввімкнення MMU та кешів.\n" +" */\n" +" adrp x30, idmap\n" +" msr ttbr0_el1, x30\n" +"\n" +" mov_i x30, .Lmairval\n" +" msr mair_el1, x30\n" +"\n" +" mov_i x30, .Ltcrval\n" +" /* Скопіювати підтримуваний діапазон PA у TCR_EL1.IPS. */\n" +" mrs x29, id_aa64mmfr0_el1\n" +" bfi x30, x29, #32, #4\n" +"\n" +" msr tcr_el1, x30\n" +"\n" +" mov_i x30, .Lsctlrval\n" +"\n" +" /*\n" +" * Перевірити все до завершення цього пункту, а потім зробити недійсними " +"всі\n" +" * потенційно застарілі локальні записи TLB до того, як вони почнуть " +"використовуватися.\n" +" */\n" +" isb\n" +" tlbi vmalle1\n" +" ic iallu\n" +" dsb nsh\n" +" isb\n" +"\n" +" /*\n" +" * Налаштувати sctlr_el1 на ввімкнення MMU та кешу і не продовжувати, " +"доки це\n" +" * не буде зроблено.\n" +" */\n" +" msr sctlr_el1, x30\n" +" isb\n" +"\n" +" /* Вимкнути перехоплення доступу з плаваючою комою в EL1. */\n" +" mrs x30, cpacr_el1\n" +" orr x30, x30, #(0x3 << 20)\n" +" msr cpacr_el1, x30\n" +" isb\n" +"\n" +" /* Обнуліть секцію bss. */\n" +" adr_l x29, bss_begin\n" +" adr_l x30, bss_end\n" +"0: cmp x29, x30\n" +" b.hs 1f\n" +" stp xzr, xzr, [x29], #16\n" +" b 0b\n" +"\n" +"1: /* Підготувати стек. */\n" +" adr_l x30, boot_stack_end\n" +" mov sp, x30\n" +"\n" +" /* Налаштування вектора виключень. */\n" +" adr x30, vector_table_el1\n" +" msr vbar_el1, x30\n" +"\n" +" /* Виклик коду Rust. */\n" +" bl main\n" +"\n" +" /* Постійно циклічно чекаємо на переривання. */\n" +"2: wfi\n" +" b 2b\n" +"```" #: src/bare-metal/aps/entry-point.md msgid "" @@ -18077,7 +18150,7 @@ msgid "" msgstr "" "BSS (символ початку блоку, з історичних причин) — це частина об’єктного " "файлу, яка містить статично виділені змінні, які ініціалізуються нулем. Вони " -"пропущені на зображенні, щоб не витрачати місце на нулі. Компілятор " +"пропущені на зображенні, щоб не витрачати місце на зайві нулі. Компілятор " "припускає, що завантажувач подбає про їх обнулення." #: src/bare-metal/aps/entry-point.md @@ -18103,10 +18176,10 @@ msgid "" "generating unaligned accesses, so it should be fine in this case, but this " "is not necessarily the case in general." msgstr "" -"Невирівняні доступи призведуть до помилок. Ми створюємо код Rust для цілі " +"Невирівняні доступи призведуть до помилки. Ми створюємо код Rust для цілі " "`aarch64-unknown-none`, яка встановлює `+strict-align`, щоб запобігти " "створенню компілятором невирівняних доступів, тому в цьому випадку це має " -"бути добре, але це не обов’язково так загалом." +"бути гаразд, але це не обов’язково так загалом." #: src/bare-metal/aps/entry-point.md msgid "" @@ -18118,13 +18191,14 @@ msgid "" "is cleaned or the VM enables the cache. (Cache is keyed by physical address, " "not VA or IPA.)" msgstr "" -"Якщо він працював у віртуальній машині, це може призвести до проблем " -"узгодженості кешу. Проблема полягає в тому, що віртуальна машина звертається " -"до пам’яті безпосередньо з вимкненим кеш-пам’яттю, тоді як хост має кешовані " -"псевдоніми для тієї самої пам’яті. Навіть якщо хост не має явного доступу до " +"Якщо це було запущено у віртуальній машині, це може призвести до проблеми з " +"узгодженістю кешу. Проблема полягає в тому, що віртуальна машина звертається " +"до пам'яті безпосередньо з вимкненим кешем, в той час як хост має кешовані " +"псевдоніми до тієї ж пам'яті. Навіть якщо хост не має явного доступу до " "пам’яті, спекулятивні доступи можуть призвести до заповнення кешу, а потім " "зміни з того чи іншого будуть втрачені, коли кеш буде очищено або віртуальна " -"машина ввімкне кеш. (Кеш використовується фізичною адресою, а не VA чи IPA.)" +"машина ввімкне кеш. (Кеш використовується за фізичною адресою, а не VA чи " +"IPA.)" #: src/bare-metal/aps/entry-point.md msgid "" @@ -18134,16 +18208,16 @@ msgid "" "memory layout that QEMU uses." msgstr "" "Для спрощення ми просто використовуємо жорстко закодовану таблицю сторінок " -"(див. `idmap.S`), яка ідентифікує перший 1 ГіБ адресного простору для " +"(дивиться `idmap.S`), яка ідентифікує перший 1 ГіБ адресного простору для " "пристроїв, наступний 1 ГіБ для DRAM і ще 1 ГіБ вище для інших пристроїв. Це " -"відповідає макету пам’яті, який використовує QEMU." +"відповідає розміщенню пам'яті, яке використовує QEMU." #: src/bare-metal/aps/entry-point.md msgid "" "We also set up the exception vector (`vbar_el1`), which we'll see more about " "later." msgstr "" -"Ми також встановили вектор винятків (`vbar_el1`), про який ми розповімо " +"Ми також встановили вектор виключень (`vbar_el1`), про який ми розповімо " "більше пізніше." #: src/bare-metal/aps/entry-point.md @@ -18152,72 +18226,74 @@ msgid "" "(EL1). If you need to run at a different exception level you'll need to " "modify `entry.S` accordingly." msgstr "" -"Усі приклади цього дня припускають, що ми будемо працювати на рівні винятку " -"1 (EL1). Якщо вам потрібно запустити на іншому рівні винятку, вам потрібно " -"буде відповідно змінити `entry.S`." +"Усі приклади цього дня припускають, що ми будемо працювати на рівні " +"виключення 1 (EL1). Якщо вам потрібно запустити на іншому рівні виключення, " +"вам потрібно буде відповідно змінити `entry.S`." #: src/bare-metal/aps/inline-assembly.md msgid "Inline assembly" -msgstr "Внутрішнє складання" +msgstr "Вбудований асемблер" #: src/bare-metal/aps/inline-assembly.md -#, fuzzy msgid "" "Sometimes we need to use assembly to do things that aren't possible with " "Rust code. For example, to make an HVC (hypervisor call) to tell the " "firmware to power off the system:" msgstr "" -"Іноді нам потрібно використовувати збірку, щоб робити те, що неможливо з " -"кодом Rust. Наприклад, зробити" +"Іноді нам потрібно використовувати асемблер для того, щоб робити речі, які " +"неможливо зробити за допомогою коду на Rust. Наприклад, зробити HVC (виклик " +"гіпервізора), щоб сказати прошивці вимкнути систему:" #: src/bare-metal/aps/inline-assembly.md msgid "" "// Safe because this only uses the declared registers and doesn't do\n" " // anything with memory.\n" msgstr "" +"// Безпечно, тому що тут використовуються тільки оголошені регістри\n" +" // і нічого не робиться з пам'яттю.\n" #: src/bare-metal/aps/inline-assembly.md msgid "\"hvc #0\"" -msgstr "" +msgstr "\"hvc #0\"" #: src/bare-metal/aps/inline-assembly.md msgid "\"w0\"" -msgstr "" +msgstr "\"w0\"" #: src/bare-metal/aps/inline-assembly.md msgid "\"w1\"" -msgstr "" +msgstr "\"w1\"" #: src/bare-metal/aps/inline-assembly.md msgid "\"w2\"" -msgstr "" +msgstr "\"w2\"" #: src/bare-metal/aps/inline-assembly.md msgid "\"w3\"" -msgstr "" +msgstr "\"w3\"" #: src/bare-metal/aps/inline-assembly.md msgid "\"w4\"" -msgstr "" +msgstr "\"w4\"" #: src/bare-metal/aps/inline-assembly.md msgid "\"w5\"" -msgstr "" +msgstr "\"w5\"" #: src/bare-metal/aps/inline-assembly.md msgid "\"w6\"" -msgstr "" +msgstr "\"w6\"" #: src/bare-metal/aps/inline-assembly.md msgid "\"w7\"" -msgstr "" +msgstr "\"w7\"" #: src/bare-metal/aps/inline-assembly.md msgid "" "(If you actually want to do this, use the [`smccc`](https://crates.io/crates/" "smccc) crate which has wrappers for all these functions.)" msgstr "" -"(Якщо ви справді хочете це зробити, скористайтеся ящиком [`smccc`](https://" +"(Якщо ви справді хочете це зробити, скористайтеся крейтом [`smccc`](https://" "crates.io/crates/smccc), у якому є оболонки для всіх цих функцій.)" #: src/bare-metal/aps/inline-assembly.md @@ -18227,8 +18303,8 @@ msgid "" "implemented by EL3 firmware and hypervisors on many systems." msgstr "" "PSCI — це Arm Power State Coordination Interface, стандартний набір функцій " -"для керування станами живлення системи та ЦП, серед іншого. Він реалізований " -"прошивкою EL3 і гіпервізорами на багатьох системах." +"для керування станами живлення системи та CPU, серед іншого. Він " +"реалізований прошивкою EL3 і гіпервізорами на багатьох системах." #: src/bare-metal/aps/inline-assembly.md msgid "" @@ -18238,9 +18314,9 @@ msgid "" "contents of the registers." msgstr "" "Синтаксис `0 => _` означає ініціалізацію реєстру до 0 перед виконанням " -"вбудованого коду складання та ігнорування його вмісту після цього. Нам " -"потрібно використовувати `inout`, а не `in`, оскільки виклик потенційно може " -"знищити вміст реєстрів." +"вбудованого асемблеру та ігнорування його вмісту після цього. Нам потрібно " +"використовувати `inout`, а не `in`, оскільки виклик потенційно може знищити " +"вміст реєстрів." #: src/bare-metal/aps/inline-assembly.md msgid "" @@ -18263,9 +18339,9 @@ msgstr "" "використовуються завантажувачем для передачі таких речей, як покажчик на " "дерево пристроїв. Відповідно до стандартної угоди про виклики aarch64 (це " "те, що вказує `extern \"C\"`), регістри `x0`–`x7` використовуються для " -"перших 8 аргументів, що передаються до функції, тому `entry.S` не не " -"потрібно робити нічого особливого, крім того, щоб переконатися, що він не " -"змінює ці регістри." +"перших 8 аргументів, що передаються до функції, тому `entry.S` не потрібно " +"робити нічого особливого, окрім як переконатися, що він не змінює ці " +"регістри." #: src/bare-metal/aps/inline-assembly.md msgid "" @@ -18277,7 +18353,7 @@ msgstr "" #: src/bare-metal/aps/mmio.md msgid "Volatile memory access for MMIO" -msgstr "Доступ до енергозалежної пам'яті для MMIO" +msgstr "Здійснення непостійного доступу до пам'яті для MMIO" #: src/bare-metal/aps/mmio.md msgid "Use `pointer::read_volatile` and `pointer::write_volatile`." @@ -18320,7 +18396,7 @@ msgid "" "this is unsound. Whenever a reference exist, the compiler may choose to " "dereference it." msgstr "" -"Деякі існуючі ящики для непостійного доступу до апаратного забезпечення " +"Деякі існуючі крейти для непостійного доступу до апаратного забезпечення " "містять посилання, але це нерозумно. Кожного разу, коли існує посилання, " "компілятор може вирішити розіменувати його." @@ -18346,7 +18422,7 @@ msgstr "" #: src/bare-metal/aps/uart.md msgid "/// Minimal driver for a PL011 UART.\n" -msgstr "" +msgstr "/// Мінімальний драйвер для PL011 UART.\n" #: src/bare-metal/aps/uart.md src/bare-metal/aps/better-uart/driver.md msgid "" @@ -18361,32 +18437,43 @@ msgid "" "process\n" " /// as device memory and not have any other aliases.\n" msgstr "" +"/// Створює новий екземпляр драйвера UART для пристрою PL011\n" +" /// за заданою базовою адресою.\n" +" ///\n" +" /// # Безпека\n" +" ///\n" +" /// Задана базова адреса повинна вказувати на 8 керуючих регістрів MMIO " +"пристрою \n" +" /// PL011, які повинні бути відображені в адресному просторі процесу\n" +" /// як пам'ять пристрою і не мати ніяких інших псевдонімів.\n" #: src/bare-metal/aps/uart.md src/bare-metal/aps/better-uart/driver.md #: src/exercises/bare-metal/rtc.md msgid "/// Writes a single byte to the UART.\n" -msgstr "" +msgstr "/// Записує один байт до UART.\n" #: src/bare-metal/aps/uart.md src/bare-metal/aps/better-uart/driver.md #: src/exercises/bare-metal/rtc.md msgid "// Wait until there is room in the TX buffer.\n" -msgstr "" +msgstr "// Чекаємо, поки не звільниться місце в буфері TX.\n" #: src/bare-metal/aps/uart.md msgid "" "// Safe because we know that the base address points to the control\n" " // registers of a PL011 device which is appropriately mapped.\n" msgstr "" +"// Безпечно, тому що ми знаємо, що базова адреса вказує на регістри\n" +" // керування пристрою PL011, які відповідним чином відображені.\n" #: src/bare-metal/aps/uart.md src/bare-metal/aps/better-uart/driver.md #: src/exercises/bare-metal/rtc.md msgid "// Write to the TX buffer.\n" -msgstr "" +msgstr "// Записуємо в буфер TX.\n" #: src/bare-metal/aps/uart.md src/bare-metal/aps/better-uart/driver.md #: src/exercises/bare-metal/rtc.md msgid "// Wait until the UART is no longer busy.\n" -msgstr "" +msgstr "// Чекаємо, поки UART більше не буде зайнято.\n" #: src/bare-metal/aps/uart.md msgid "" @@ -18397,12 +18484,12 @@ msgid "" "it is always safe to call `write_byte` later because we can assume the " "necessary preconditions." msgstr "" -"Зауважте, що `Uart::new` небезпечний, тоді як інші методи безпечні. Це " -"пов’язано з тим, що якщо виклик `Uart::new` гарантує виконання вимог безпеки " -"(тобто, що існує лише один екземпляр драйвера для даного UART, і нічого " -"іншого не створює псевдонімів для його адресного простору), він завжди " -"безпечно викликати `write_byte` пізніше, оскільки ми можемо припустити " -"необхідні попередні умови." +"Зауважте, що `Uart::new` є небезпечним, тоді як інші методи є безпечними. Це " +"пов'язано з тим, що доки викликач `Uart::new` гарантує, що його вимоги " +"безпеки дотримано (тобто, що існує лише один екземпляр драйвера для даного " +"UART, і ніщо інше не змінює його адресний простір), доти безпечно викликати " +"`write_byte` пізніше, оскільки ми можемо припустити, що виконано необхідні " +"передумови." #: src/bare-metal/aps/uart.md msgid "" @@ -18421,19 +18508,19 @@ msgid "" "number of places." msgstr "" "Це загальний шаблон для написання безпечних оболонок небезпечного коду: " -"переміщення тягаря доказу надійності з великої кількості місць на меншу " +"перенесення тягаря доведення правильності з великої кількості місць на меншу " "кількість місць." #: src/bare-metal/aps/uart/traits.md msgid "More traits" -msgstr "Більше рис" +msgstr "Більше трейтів" #: src/bare-metal/aps/uart/traits.md msgid "" "We derived the `Debug` trait. It would be useful to implement a few more " "traits too." msgstr "" -"Ми вивели ознаку `Debug`. Також було б корисно реалізувати ще кілька ознак." +"Ми вивели трейт `Debug`. Також було б корисно реалізувати ще кілька трейтів." #: src/bare-metal/aps/uart/traits.md src/exercises/bare-metal/rtc.md #: src/exercises/bare-metal/solutions-afternoon.md @@ -18441,6 +18528,8 @@ msgid "" "// Safe because it just contains a pointer to device memory, which can be\n" "// accessed from any context.\n" msgstr "" +"// Безпечно, тому що це всього лише вказівник на пам'ять пристрою, до якого\n" +"// можна отримати доступ з будь-якого контексту.\n" #: src/bare-metal/aps/uart/traits.md msgid "" @@ -18470,19 +18559,19 @@ msgid "" "read. Plus, some of them are bit fields which would be nice to access in a " "structured way." msgstr "" -"PL011 насправді має [багато більше регістрів](https://developer.arm.com/" +"PL011 насправді має [набагато більше регістрів](https://developer.arm.com/" "documentation/ddi0183/g/programmers-model/summary-of-registers), і додавання " -"зсувів для створення вказівників для доступу до них є помилкою. схильний і " -"важко читається. Крім того, деякі з них є бітовими полями, до яких було б " -"добре мати структурований доступ." +"зміщень до вказівників для конструювання доступу до них може призвести до " +"помилок, і читається важко. Крім того, деякі з них є бітовими полями, до " +"яких було б добре мати структурований доступ." #: src/bare-metal/aps/better-uart.md msgid "Offset" -msgstr "Зсув" +msgstr "Зміщення" #: src/bare-metal/aps/better-uart.md msgid "Register name" -msgstr "Зареєструвати ім'я" +msgstr "Ім'я регістру" #: src/bare-metal/aps/better-uart.md msgid "Width" @@ -18494,7 +18583,7 @@ msgstr "0x00" #: src/bare-metal/aps/better-uart.md msgid "DR" -msgstr "ДОКТОР" +msgstr "DR" #: src/bare-metal/aps/better-uart.md msgid "12" @@ -18526,7 +18615,7 @@ msgstr "0x20" #: src/bare-metal/aps/better-uart.md msgid "ILPR" -msgstr "ІЛПР" +msgstr "ILPR" #: src/bare-metal/aps/better-uart.md msgid "0x24" @@ -18534,7 +18623,7 @@ msgstr "0x24" #: src/bare-metal/aps/better-uart.md msgid "IBRD" -msgstr "МБРР" +msgstr "IBRD" #: src/bare-metal/aps/better-uart.md msgid "16" @@ -18590,7 +18679,7 @@ msgstr "0x3c" #: src/bare-metal/aps/better-uart.md msgid "RIS" -msgstr "РІС" +msgstr "RIS" #: src/bare-metal/aps/better-uart.md msgid "0x40" @@ -18618,55 +18707,55 @@ msgstr "DMACR" #: src/bare-metal/aps/better-uart.md msgid "There are also some ID registers which have been omitted for brevity." -msgstr "Є також деякі ідентифікаційні реєстри, які були опущені для стислості." +msgstr "Є також деякі ID регістри, які були пропущені для стислості." #: src/bare-metal/aps/better-uart/bitflags.md msgid "" "The [`bitflags`](https://crates.io/crates/bitflags) crate is useful for " "working with bitflags." msgstr "" -"Ящик [`bitflags`](https://crates.io/crates/bitflags) корисний для роботи з " +"Крейт [`bitflags`](https://crates.io/crates/bitflags) корисний для роботи з " "бітовими флагами." #: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md msgid "/// Flags from the UART flag register.\n" -msgstr "" +msgstr "/// Прапорці з регістру прапорів UART.\n" #: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md msgid "/// Clear to send.\n" -msgstr "" +msgstr "/// Очистити для відправки.\n" #: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md msgid "/// Data set ready.\n" -msgstr "" +msgstr "/// Набір даних готовий.\n" #: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md msgid "/// Data carrier detect.\n" -msgstr "" +msgstr "/// Визначення носія даних.\n" #: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md msgid "/// UART busy transmitting data.\n" -msgstr "" +msgstr "/// UART зайнятий передачею даних.\n" #: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md msgid "/// Receive FIFO is empty.\n" -msgstr "" +msgstr "/// FIFO отримання порожній.\n" #: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md msgid "/// Transmit FIFO is full.\n" -msgstr "" +msgstr "/// FIFO передачі заповнено.\n" #: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md msgid "/// Receive FIFO is full.\n" -msgstr "" +msgstr "/// FIFO отримання заповнено.\n" #: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md msgid "/// Transmit FIFO is empty.\n" -msgstr "" +msgstr "/// FIFO передачі порожній.\n" #: src/bare-metal/aps/better-uart/bitflags.md src/exercises/bare-metal/rtc.md msgid "/// Ring indicator.\n" -msgstr "" +msgstr "/// Індикатор кільця.\n" #: src/bare-metal/aps/better-uart/bitflags.md msgid "" @@ -18684,7 +18773,7 @@ msgstr "Кілька регістрів" msgid "" "We can use a struct to represent the memory layout of the UART's registers." msgstr "" -"Ми можемо використовувати структуру для представлення макета пам’яті " +"Ми можемо використовувати структуру для представлення розташування пам’яті " "регістрів UART." #: src/bare-metal/aps/better-uart/registers.md @@ -18696,11 +18785,11 @@ msgid "" "(among other things) reorder fields however it sees fit." msgstr "" "[`#[repr(C)]`](https://doc.rust-lang.org/reference/type-layout.html#the-c-" -"representation) повідомляє компілятору розмістити поля структури в порядку, " -"дотримуючись тих самих правил, що й C. Це необхідно для того, щоб наша " -"структура мала передбачуваний макет, оскільки представлення Rust за " -"замовчуванням дозволяє компілятору (між іншим) змінювати порядок полів, як " -"він вважає за потрібне." +"representation) каже компілятору розмістити поля структури в потрібному " +"порядку, дотримуючись тих самих правил, що й C. Це необхідно для того, щоб " +"наша структура мала передбачуваний порядок розміщення, оскільки " +"представлення Rust за замовчуванням дозволяє компілятору (між іншим) " +"змінювати порядок полів, як він вважає за потрібне." #: src/bare-metal/aps/better-uart/driver.md msgid "Now let's use the new `Registers` struct in our driver." @@ -18709,23 +18798,27 @@ msgstr "" #: src/bare-metal/aps/better-uart/driver.md msgid "/// Driver for a PL011 UART.\n" -msgstr "" +msgstr "/// Драйвер для PL011 UART.\n" #: src/bare-metal/aps/better-uart/driver.md src/exercises/bare-metal/rtc.md msgid "" "// Safe because we know that self.registers points to the control\n" " // registers of a PL011 device which is appropriately mapped.\n" msgstr "" +"// Безпечно, тому що ми знаємо, що self.registers вказує на керуючі\n" +" // регістри пристрою PL011, який відповідним чином відображено.\n" #: src/bare-metal/aps/better-uart/driver.md src/exercises/bare-metal/rtc.md msgid "" "/// Reads and returns a pending byte, or `None` if nothing has been\n" " /// received.\n" msgstr "" +"/// Читає і повертає байт очікування, або `None`, якщо нічого не було\n" +" /// отримано.\n" #: src/bare-metal/aps/better-uart/driver.md src/exercises/bare-metal/rtc.md msgid "// TODO: Check for error conditions in bits 8-11.\n" -msgstr "" +msgstr "// TODO: Перевірити на наявність помилок у бітах 8-11.\n" #: src/bare-metal/aps/better-uart/driver.md msgid "" @@ -18738,7 +18831,7 @@ msgstr "" #: src/bare-metal/aps/better-uart/using.md src/bare-metal/aps/logging/using.md msgid "Using it" -msgstr "Використовуючи його" +msgstr "Використання" #: src/bare-metal/aps/better-uart/using.md msgid "" @@ -18746,13 +18839,13 @@ msgid "" "and echo incoming bytes." msgstr "" "Давайте напишемо невелику програму, використовуючи наш драйвер для запису в " -"послідовну консоль і відтворення вхідних байтів." +"послідовну консоль і відлуння вхідних байтів." #: src/bare-metal/aps/better-uart/using.md src/bare-metal/aps/logging/using.md #: src/exercises/bare-metal/rtc.md #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Base address of the primary PL011 UART.\n" -msgstr "" +msgstr "/// Базова адреса основного PL011 UART.\n" #: src/bare-metal/aps/better-uart/using.md src/bare-metal/aps/logging/using.md #: src/exercises/bare-metal/rtc.md @@ -18761,26 +18854,29 @@ msgid "" "// Safe because `PL011_BASE_ADDRESS` is the base address of a PL011 device,\n" " // and nothing else accesses that address range.\n" msgstr "" +"// Безпечно, оскільки `PL011_BASE_ADDRESS` є базовою адресою пристрою " +"PL011,\n" +" // і ніщо інше не має доступу до цього діапазону адресації.\n" #: src/bare-metal/aps/better-uart/using.md src/bare-metal/aps/logging/using.md msgid "\"main({x0:#x}, {x1:#x}, {x2:#x}, {x3:#x})\"" -msgstr "" +msgstr "\"main({x0:#x}, {x1:#x}, {x2:#x}, {x3:#x})\"" #: src/bare-metal/aps/better-uart/using.md msgid "b'\\r'" -msgstr "" +msgstr "b'\\r'" #: src/bare-metal/aps/better-uart/using.md src/async/pitfalls/cancellation.md msgid "b'\\n'" -msgstr "" +msgstr "b'\\n'" #: src/bare-metal/aps/better-uart/using.md msgid "b'q'" -msgstr "" +msgstr "b'q'" #: src/bare-metal/aps/better-uart/using.md msgid "\"Bye!\"" -msgstr "" +msgstr "\"Бувайте!\"" #: src/bare-metal/aps/better-uart/using.md msgid "" @@ -18788,8 +18884,8 @@ msgid "" "function is called from our entry point code in `entry.S`. See the speaker " "notes there for details." msgstr "" -"Як і у прикладі [inline-assembly](../inline-assembly.md), ця функція main " -"викликається з нашого коду точки входу в `entry.S`. Докладніше див. у " +"Як і у прикладі [inline-assembly](../inline-assembly.md), ця функція `main` " +"викликається з нашого коду точки входу в `entry.S`. Докладніше дивиться у " "примітках доповідача." #: src/bare-metal/aps/better-uart/using.md @@ -18805,17 +18901,17 @@ msgid "" "(https://crates.io/crates/log) crate. We can do this by implementing the " "`Log` trait." msgstr "" -"Було б чудово мати можливість використовувати макроси журналювання з ящика " +"Було б чудово мати можливість використовувати макроси журналювання з крейту " "[`log`](https://crates.io/crates/log). Ми можемо зробити це, реалізувавши " -"властивість `Log`." +"трейт `Log`." #: src/bare-metal/aps/logging.md src/exercises/bare-metal/rtc.md msgid "\"[{}] {}\"" -msgstr "" +msgstr "\"[{}] {}\"" #: src/bare-metal/aps/logging.md src/exercises/bare-metal/rtc.md msgid "/// Initialises UART logger.\n" -msgstr "" +msgstr "/// Ініціалізує логгер UART.\n" #: src/bare-metal/aps/logging.md msgid "" @@ -18827,12 +18923,12 @@ msgstr "" #: src/bare-metal/aps/logging/using.md msgid "We need to initialise the logger before we use it." -msgstr "Нам потрібно ініціалізувати реєстратор перед його використанням." +msgstr "Нам потрібно ініціалізувати логгер перед його використанням." #: src/bare-metal/aps/logging/using.md src/exercises/bare-metal/rtc.md #: src/exercises/bare-metal/solutions-afternoon.md msgid "\"{info}\"" -msgstr "" +msgstr "\"{info}\"" #: src/bare-metal/aps/logging/using.md msgid "Note that our panic handler can now log details of panics." @@ -18857,13 +18953,13 @@ msgid "" msgstr "" "AArch64 визначає векторну таблицю винятків із 16 записами для 4 типів " "винятків (синхронний, IRQ, FIQ, SError) із 4 станів (поточний EL із SP0, " -"поточний EL із SPx, нижчий EL із використанням AArch64, нижній EL із " +"поточний EL із SPx, нижчий EL із використанням AArch64, нижчий EL із " "застосуванням AArch32). Ми реалізуємо це в асемблері, щоб зберегти " "непостійні регістри в стеку перед викликом коду Rust:" #: src/bare-metal/aps/exceptions.md msgid "EL is exception level; all our examples this afternoon run in EL1." -msgstr "" +msgstr "EL - це рівень винятків; усі наші приклади сьогодні працюють на EL1." #: src/bare-metal/aps/exceptions.md msgid "" @@ -18879,7 +18975,7 @@ msgid "" "expect any of them to actually happen." msgstr "" "У цьому прикладі ми просто реєструємо виняток і вимикаємо живлення, оскільки " -"ми не очікуємо, що будь-яке з них станеться." +"ми не очікуємо, що будь-що з цього станеться." #: src/bare-metal/aps/exceptions.md msgid "" @@ -18891,12 +18987,11 @@ msgid "" "it in something like a `Mutex` and put it in a static." msgstr "" "Ми можемо розглядати обробники винятків і наш основний контекст виконання " -"більш-менш як різні потоки. [`Надіслати` і `Синхронізувати`](../../" -"concurrency/send-sync.md) керуватимуть тим, чим ми можемо обмінюватися між " -"ними, як і з потоками. Наприклад, якщо ми хочемо поділитися деяким значенням " -"між обробниками винятків та рештою програми, і це `Send`, але не `Sync`, " -"тоді нам потрібно буде загорнути його в щось на зразок `Mutex` і помістити в " -"статика." +"більш-менш як різні потоки. [`Send` і `Sync`](../../concurrency/send-sync." +"md) керуватимуть тим, чим ми можемо обмінюватися між ними, як і з потоками. " +"Наприклад, якщо ми хочемо поділитися деяким значенням між обробниками " +"винятків та рештою програми, і це `Send`, але не `Sync`, тоді нам потрібно " +"буде загорнути його в щось на зразок `Mutex` і помістити у статику." #: src/bare-metal/aps/other-projects.md msgid "[oreboot](https://github.com/oreboot/oreboot)" @@ -18912,14 +19007,15 @@ msgstr "Підтримує x86, aarch64 і RISC-V." #: src/bare-metal/aps/other-projects.md msgid "Relies on LinuxBoot rather than having many drivers itself." -msgstr "Покладається на LinuxBoot, а не на багато драйверів." +msgstr "" +"Покладається на LinuxBoot, замість того, щоб самому мати багато драйверів." #: src/bare-metal/aps/other-projects.md msgid "" "[Rust RaspberryPi OS tutorial](https://github.com/rust-embedded/rust-" "raspberrypi-OS-tutorials)" msgstr "" -"[Навчальний посібник з ОС Rust RaspberryPi](https://github.com/rust-embedded/" +"[Навчальний посібник Rust з ОС RaspberryPi](https://github.com/rust-embedded/" "rust-raspberrypi-OS-tutorials)" #: src/bare-metal/aps/other-projects.md @@ -18936,7 +19032,7 @@ msgid "" "necessarily a good example to copy for production code." msgstr "" "Деякі хитрощі щодо обслуговування кешу та ініціалізації в Rust, не " -"обов’язково хороший приклад для копіювання для робочого коду." +"обов’язково хороший приклад для копіювання для виробничого коду." #: src/bare-metal/aps/other-projects.md msgid "[`cargo-call-stack`](https://crates.io/crates/cargo-call-stack)" @@ -18961,10 +19057,10 @@ msgid "" "generating unaligned accesses so it should be alright, but this is not " "necessarily the case in general." msgstr "" -"Без MMU та кешу невирівняний доступ буде несправним. Він створюється за " -"допомогою `aarch64-unknown-none`, який встановлює `+strict-align`, щоб " +"Без MMU та кешу невирівняні доступи призведуть до помилки. Код створюється " +"за допомогою `aarch64-unknown-none`, який встановлює `+strict-align`, щоб " "запобігти генерації компілятором невирівняних доступів, тому це має бути " -"добре, але це не обов’язково так загалом." +"гаразд, але це не обов’язково так загалом." #: src/bare-metal/aps/other-projects.md msgid "" @@ -18976,14 +19072,14 @@ msgid "" "alright in this particular case (running directly on the hardware with no " "hypervisor), but isn't a good pattern in general." msgstr "" -"Якщо він працював у віртуальній машині, це може призвести до проблем " +"Якщо код працював у віртуальній машині, це може призвести до проблем " "узгодженості кешу. Проблема полягає в тому, що віртуальна машина звертається " -"до пам’яті безпосередньо з вимкненим кеш-пам’яттю, тоді як хост має кешовані " +"до пам’яті безпосередньо з вимкненою кеш-пам’яттю, тоді як хост має кешовані " "псевдоніми для тієї самої пам’яті. Навіть якщо хост явно не звертається до " -"пам’яті, спекулятивні доступи можуть призвести до заповнення кешу, а потім " -"зміни, внесені тим чи іншим, будуть втрачені. Знову ж таки, це нормально в " +"пам’яті, спекулятивні доступи можуть призвести до заповнення кешу, і тоді " +"зміни з одного або іншого боку будуть втрачені. Знову ж таки, це нормально в " "цьому конкретному випадку (працює безпосередньо на апаратному забезпеченні " -"без гіпервізора), але це не дуже хороший шаблон загалом." +"без гіпервізора), але це не дуже гарний шаблон загалом." #: src/bare-metal/useful-crates.md msgid "Useful crates" @@ -18994,7 +19090,7 @@ msgid "" "We'll go over a few crates which solve some common problems in bare-metal " "programming." msgstr "" -"Ми розглянемо кілька ящиків, які вирішують деякі поширені проблеми " +"Ми розглянемо кілька крейтів, які вирішують деякі поширені проблеми " "програмування на голому залізі." #: src/bare-metal/useful-crates/zerocopy.md @@ -19003,7 +19099,7 @@ msgid "" "traits and macros for safely converting between byte sequences and other " "types." msgstr "" -"Ящик [`zerocopy`](https://docs.rs/zerocopy/) (від Fuchsia) надає ознаки та " +"Крейт [`zerocopy`](https://docs.rs/zerocopy/) (від Fuchsia) надає трейти та " "макроси для безпечного перетворення між послідовностями байтів та іншими " "типами." @@ -19013,9 +19109,10 @@ msgid "" "but can be useful for working with structures shared with hardware e.g. by " "DMA, or sent over some external interface." msgstr "" -"Це не підходить для MMIO (оскільки він не використовує незалежне читання та " -"запис), але може бути корисним для роботи зі структурами, спільними з " -"обладнанням, наприклад. через DMA або надіслано через зовнішній інтерфейс." +"Це не підходить для MMIO (оскільки він не використовує непостійні читання та " +"записи), але може бути корисним для роботи зі структурами, спільними з " +"обладнанням, наприклад, з прямим доступом до пам'яті (DMA), або переданими " +"через зовнішній інтерфейс." #: src/bare-metal/useful-crates/zerocopy.md msgid "" @@ -19050,8 +19147,8 @@ msgid "" "dependency.)" msgstr "" "Запустіть приклад із `cargo run` у `src/bare-metal/useful-crates/zerocopy-" -"example/`. (Він не працюватиме на ігровому майданчику через залежність " -"ящика.)" +"example/`. (Він не працюватиме на Rust Playground через залежність від " +"крейту.)" #: src/bare-metal/useful-crates/aarch64-paging.md msgid "" @@ -19059,29 +19156,31 @@ msgid "" "you create page tables according to the AArch64 Virtual Memory System " "Architecture." msgstr "" -"Ящик [`aarch64-paging`](https://crates.io/crates/aarch64-paging) дозволяє " +"Крейт [`aarch64-paging`](https://crates.io/crates/aarch64-paging) дозволяє " "створювати таблиці сторінок відповідно до архітектури системи віртуальної " "пам’яті AArch64." #: src/bare-metal/useful-crates/aarch64-paging.md msgid "// Create a new page table with identity mapping.\n" -msgstr "" +msgstr "// Створити нову таблицю сторінок з відображенням ідентичності.\n" #: src/bare-metal/useful-crates/aarch64-paging.md msgid "// Map a 2 MiB region of memory as read-only.\n" msgstr "" +"// Відобразити область пам'яті розміром 2 MiB як доступну тільки для " +"читання.\n" #: src/bare-metal/useful-crates/aarch64-paging.md msgid "// Set `TTBR0_EL1` to activate the page table.\n" -msgstr "" +msgstr "// Встановити `TTBR0_EL1` для активації таблиці сторінок.\n" #: src/bare-metal/useful-crates/aarch64-paging.md msgid "" "For now it only supports EL1, but support for other exception levels should " "be straightforward to add." msgstr "" -"Наразі він підтримує лише EL1, але підтримку для інших рівнів винятків слід " -"додати просто." +"Наразі він підтримує лише EL1, але підтримка інших рівнів винятків має бути " +"легко додана." #: src/bare-metal/useful-crates/aarch64-paging.md msgid "" @@ -19113,18 +19212,18 @@ msgid "" "space for PCI BARs:" msgstr "" "[`buddy_system_allocator`](https://crates.io/crates/buddy_system_allocator) " -"— це сторонній ящик, який реалізує базовий системний розподільник приятелів. " -"Його можна використовувати як для [`LockedHeap`](https://docs.rs/" +"— це сторонній крейт, який реалізує базовий системний розподільник між " +"друзями. Його можна використовувати як для [`LockedHeap`](https://docs.rs/" "buddy_system_allocator/0.9.0/buddy_system_allocator/struct.LockedHeap.html), " "так і для реалізації [`GlobalAlloc`](https://doc.rust-lang .org/core/alloc/" -"trait.GlobalAlloc.html), щоб ви могли використовувати стандартний ящик " +"trait.GlobalAlloc.html), щоб ви могли використовувати стандартний крейт " "`alloc` (як ми бачили [раніше](../alloc.md)), або для виділення іншого " "адресного простору. Наприклад, ми можемо захотіти виділити простір MMIO для " "шин PCI:" #: src/bare-metal/useful-crates/buddy_system_allocator.md msgid "PCI BARs always have alignment equal to their size." -msgstr "Штуки PCI завжди мають вирівнювання відповідно до їх розміру." +msgstr "Шини PCI завжди мають вирівнювання відповідно до їх розміру." #: src/bare-metal/useful-crates/buddy_system_allocator.md msgid "" @@ -19133,8 +19232,8 @@ msgid "" "dependency.)" msgstr "" "Запустіть приклад із `cargo run` у `src/bare-metal/useful-crates/allocator-" -"example/`. (Він не працюватиме на ігровому майданчику через залежність " -"ящика.)" +"example/`. (Він не працюватиме на Rust Playground через залежність від " +"крейту.)" #: src/bare-metal/useful-crates/tinyvec.md msgid "" @@ -19146,9 +19245,9 @@ msgid "" msgstr "" "Іноді вам потрібне щось, розмір якого можна змінити, наприклад `Vec`, але " "без виділення купи. [`tinyvec`](https://crates.io/crates/tinyvec) надає це: " -"вектор, підкріплений масивом або фрагментом, який може бути статично " -"розміщений або в стеку, який відстежує, скільки елементів використовується " -"та впадає в паніку, якщо ви намагаєтеся використати більше, ніж виділено." +"вектор, підкріплений масивом або зрізом, який може бути статично розміщений " +"або в стеку, який відстежує, скільки елементів використовується та впадає в " +"паніку, якщо ви намагаєтеся використати більше, ніж виділено." #: src/bare-metal/useful-crates/tinyvec.md msgid "" @@ -19172,14 +19271,14 @@ msgid "" msgstr "" "`std::sync::Mutex` та інші примітиви синхронізації з `std::sync` недоступні " "в `core` або `alloc`. Як ми можемо керувати синхронізацією або внутрішньою " -"мінливістю, наприклад, для обміну станом між різними ЦП?" +"мутабельністю, наприклад, для обміну станом між різними CPU?" #: src/bare-metal/useful-crates/spin.md msgid "" "The [`spin`](https://crates.io/crates/spin) crate provides spinlock-based " "equivalents of many of these primitives." msgstr "" -"Ящик [`spin`](https://crates.io/crates/spin) надає еквіваленти багатьох із " +"Крейт [`spin`](https://crates.io/crates/spin) надає еквіваленти багатьох із " "цих примітивів на основі спін-блокування." #: src/bare-metal/useful-crates/spin.md @@ -19193,6 +19292,9 @@ msgid "" "`spin` also has a ticket lock mutex implementation; equivalents of `RwLock`, " "`Barrier` and `Once` from `std::sync`; and `Lazy` for lazy initialisation." msgstr "" +"`spin` також має реалізацію квиткового м'ютексу блокування; еквіваленти " +"`RwLock`, `Barrier` і `Once` з `std::sync`; і `Lazy` для ледачої " +"ініціалізації." #: src/bare-metal/useful-crates/spin.md msgid "" @@ -19200,7 +19302,7 @@ msgid "" "useful types for late initialisation with a slightly different approach to " "`spin::once::Once`." msgstr "" -"Ящик [`once_cell`](https://crates.io/crates/once_cell) також має кілька " +"Крейт [`once_cell`](https://crates.io/crates/once_cell) також має кілька " "корисних типів для пізньої ініціалізації з дещо іншим підходом до `spin::" "once::Once`." @@ -19217,7 +19319,7 @@ msgid "" "with a linker script to produce the binary itself, and then a `raw_binary` " "to convert the ELF to a raw binary ready to be run." msgstr "" -"Щоб створити голий бінарний файл Rust в AOSP, вам потрібно використати " +"Щоб зібрати бінарник Rust в AOSP для голого заліза, вам потрібно використати " "правило `rust_ffi_static` Soong для створення коду Rust, потім `cc_binary` " "зі сценарієм компонування, щоб створити сам бінарний файл, а потім " "`raw_binary` для перетворення ELF у необроблений бінарний файл, готовий до " @@ -19279,9 +19381,9 @@ msgid "" "documentation/ddi0224/c) real-time clock at 0x9010000. For this exercise, " "you should write a driver for it." msgstr "" -"Машина virt QEMU aarch64 має [PL031](https://developer.arm.com/documentation/" -"ddi0224/c) годинник реального часу на 0x9010000. Для цієї вправи ви повинні " -"написати для неї драйвер." +"Віртуальна машина QEMU aarch64 має [PL031](https://developer.arm.com/" +"documentation/ddi0224/c) годинник реального часу за адресою 0x9010000. Для " +"цієї вправи ви повинні написати для неї драйвер." #: src/exercises/bare-metal/rtc.md msgid "" @@ -19289,7 +19391,7 @@ msgid "" "[`chrono`](https://crates.io/crates/chrono) crate for date/time formatting." msgstr "" "Використовуйте його для друку поточного часу на послідовній консолі. Ви " -"можете використовувати ящик [`chrono`](https://crates.io/crates/chrono) для " +"можете використовувати крейт [`chrono`](https://crates.io/crates/chrono) для " "форматування дати/часу." #: src/exercises/bare-metal/rtc.md @@ -19298,8 +19400,8 @@ msgid "" "time, e.g. 3 seconds in the future. (Call [`core::hint::spin_loop`](https://" "doc.rust-lang.org/core/hint/fn.spin_loop.html) inside the loop.)" msgstr "" -"Використовуйте реєстр збігів і статус необробленого переривання, щоб зайняти " -"очікування до заданого часу, наприклад. 3 секунди в майбутньому. (Викличте " +"Використовуйте регістр збігу та необроблений стан переривання для очікування " +"зайнятості до заданого часу, наприклад 3 секунди в майбутньому. (Викличте " "[`core::hint::spin_loop`](https://doc.rust-lang.org/core/hint/fn.spin_loop." "html) усередині циклу.)" @@ -19310,7 +19412,7 @@ msgid "" "docs.rs/arm-gic/) crate to configure the Arm Generic Interrupt Controller." msgstr "" "_Розширення, якщо у вас є час:_ Увімкніть і обробіть переривання, створене " -"збігом RTC. Ви можете використовувати драйвер, наданий у пакеті [`arm-gic`]" +"збігом RTC. Ви можете використовувати драйвер, наданий у крейті [`arm-gic`]" "(https://docs.rs/arm-gic/), щоб налаштувати загальний контролер переривань " "Arm." @@ -19339,12 +19441,12 @@ msgstr "" #: src/exercises/bare-metal/rtc.md #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Base addresses of the GICv3.\n" -msgstr "" +msgstr "/// Базові адреси GICv3.\n" #: src/exercises/bare-metal/rtc.md #: src/exercises/bare-metal/solutions-afternoon.md msgid "\"main({:#x}, {:#x}, {:#x}, {:#x})\"" -msgstr "" +msgstr "\"main({:#x}, {:#x}, {:#x}, {:#x})\"" #: src/exercises/bare-metal/rtc.md #: src/exercises/bare-metal/solutions-afternoon.md @@ -19353,21 +19455,25 @@ msgid "" " // addresses of a GICv3 distributor and redistributor respectively, and\n" " // nothing else accesses those address ranges.\n" msgstr "" +"// Безпечно, оскільки `GICD_BASE_ADDRESS` і `GICR_BASE_ADDRESS` є базовими\n" +" // адресами дистриб'ютора і редистриб'ютора GICv3 відповідно, і ніщо\n" +" // інше не має доступу до цих адресних діапазонів.\n" #: src/exercises/bare-metal/rtc.md msgid "// TODO: Create instance of RTC driver and print current time.\n" -msgstr "" +msgstr "// TODO: Створити екземпляр драйвера RTC та вивести поточний час.\n" #: src/exercises/bare-metal/rtc.md msgid "// TODO: Wait for 3 seconds.\n" -msgstr "" +msgstr "// TODO: Зачекати 3 секунди.\n" #: src/exercises/bare-metal/rtc.md -#, fuzzy msgid "" "_src/exceptions.rs_ (you should only need to change this for the 3rd part of " "the exercise):" -msgstr "`src/exceptions.rs` (це потрібно змінити лише для 3-ї частини вправи):" +msgstr "" +"`src/exceptions.rs` (вам потрібно буде змінити його лише для 3-ї частини " +"вправи):" #: src/exercises/bare-metal/rtc.md msgid "" @@ -19388,100 +19494,101 @@ msgstr "" #: src/exercises/bare-metal/rtc.md msgid "\"sync_exception_current\"" -msgstr "" +msgstr "\"sync_exception_current\"" #: src/exercises/bare-metal/rtc.md msgid "\"irq_current\"" -msgstr "" +msgstr "\"irq_current\"" #: src/exercises/bare-metal/rtc.md msgid "\"No pending interrupt\"" -msgstr "" +msgstr "\"Немає очікуваного переривання\"" #: src/exercises/bare-metal/rtc.md msgid "\"IRQ {intid:?}\"" -msgstr "" +msgstr "\"IRQ {intid:?}\"" #: src/exercises/bare-metal/rtc.md msgid "\"fiq_current\"" -msgstr "" +msgstr "\"fiq_current\"" #: src/exercises/bare-metal/rtc.md msgid "\"serr_current\"" -msgstr "" +msgstr "\"serr_current\"" #: src/exercises/bare-metal/rtc.md msgid "\"sync_lower\"" -msgstr "" +msgstr "\"sync_lower\"" #: src/exercises/bare-metal/rtc.md msgid "\"irq_lower\"" -msgstr "" +msgstr "\"irq_lower\"" #: src/exercises/bare-metal/rtc.md msgid "\"fiq_lower\"" -msgstr "" +msgstr "\"fiq_lower\"" #: src/exercises/bare-metal/rtc.md msgid "\"serr_lower\"" -msgstr "" +msgstr "\"serr_lower\"" #: src/exercises/bare-metal/rtc.md -#, fuzzy msgid "_src/logger.rs_ (you shouldn't need to change this):" -msgstr "`src/logger.rs` (це не потрібно змінювати):" +msgstr "_src/logger.rs_ (вам не потрібно це змінювати):" #: src/exercises/bare-metal/rtc.md msgid "// ANCHOR: main\n" -msgstr "" +msgstr "// ANCHOR: main\n" #: src/exercises/bare-metal/rtc.md -#, fuzzy msgid "_src/pl011.rs_ (you shouldn't need to change this):" -msgstr "`src/pl011.rs` (це не потрібно змінювати):" +msgstr "_src/pl011.rs_ (вам не потрібно це змінювати):" #: src/exercises/bare-metal/rtc.md msgid "// ANCHOR: Flags\n" -msgstr "" +msgstr "// ANCHOR: Flags\n" #: src/exercises/bare-metal/rtc.md msgid "// ANCHOR_END: Flags\n" -msgstr "" +msgstr "// ANCHOR_END: Flags\n" #: src/exercises/bare-metal/rtc.md msgid "" "/// Flags from the UART Receive Status Register / Error Clear Register.\n" msgstr "" +"/// Прапори з регістру стану отримання UART / регістр очищення помилок.\n" #: src/exercises/bare-metal/rtc.md msgid "/// Framing error.\n" -msgstr "" +msgstr "/// Помилка фреймінгу.\n" #: src/exercises/bare-metal/rtc.md msgid "/// Parity error.\n" -msgstr "" +msgstr "/// Помилка паритету.\n" #: src/exercises/bare-metal/rtc.md msgid "/// Break error.\n" -msgstr "" +msgstr "/// Помилка переривання.\n" #: src/exercises/bare-metal/rtc.md msgid "/// Overrun error.\n" -msgstr "" +msgstr "/// Помилка перевиконання.\n" #: src/exercises/bare-metal/rtc.md msgid "// ANCHOR: Registers\n" -msgstr "" +msgstr "// ANCHOR: Registers\n" #: src/exercises/bare-metal/rtc.md msgid "// ANCHOR_END: Registers\n" -msgstr "" +msgstr "// ANCHOR_END: Registers\n" #: src/exercises/bare-metal/rtc.md msgid "" "// ANCHOR: Uart\n" "/// Driver for a PL011 UART.\n" msgstr "" +"// ANCHOR: Uart\n" +"/// Драйвер для PL011 UART.\n" #: src/exercises/bare-metal/rtc.md msgid "" @@ -19496,54 +19603,59 @@ msgid "" "process\n" " /// as device memory and not have any other aliases.\n" msgstr "" +"/// Створює новий екземпляр драйвера UART для пристрою PL011 за заданою\n" +" /// базовою адресою.\n" +" ///\n" +" /// # Безпека\n" +" ///\n" +" /// Зазначена базова адреса повинна вказувати на керуючі регістри MMIO\n" +" /// пристрою PL011, які повинні бути відображені в адресному просторі " +"процесу\n" +" /// як пам'ять пристрою і не мати ніяких інших псевдонімів.\n" #: src/exercises/bare-metal/rtc.md msgid "// ANCHOR_END: Uart\n" -msgstr "" +msgstr "// ANCHOR_END: Uart\n" #: src/exercises/bare-metal/rtc.md -#, fuzzy msgid "_build.rs_ (you shouldn't need to change this):" -msgstr "`build.rs` (це не потрібно змінювати):" +msgstr "_build.rs_ (вам не потрібно це змінювати):" #: src/exercises/bare-metal/rtc.md msgid "\"linux\"" -msgstr "" +msgstr "\"linux\"" #: src/exercises/bare-metal/rtc.md msgid "\"CROSS_COMPILE\"" -msgstr "" +msgstr "\"CROSS_COMPILE\"" #: src/exercises/bare-metal/rtc.md -#, fuzzy msgid "\"aarch64-linux-gnu\"" -msgstr "aarch64-paging" +msgstr "\"aarch64-linux-gnu\"" #: src/exercises/bare-metal/rtc.md msgid "\"aarch64-none-elf\"" -msgstr "" +msgstr "\"aarch64-none-elf\"" #: src/exercises/bare-metal/rtc.md msgid "\"entry.S\"" -msgstr "" +msgstr "\"entry.S\"" #: src/exercises/bare-metal/rtc.md -#, fuzzy msgid "\"exceptions.S\"" -msgstr "Вийнятки" +msgstr "\"exceptions.S\"" #: src/exercises/bare-metal/rtc.md msgid "\"idmap.S\"" -msgstr "" +msgstr "\"idmap.S\"" #: src/exercises/bare-metal/rtc.md msgid "\"empty\"" -msgstr "" +msgstr "\"empty\"" #: src/exercises/bare-metal/rtc.md -#, fuzzy msgid "_entry.S_ (you shouldn't need to change this):" -msgstr "`entry.S` (це не потрібно змінювати):" +msgstr "_entry.S_ (вам не потрібно це змінювати):" #: src/exercises/bare-metal/rtc.md msgid "" @@ -19708,9 +19820,8 @@ msgid "" msgstr "" #: src/exercises/bare-metal/rtc.md -#, fuzzy msgid "_exceptions.S_ (you shouldn't need to change this):" -msgstr "`exceptions.S` (це не потрібно змінювати):" +msgstr "_exceptions.S_ (вам не потрібно це змінювати):" #: src/exercises/bare-metal/rtc.md msgid "" @@ -19905,11 +20016,203 @@ msgid "" "\tcurrent_exception_spx serr_lower\n" "```" msgstr "" +"```armasm\n" +"/*\n" +" * Copyright 2023 Google LLC\n" +" *\n" +" * Licensed under the Apache License, Version 2.0 (the \"License\");\n" +" * you may not use this file except in compliance with the License.\n" +" * You may obtain a copy of the License at\n" +" *\n" +" * https://www.apache.org/licenses/LICENSE-2.0\n" +" *\n" +" * Unless required by applicable law or agreed to in writing, software\n" +" * distributed under the License is distributed on an \"AS IS\" BASIS,\n" +" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +" * See the License for the specific language governing permissions and\n" +" * limitations under the License.\n" +" */\n" +"\n" +"/**\n" +" * Зберігає непостійні регістри у стеку. Наразі це займає 14 \n" +" * інструкцій, тому його можна використовувати в обробниках винятків з 18 " +"інструкціями,\n" +" * що залишилися.\n" +" *\n" +" * При поверненні x0 і x1 ініціалізуються значеннями elr_el2 і spsr_el2 " +"відповідно,\n" +" * які можуть бути використані як перший і другий аргументи наступного " +"виклику.\n" +" */\n" +".macro save_volatile_to_stack\n" +"\t/* Зарезервувати місце у стеку та зберегти регістри x0-x18, x29 та x30. \n" +"*/\n" +"\tstp x0, x1, [sp, #-(8 * 24)]!\n" +"\tstp x2, x3, [sp, #8 * 2]\n" +"\tstp x4, x5, [sp, #8 * 4]\n" +"\tstp x6, x7, [sp, #8 * 6]\n" +"\tstp x8, x9, [sp, #8 * 8]\n" +"\tstp x10, x11, [sp, #8 * 10]\n" +"\tstp x12, x13, [sp, #8 * 12]\n" +"\tstp x14, x15, [sp, #8 * 14]\n" +"\tstp x16, x17, [sp, #8 * 16]\n" +"\tstr x18, [sp, #8 * 18]\n" +"\tstp x29, x30, [sp, #8 * 20]\n" +"\n" +"\t/*\n" +"\t * Зберігаємо elr_el1 та spsr_el1. Таким чином, ми можемо отримати " +"вкладені \n" +"\t * виключення і все ще мати можливість розмотати.\n" +"\t */\n" +"\tmrs x0, elr_el1\n" +"\tmrs x1, spsr_el1\n" +"\tstp x0, x1, [sp, #8 * 22]\n" +".endm\n" +"\n" +"/**\n" +" * Відновлює непостійні регістри зі стеку. Наразі це займає 14 інструкцій,\n" +" * тому цей метод можна використовувати у обробниках виключень, залишаючи " +"18\n" +" * інструкцій; у поєднанні з save_volatile_to_stack залишається ще 4\n" +" * інструкції у запасі.\n" +" */\n" +".macro restore_volatile_from_stack\n" +"\t/* Відновити регістри x2-x18, x29 та x30. */\n" +"\tldp x2, x3, [sp, #8 * 2]\n" +"\tldp x4, x5, [sp, #8 * 4]\n" +"\tldp x6, x7, [sp, #8 * 6]\n" +"\tldp x8, x9, [sp, #8 * 8]\n" +"\tldp x10, x11, [sp, #8 * 10]\n" +"\tldp x12, x13, [sp, #8 * 12]\n" +"\tldp x14, x15, [sp, #8 * 14]\n" +"\tldp x16, x17, [sp, #8 * 16]\n" +"\tldr x18, [sp, #8 * 18]\n" +"\tldp x29, x30, [sp, #8 * 20]\n" +"\n" +"\t/* Відновити регістри elr_el1 та spsr_el1, використовуючи x0 та x1 як " +"скретч.*/\n" +"\tldp x0, x1, [sp, #8 * 22]\n" +"\tmsr elr_el1, x0\n" +"\tmsr spsr_el1, x1\n" +"\n" +"\t/* Відновити x0 та x1 і звільнити місце у стеку. */\n" +"\tldp x0, x1, [sp], #8 * 24\n" +".endm\n" +"\n" +"/**\n" +" * Це загальний обробник виключень, що виникають у поточному EL під час " +"використання\n" +" * SP0. Він поводиться подібно до випадку SPx, спочатку перемикаючись на " +"SPx, виконуючи\n" +" * роботу, а потім перемикаючись назад на SP0 перед поверненням.\n" +" *\n" +" * Перехід до SPx і виклик обробника Rust займає 16 інструкцій. Для\n" +" * відновлення і повернення нам потрібно ще 16 інструкцій, тому ми можемо " +"реалізувати\n" +" * весь обробник у межах виділених 32 інструкцій.\n" +" */\n" +".macro current_exception_sp0 handler:req\n" +"\tmsr spsel, #1\n" +"\tsave_volatile_to_stack\n" +"\tbl \\handler\n" +"\trestore_volatile_from_stack\n" +"\tmsr spsel, #0\n" +"\teret\n" +".endm\n" +"\n" +"/**\n" +" * Це загальний обробник виключень, що виникають у поточному EL під час " +"використання\n" +" * SPx. Він зберігає непостійні регістри, викликає обробник Rust, відновлює " +"непостійні\n" +" * регістри, а потім повертається.\n" +" *\n" +" * Це також працює для виключень, отриманих з EL0, якщо нас не цікавлять \n" +" * постійні регістри.\n" +" *\n" +" * Збереження стану та перехід до обробника Rust займає 15 інструкцій, \n" +" * відновлення та повернення також займає 15 інструкцій, тож ми можемо " +"вмістити\n" +" * весь обробник у 30 інструкцій, при обмеженні у 32.\n" +" */\n" +".macro current_exception_spx handler:req\n" +"\tsave_volatile_to_stack\n" +"\tbl \\handler\n" +"\trestore_volatile_from_stack\n" +"\teret\n" +".endm\n" +"\n" +".section .text.vector_table_el1, \"ax\"\n" +".global vector_table_el1\n" +".balign 0x800\n" +"vector_table_el1:\n" +"sync_cur_sp0:\n" +"\tcurrent_exception_sp0 sync_exception_current\n" +"\n" +".balign 0x80\n" +"irq_cur_sp0:\n" +"\tcurrent_exception_sp0 irq_current\n" +"\n" +".balign 0x80\n" +"fiq_cur_sp0:\n" +"\tcurrent_exception_sp0 fiq_current\n" +"\n" +".balign 0x80\n" +"serr_cur_sp0:\n" +"\tcurrent_exception_sp0 serr_current\n" +"\n" +".balign 0x80\n" +"sync_cur_spx:\n" +"\tcurrent_exception_spx sync_exception_current\n" +"\n" +".balign 0x80\n" +"irq_cur_spx:\n" +"\tcurrent_exception_spx irq_current\n" +"\n" +".balign 0x80\n" +"fiq_cur_spx:\n" +"\tcurrent_exception_spx fiq_current\n" +"\n" +".balign 0x80\n" +"serr_cur_spx:\n" +"\tcurrent_exception_spx serr_current\n" +"\n" +".balign 0x80\n" +"sync_lower_64:\n" +"\tcurrent_exception_spx sync_lower\n" +"\n" +".balign 0x80\n" +"irq_lower_64:\n" +"\tcurrent_exception_spx irq_lower\n" +"\n" +".balign 0x80\n" +"fiq_lower_64:\n" +"\tcurrent_exception_spx fiq_lower\n" +"\n" +".balign 0x80\n" +"serr_lower_64:\n" +"\tcurrent_exception_spx serr_lower\n" +"\n" +".balign 0x80\n" +"sync_lower_32:\n" +"\tcurrent_exception_spx sync_lower\n" +"\n" +".balign 0x80\n" +"irq_lower_32:\n" +"\tcurrent_exception_spx irq_lower\n" +"\n" +".balign 0x80\n" +"fiq_lower_32:\n" +"\tcurrent_exception_spx fiq_lower\n" +"\n" +".balign 0x80\n" +"serr_lower_32:\n" +"\tcurrent_exception_spx serr_lower\n" +"```" #: src/exercises/bare-metal/rtc.md -#, fuzzy msgid "_idmap.S_ (you shouldn't need to change this):" -msgstr "`idmap.S` (це не потрібно змінювати):" +msgstr "_idmap.S_ (вам не потрібно це змінювати):" #: src/exercises/bare-metal/rtc.md msgid "" @@ -19961,9 +20264,8 @@ msgid "" msgstr "" #: src/exercises/bare-metal/rtc.md -#, fuzzy msgid "_image.ld_ (you shouldn't need to change this):" -msgstr "`image.ld` (це не потрібно змінювати):" +msgstr "_image.ld_ (вам не потрібно це змінювати):" #: src/exercises/bare-metal/rtc.md msgid "" @@ -20075,32 +20377,139 @@ msgid "" "}\n" "```" msgstr "" +"```ld\n" +"/*\n" +" * Copyright 2023 Google LLC\n" +" *\n" +" * Licensed under the Apache License, Version 2.0 (the \"License\");\n" +" * you may not use this file except in compliance with the License.\n" +" * You may obtain a copy of the License at\n" +" *\n" +" * https://www.apache.org/licenses/LICENSE-2.0\n" +" *\n" +" * Unless required by applicable law or agreed to in writing, software\n" +" * distributed under the License is distributed on an \"AS IS\" BASIS,\n" +" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +" * See the License for the specific language governing permissions and\n" +" * limitations under the License.\n" +" */\n" +"\n" +"/*\n" +" * Код почне виконуватися з цього символу, який розміщено на початку * " +"образу.\n" +" */\n" +"ENTRY(entry)\n" +"\n" +"MEMORY\n" +"{\n" +"\timage : ORIGIN = 0x40080000, LENGTH = 2M\n" +"}\n" +"\n" +"SECTIONS\n" +"{\n" +"\t/*\n" +"\t * Збираємо код разом.\n" +"\t */\n" +"\t.init : ALIGN(4096) {\n" +"\t\ttext_begin = .;\n" +"\t\t*(.init.entry)\n" +"\t\t*(.init.*)\n" +"\t} >image\n" +"\t.text : {\n" +"\t\t*(.text.*)\n" +"\t} >image\n" +"\ttext_end = .;\n" +"\n" +"\t/*\n" +"\t * Збираємо разом дані тільки для читання..\n" +"\t */\n" +"\t.rodata : ALIGN(4096) {\n" +"\t\trodata_begin = .;\n" +"\t\t*(.rodata.*)\n" +"\t} >image\n" +"\t.got : {\n" +"\t\t*(.got)\n" +"\t} >image\n" +"\trodata_end = .;\n" +"\n" +"\t/*\n" +"\t * Збираємо разом дані для читання і запису, включаючи .bss в кінці,\n" +"\t * який буде обнулено кодом входу.\n" +"\t */\n" +"\t.data : ALIGN(4096) {\n" +"\t\tdata_begin = .;\n" +"\t\t*(.data.*)\n" +"\t\t/*\n" +"\t\t * Код точки входу передбачає, що .data має довжину, кратну 32\n" +"\t\t * байтам.\n" +"\t\t */\n" +"\t\t. = ALIGN(32);\n" +"\t\tdata_end = .;\n" +"\t} >image\n" +"\n" +"\t\t/*\n" +"\t\t * Все, що знаходиться за цією точкою, не буде включено до бінарного\n" +"\t\t * файлу.\n" +"\t\t */\n" +"\tbin_end = .;\n" +"\n" +"\t/* Код точки входу передбачає, що .bss вирівняно по 16 байтів. */\n" +"\t.bss : ALIGN(16) {\n" +"\t\tbss_begin = .;\n" +"\t\t*(.bss.*)\n" +"\t\t*(COMMON)\n" +"\t\t. = ALIGN(16);\n" +"\t\tbss_end = .;\n" +"\t} >image\n" +"\n" +"\t.stack (NOLOAD) : ALIGN(4096) {\n" +"\t\tboot_stack_begin = .;\n" +"\t\t. += 40 * 4096;\n" +"\t\t. = ALIGN(4096);\n" +"\t\tboot_stack_end = .;\n" +"\t} >image\n" +"\n" +"\t. = ALIGN(4K);\n" +"\tPROVIDE(dma_region = .);\n" +"\n" +"\t/*\n" +"\t * Видалити з образу невикористані секції.\n" +"\t */\n" +"\t/DISCARD/ : {\n" +"\t\t/* Образ завантажується сам, тому йому не потрібні ці секції. */\n" +"\t\t*(.gnu.hash)\n" +"\t\t*(.hash)\n" +"\t\t*(.interp)\n" +"\t\t*(.eh_frame_hdr)\n" +"\t\t*(.eh_frame)\n" +"\t\t*(.note.gnu.build-id)\n" +"\t}\n" +"}\n" +"```" #: src/exercises/bare-metal/rtc.md -#, fuzzy msgid "_Makefile_ (you shouldn't need to change this):" -msgstr "`Makefile` (це не потрібно змінювати):" +msgstr "_Makefile_ (вам не потрібно це змінювати):" #: src/exercises/bare-metal/rtc.md msgid "# Copyright 2023 Google LLC" -msgstr "" +msgstr "# Copyright 2023 Google LLC" #: src/exercises/bare-metal/rtc.md msgid "$(shell uname -s)" -msgstr "" +msgstr "$(shell uname -s)" #: src/exercises/bare-metal/rtc.md -#, fuzzy msgid "aarch64-linux-gnu" -msgstr "aarch64-paging" +msgstr "aarch64-linux-gnu" #: src/exercises/bare-metal/rtc.md msgid "stdio -display none -kernel $< -s" -msgstr "" +msgstr "stdio -display none -kernel $< -s" #: src/exercises/bare-metal/rtc.md msgid "cargo clean" -msgstr "" +msgstr "cargo clean" #: src/exercises/bare-metal/rtc.md msgid "Run the code in QEMU with `make qemu`." @@ -20108,96 +20517,96 @@ msgstr "Запустіть код у QEMU за допомогою `make qemu`." #: src/exercises/bare-metal/solutions-afternoon.md msgid "Bare Metal Rust Afternoon" -msgstr "Rust на голому залізі Після обіду" +msgstr "Rust на голому залізі. Полудень." #: src/exercises/bare-metal/solutions-afternoon.md msgid "([back to exercise](rtc.md))" msgstr "([назад до вправи](rtc.md))" #: src/exercises/bare-metal/solutions-afternoon.md -#, fuzzy msgid "_main.rs_:" -msgstr "`main.rs`:" +msgstr "_main.rs_:" #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Base address of the PL031 RTC.\n" -msgstr "" +msgstr "/// Базова адреса PL031 RTC.\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// The IRQ used by the PL031 RTC.\n" -msgstr "" +msgstr "/// IRQ, що використовується PL031 RTC.\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "" "// Safe because `PL031_BASE_ADDRESS` is the base address of a PL031 device,\n" " // and nothing else accesses that address range.\n" msgstr "" +"// Безпечно, оскільки `PL031_BASE_ADDRESS` є базовою адресою пристрою " +"PL031,\n" +" // і ніщо інше не має доступу до цього діапазону адресації.\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "\"RTC: {time}\"" -msgstr "" +msgstr "\"RTC: {time}\"" #: src/exercises/bare-metal/solutions-afternoon.md msgid "// Wait for 3 seconds, without interrupts.\n" -msgstr "" +msgstr "// Чекаємо 3 секунди, без переривань.\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "\"Waiting for {}\"" -msgstr "" +msgstr "\"Чекаємо на {}\"" #: src/exercises/bare-metal/solutions-afternoon.md msgid "\"matched={}, interrupt_pending={}\"" -msgstr "" +msgstr "\"matched={}, interrupt_pending={}\"" #: src/exercises/bare-metal/solutions-afternoon.md msgid "\"Finished waiting\"" -msgstr "" +msgstr "\"Дочекалися\"" #: src/exercises/bare-metal/solutions-afternoon.md msgid "// Wait another 3 seconds for an interrupt.\n" -msgstr "" +msgstr "// Чекаємо ще 3 секунди на переривання.\n" #: src/exercises/bare-metal/solutions-afternoon.md -#, fuzzy msgid "_pl031.rs_:" -msgstr "`pl031.rs`:" +msgstr "_pl031.rs_:" #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Data register\n" -msgstr "" +msgstr "/// Регістр даних\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Match register\n" -msgstr "" +msgstr "/// Регістр збігів\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Load register\n" -msgstr "" +msgstr "/// Регістр завантаження\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Control register\n" -msgstr "" +msgstr "/// Регістр управління\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Interrupt Mask Set or Clear register\n" -msgstr "" +msgstr "/// Регістр установки або очищення маски переривання\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Raw Interrupt Status\n" -msgstr "" +msgstr "/// Необроблений стан переривання\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Masked Interrupt Status\n" -msgstr "" +msgstr "/// Маскований статус переривання\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Interrupt Clear Register\n" -msgstr "" +msgstr "/// Регістр очищення переривання\n" #: src/exercises/bare-metal/solutions-afternoon.md -#, fuzzy msgid "/// Driver for a PL031 real-time clock.\n" -msgstr "Напишемо драйвер для пристрою годин реального часу PL031." +msgstr "/// Драйвер для годинника реального часу PL031.\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid ""