Ентузіаст запустив Linux на Arduino Uno

Ентузіаст запустив Linux на Arduino Uno

Ентузіаст запустив ядро ​​Linux на платі Arduino Uno. Щоб адаптувати Linux 6.1 до чіпа ATmega328p, він портував емулятор RISC-V на цю платформу. Встановлено новий антирекорд: понад 15 годин для завантаження.

Ядро Linux адаптують та запускають на різних конфігураціях. З листопада 2017 року у списку найпотужніших суперкомп'ютерів світу Top500 не залишилося машин на інших операційних системах. Вже понад п'ять років у цьому рейтингу залишилися лише суперкомп'ютери під Linux.

Разом з тим окремі варіанти Linux спеціально «допилюють» для систем, що вбудовуються або плат зі скромними характеристиками. Наприклад, Damn Small Linux вимагає роботи без графіки хоча б 486dx чи 100 % сумісний клон і 8 МіБ ОЗУ, хоча рекомендується 16 МіБ. Були спроби вмістити Linux навіть у 4 МіБ ОЗУ.

Загалом, ентузіасти люблять зі спортивного інтересу запускати софт на платформах, для яких він ніколи не призначався. Найчастіше для цього вибирають гру Doom 1993 року, що демонструє графічні здібності. Doom працює на розумному годиннику , калькуляторах або хоч усередині самого Doom . Насправді такі розваги — не найпростіша операція, для успіху якої потрібно познайомитися з ефективними техніками ігрової розробки початку 90-х та обмеження цільової платформи.

Рідше вправляються з Linux. Йдеться, звичайно, про повноцінне ядро, а не обрізану версію виду μClinux . Як виклик систему запускають на мікроконтролерах, наприклад, на ESP32 . В інших випадках підійде Commodore 64 , мікрокомп'ютер із вісімдесятих. Робота виходить повільною: за розрахунками виходить, що на завантаження на реальному залізі піде тиждень. Спроба C64 була проведена в емуляторі VICE, а не на справжньому комп'ютері, але навіть там у прискореному режимі емуляції для отримання скріншотів довелося прочекати дві години.

З 2012 року найгіршим комп'ютером на Linux вважався 8-бітний мікроконтролер ATmega644a з 16 КіБ ОЗУ та 128 КіБ флеш-пам'яті. Процесор AVR був "розігнаний" до частоти 24 МГц, блоку керування пам'яті немає, для сховища була картка пам'яті. За таких умов ентузіаст Дмитро Грінберг примудрився налаштувати емуляцію процесора архітектури ARM зі швидкістю 10 кГц. В результаті вдалося завантажити Ubuntu за 6 годин.

Умілець із В'єтнаму побив антирекорд Дмитра та запустив Linux на Arduino Uno. На завантаження Linux 6.1 потрібно 15 годин 44 хвилини.

"Серце" Arduino Uno - ATmega328p. Характеристики ATmega328p ще скромніші: 2 КіБ (2048 байт) ОЗУ, 32 КіБ флеш-пам'яті, 2 КіБ SRAM. Автор проекту arv32-opt портував на ATmega328p код mini-rv32ima , мінімалістичного емулятора RISC-V, здатного завантажувати Linux.

Емулятор використовує 3 512-байтних кеша (один icache і два dcache) та ліниву систему кешування. Як і в минулому випадку, процесор спілкується за інтерфейсом SPI з карткою пам'яті, де зберігає ОЗУ. Для адаптування карт пам'яті, які вимагають рівні напруги 3,3, для ATmega328p, у якої логічні рівні орієнтовані на 5, потрібен перетворювач логічного рівня. У документації наводиться необхідне розведення висновків для підключення картки пам'яті.

Через вузький канал зв'язку з картою пам'яті за однобітним інтерфейсом і низькою частотою шини SPI (удалося досягти FLCK/16, тобто 1 МГц) швидкість емуляції RISC-V на Arduino Uno менше кілогерця. Для 16-МГц чіпа ATmega328p середня частота емуляції становить 700 Гц, у піку — до 1500 Гц. І то для такого потрібно доопрацювати емулятор системою з трьох кешів і лінивим кешуванням. Спочатку швидкість варіювалася від 175 до 205 Гц.

На даний момент після кожного запуску Linux на карту пам'яті ATmega328p потрібно розмічати заново. Скидання стану поки що не реалізовано.

Автор проекту виклав процес завантаження на своєму каналі YouTube, у тому числі повні відео без монтажних склеєк. Зрозуміло, що ніякої практичної цінності в операційній машині, що ледь обертається, немає.