Третя версія патчів для підтримки драйверів Rust в Linux вже випущена

Через півроку після публікації другої версії, Мігель Охеда, автор проекту Rust-for-Linux, оприлюднив пропозицію третього варіанту для розробки драйверів пристроїв мовою Rust в ядрі Linux.

Підтримка Rust вважається експериментальною, але її включення до гілки linux-next вже узгоджено. Розробка фінансується Google і організацією ISRG (Internet Security Research Group), яка є засновником проекту Let's Encrypt і сприяє просуванню HTTPS і розвитку технологій для покращення безпеки в Інтернеті.

Слід пам’ятати, що запропоновані зміни дозволяють використовувати Rust як другу мову для розробки драйверів і модулів ядра.

Драйвери Rust на Linux
Пов'язана стаття:
Друга версія виправлень для підтримки драйверів Rust на Linux вже надіслана

Підтримка Rust рекламується як опція, яка не активна за замовчуванням і це не призводить до того, що Rust буде включено в необхідні базові залежності збірки. Використання Rust для розробки драйверів дозволить вам створювати кращі та безпечніші драйвери з мінімальними зусиллями, без клопоту з доступом до області пам’яті після звільнення, розіменування нульових покажчиків і перевищення лімітів буфера.

Нова версія патчів продовжує усувати коментарі, зроблені під час обговорення першої та другої версії виправлень, і найбільш помітні зміни, які ми можемо знайти:

Перейшов на Rust 1.57 стабільну версію як еталонний компілятор і забезпечено прив’язку до стабілізованої версії мови Rust 2021. Перехід на специфікацію Rust 2021 pдозволено почати роботу, щоб уникнути використання таких нестабільних функцій у таких патчах, як const_fn_transmute, const_panic, const_unreachable_unchecked і core_panic і try_reserve.

Це також виділяється тим, що розробка версії alloc продовжується з бібліотеки Rust, у новій версії, параметри "no_rc" і "no_sync" реалізовані для вимкнення функціональності який не використовується в коді Rust для ядра, що робить бібліотеку більш модульною. Ми продовжуємо працювати з основними розробниками alloc, щоб внести необхідні зміни в основну бібліотеку. Параметр «no_fp_fmt_parse», необхідний для функціонування бібліотеки на рівні ядра, переміщено в базову бібліотеку (ядро) Rust.

Код очищено, щоб видалити можливі попередження компілятора під час компіляції ядра в режимі CONFIG_WERROR. Коли код створюється в Rust, додаються додаткові режими діагностики компілятора та попередження про лінтер Clippy.

Вони запропонували абстракції для використання seqlocks (блокування послідовності), виклики зворотного виклику для керування живленням, введення-виводу пам'яті (readX / writeX), обробники переривань і потоків, GPIO, доступ до пристроїв, драйвери та облікові дані в коді rust.

Інструменти розробки драйверів були розширені з використанням переміщуваних мьютексів, бітових ітераторів, спрощених прив’язок над покажчиками, покращеної діагностики несправностей та незалежної інфраструктури шини даних.

Покращено роботу з посиланнями за допомогою типу Ref спрощено, на основі бекенда refcount_t, який використовує центральний API з такою ж назвою для підрахунку посилань. Підтримка типів Arc і Rc, яка надається в стандартній бібліотеці відображення, була вилучена і недоступна в коді, що виконується на рівні ядра (для самої бібліотеки були підготовлені параметри для відключення цих типів).

До патчів додано версію драйвера PL061 GPIO, переписану на Rust. Особливістю драйвера є те, що його майже порядкова реалізація повторює існуючий драйвер C GPIO. Для розробників, які хочуть познайомитися з контролерами побудови в Rust, підготовлено порядкове порівняння, яке дає уявлення про те, якими збірками в Rust став код C.

Основна кодова база Rust використовує rustc_codegen_gcc, бекенд rustc для GCC, який реалізує компіляцію AOT за допомогою бібліотеки libgccjit. При належній розробці бекенда це дозволить вам збирати код Rust, задіяний в ядрі, за допомогою GCC.
Крім ARM, Google і Microsoft, Red Hat виявила зацікавленість у використанні Rust в ядрі Linux.

Нарешті, якщо вам цікаво дізнатися більше про це, ви можете ознайомитися з деталями У наступному посиланні.


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: AB Internet Networks 2008 SL
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.