A terceira versão dos patches para suporte ao driver Rust no Linux já foi lançada

Seis meses após a publicação da segunda versão, Miguel Ojeda, autor do projeto Rust-for-Linux, deu a conhecer a proposta da terceira opção para o desenvolvimento de drivers de dispositivos em linguagem Rust no Kernel Linux.

O suporte a Rust é considerado experimental, mas sua inclusão no ramo linux-next já foi acordada. O desenvolvimento é financiado pelo Google e pela organização ISRG (Internet Security Research Group), que é o fundador do projeto Let's Encrypt e contribui para a promoção do HTTPS e o desenvolvimento de tecnologias para melhorar a segurança da Internet.

Deve ser lembrado que as mudanças propostas permitem que o Rust seja usado como uma segunda linguagem para desenvolver drivers e módulos do kernel.

Drivers de ferrugem no Linux
Artigo relacionado:
A segunda versão dos patches para suporte ao driver Rust no Linux já foi enviada

O suporte a ferrugem é anunciado como uma opção que não está ativa por padrão e não resulta na inclusão do Rust nas dependências de compilação básicas necessárias. Usar o Rust para o desenvolvimento de driver permitirá que você crie drivers melhores e mais seguros com o mínimo de esforço, sem o incômodo de acessar uma área da memória uma vez liberada, desreferenciando ponteiros nulos e excedendo os limites de buffer.

A nova versão dos patches continua a eliminar os comentários feitos durante a discussão da primeira e segunda versões dos patches e as mudanças mais notáveis ​​que podemos encontrar:

Transição para a versão estável Rust 1.57 como um compilador de referência e a vinculação à edição estabilizada da linguagem Rust 2021 foi garantida. A transição para a especificação Rust 2021 ppermissão para começar a trabalhar para evitar o uso de tais recursos instáveis em patches como const_fn_transmute, const_panic, const_unreachable_unchecked e core_panic e try_reserve.

Também se destaca que o desenvolvimento da versão de alocação continuou da biblioteca Rust, na nova versão, as opções "no_rc" e "no_sync" são implementadas para desativar a funcionalidade que não é usado no código Rust para o kernel, tornando a biblioteca mais modular. Continuamos a trabalhar com os desenvolvedores de alocação principal para trazer as alterações de kernel necessárias para a biblioteca principal. A opção "no_fp_fmt_parse", que é necessária para a biblioteca funcionar no nível do kernel, foi movida para a biblioteca base do Rust (kernel).

Código limpo para remover possíveis avisos do compilador ao compilar o kernel no modo CONFIG_WERROR. Quando o código é criado no Rust, modos adicionais do compilador de diagnóstico e avisos do Clippy linter são incluídos.

Eles propuseram abstrações para usar seqlocks (bloqueios de sequência), chamadas de retorno para gerenciamento de energia, E / S de memória (readX / writeX), interrupções e manipuladores de thread, GPIO, acesso de dispositivo, drivers e credenciais em código de ferrugem.

Ferramentas de desenvolvimento de driver foram expandidas com o uso de mutexes realocáveis, iteradores de bit, ligações simplificadas sobre ponteiros, diagnósticos de falha aprimorados e infraestrutura independente de barramento de dados.

O trabalho com links foi aprimorado usando o tipo Ref simplificado, com base no back-end refcount_t, que usa a API central de mesmo nome para contar referências. O suporte para os tipos Arc e Rc fornecidos na biblioteca de mapeamento padrão foi removido e não está disponível no código executado no nível do kernel (para a própria biblioteca, opções foram preparadas para desativar esses tipos).

Uma versão do driver PL061 GPIO, reescrita em Rust, foi adicionada aos patches. Um recurso do driver é que sua implementação quase linha por linha repete o driver C GPIO existente. Para os desenvolvedores que desejam se familiarizar com a construção de controladores em Rust, uma comparação linha por linha foi preparada, que fornece uma visão sobre em quais compilações em Rust o código C se tornou.

A base de código principal do Rust adota rustc_codegen_gcc, um backend rustc para GCC que implementa compilação AOT usando a biblioteca libgccjit. Com o desenvolvimento adequado do backend, ele permitirá que você colete o código Rust envolvido no kernel usando o GCC.
Além de ARM, Google e Microsoft, a Red Hat expressou interesse em usar Rust no kernel Linux.

Por fim, se você tiver interesse em saber mais sobre o assunto, pode consultar os detalhes no link a seguir.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: AB Internet Networks 2008 SL
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.