Опубликована седьмая версия патчей для поддержки драйверов Rust в Linux

Несколько дней назад, Мигель Охеда, ответственный за разработку и подачу данных предложений и автор проекта Rust-for-Linux представила предложение седьмого компонента для разработки драйверов устройств Ржавчина для разработчиков ядра Linux.

Это седьмая редакция патчей и до которого даже поддержка Rust считается экспериментальной, но она уже включена в ветку linux-next и достаточно зрела, чтобы начать работать над созданием слоев абстракции над подсистемами ядра, а также писать контроллеры и модули. Разработка финансируется Google и ISRG (Internet Security Research Group), которая является основателем проекта Let’s Encrypt и продвигает HTTPS и разработку технологий для повышения интернет-безопасности.

Предлагаемые изменения позволяют использовать Rust в качестве второго языка для разработки драйверов и модулей ядра. Поддержка Rust представлена ​​как опция, которая не включена по умолчанию и не приводит к включению Rust в число необходимых зависимостей сборки для ядра. Использование Rust для разработки драйверов позволит вам создавать более качественные и безопасные драйверы с минимальными усилиями, без проблем, таких как доступ к области памяти после ее освобождения, разыменование нулевых указателей и переполнение буфера.

Основные нововведения в седьмом предложении

Это новое предложение подчеркивает, что набор инструментов и вариант библиотеки alloc, что устранило возможную генерацию состояния "паника" при ошибках, обновлен до версии Rust 1.60 и тем самым стабилизирует поддержку режима «may_uninit_extra», используемого в исправлениях ядра.

В дополнение к этому отмечается, что добавлена ​​возможность запускать тесты из документации (тесты, используемые одновременно в качестве примеров в документации), путем преобразования тестов времени компиляции, привязанных к API ядра, в тесты KUnit, которые запускаются во время загрузки ядра. Тесты должны не выдавать предупреждение Clippy linter, как это делается в основном коде Rust.

Более того предлагается начальная реализация модуля «net» с сетевыми функциями. Код Rust обеспечивает доступ к сетевым структурам ядра, таким как "Namespace" (на основе структуры ядра "struct net"), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) и его эквиваленты IPv6.

задний конец rustc_codegen_gcc, реализована возможность запуска компилятора rustc. Ввод в эксплуатацию компилятора относится к способности rustc использовать генератор кода на основе GCC для сборки компилятора rustc.

Кроме того, недавний выпуск GCC 12.1 включает исправления в libgccjit, необходимые для правильной работы rustc_codegen_gcc. Идет подготовка к предоставлению возможности установки rustc_codegen_gcc с помощью утилиты rustup.

Из другие изменения, которые выделяются этой новой версии:

  • Реализована начальная поддержка методов асинхронного программирования (async), реализованная в виде модуля kasync.
  • Добавлен модуль net::filter для управления фильтрами сетевых пакетов. Добавлен пример rust_netfilter.rs с реализацией фильтра на языке Rust.
  • Добавлена ​​реализация простого мьютекса smutex::Mutex, не требующего закрепления.
  • Добавлена ​​блокировка NoWaitLock, которая никогда не ждет освобождения, и если она занята другим потоком, попытка получить блокировку вместо остановки вызывающего объекта завершается неудачно.
  • Добавлена ​​блокировка RawSpinLock, определяемая raw_spinlock_t в ядре, которая применяется к разделам, которые не могут простаивать.
  • Добавлен тип ARef для ссылок на объекты, к которым применяется механизм подсчета ссылок (всегда опровергается).
  • Наблюдается прогресс в разработке внешнего интерфейса GCC gccrs с реализацией компилятора языка Rust на основе GCC. В настоящее время над gccrs работают два штатных разработчика.

В конце концов Если вам интересно узнать об этом больше, вы можете проверить детали в по следующей ссылке.


Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Будьте первым, чтобы комментировать

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован.

*

*

  1. Ответственный за данные: AB Internet Networks 2008 SL
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.