Рассмотрен пример драйвера Asix AX88796B, переписанного на Rust чуть более чем на 100 строк.
Показаны отличия синтаксиса, типов и API между Rust и C при написании драйвера в ядре.
Rust use позволяет импортировать только нужные элементы модулей в отличие от #include в C.
Для описания модуля в Rust используется макрос kernel::module_phy_driver!, аналогичный module_phy_driver() в C.
Константы в Rust объявляются с помощью const и требуют указания типа, а let — для переменных времени выполнения.
В Rust ссылки (& и &mut) обеспечивают безопасность доступа к данным на этапе компиляции, предотвращая гонки данных.
Оператор ? упрощает обработку ошибок, автоматически возвращая Err, в отличие от явных проверок в C.
Трейт Driver и макрос #[vtable] преобразуют Rust-реализацию в структуру с указателями на функции, совместимую с субсистемой PHY.
Get notified when new stories are published for "🇷🇺 Hacker News Русский"