Dumating ang ikawalong bersyon ng mga patch para sa suporta ng Rust driver sa Linux

Miguel Ojeda, may-akda ng proyektong Rust-for-Linux inilabas ang ikawalong release ng pagbuo ng mga Linux kernel patch na may suporta sa Rust na wika para isaalang-alang ng mga developer ng Linux kernel.

Naranggo ito bilang ikasiyam na paglabas ng mga patch (isinasaalang-alang ang unang inilabas na bersyon na walang numero ng bersyon). Ang suporta sa kalawang ay itinuturing na eksperimental, ngunit ito ay kasama na sa linux-next branch, naghahabol para sa integration sa paglabas ng taglagas na 5.20/6.0, at sapat na ang advanced para simulan ang paggawa ng abstraction layer sa ibabaw ng mga kernel subsystem, pati na rin ang pagsusulat ng mga controllers at modules.

Ang pagpapaunlad ay pinondohan ng Google at ng ISRG (Internet Security Research Group), na siyang nagtatag ng proyektong Let's Encrypt at nagpo-promote ng HTTPS at ang pagbuo ng mga teknolohiya upang mapataas ang seguridad sa Internet.

Ginagawang posible ng mga iminungkahing pagbabago na gamitin ang Rust bilang pangalawang wika para sa pagbuo ng mga driver at kernel module. Ang Rust support ay ipinakita bilang isang opsyon na hindi pinagana bilang default at hindi nagreresulta sa Rust na kasama sa mga kinakailangang build dependencies para sa kernel. Ang paggamit ng Rust upang bumuo ng mga driver ay magbibigay-daan sa iyong lumikha ng mas mahusay at mas ligtas na mga driver na may kaunting pagsisikap, nang walang mga problema tulad ng pag-access sa isang lugar ng memorya pagkatapos itong palayain, pag-dereference ng mga null pointer, at pag-apaw ng buffer.

Ang kaligtasan ng memorya ay ibinibigay sa Rust sa oras ng pag-compile sa pamamagitan ng pagsuri sa mga sanggunian, pagsubaybay sa pagmamay-ari ng bagay, at panghabambuhay ng bagay (saklaw), gayundin sa pamamagitan ng pagsusuri sa kawastuhan ng pag-access sa memorya sa panahon ng pagpapatupad ng code.

Ano ang bago sa ikawalong release na ito?

Sa bagong proposal na ito na inilabas, nabanggit na ang variant ng alloc library, na inalis ang posibleng henerasyon ng "panic" na estado sa mga error, na-update sa Rust na bersyon 1.62. Kung ikukumpara sa nakaraang bersyon, ang Rust toolkit ay nagpatatag ng suporta para sa const_fn_trait_bound functionality na ginagamit sa mga kernel patch.

Bukod dito ang bindings code ay pinaghihiwalay sa isang bundle ng "bindings" na mga kahon nang hiwalay, na nagpapadali sa muling pagbuo kung ang pangunahing kernel package lang ang babaguhin.

Ang pagpapatupad ng "concat_idents!" macro, Muling isinulat bilang procedural macro, hindi nakatali sa concat_idents functionality at pinapayagan ang paggamit ng mga lokal na variable na sanggunian.

Sa karagdagan, ito ay nabanggit na ang macro "static_assert!" ay muling isinulat upang payagan ang "core::assert!()" ay ginagamit sa anumang konteksto sa halip na mga constant, habang ang macro "construction_error!" ay iniakma upang gumana kapag nagtatakda ng "RUST_BUILD_ASSERT_{WARN,ALLOW}" na mode para sa mga module.

idinagdag ang module ng fs na nagbibigay ng mga link para sa pagtatrabaho sa mga file system. Ang isang halimbawa ng isang simpleng file system na nakasulat sa Rust ay iminungkahi, pati na rin ang job queue module na idinagdag upang gumana sa system queues.

Sa iba pang mga pagbabago na kakaiba sa bagong panukalang ito:

  • Nagdagdag ng hiwalay na configuration file na "kernel/configs/rust.config".
  • Ang "*.i" na mga file na naproseso sa mga macro substitution ay pinalitan ng pangalan sa "*.rsi".
  • Inalis ang suporta para sa pagbuo ng mga bahagi ng Rust na may mga antas ng pag-optimize maliban sa mga ginagamit para sa C code.
  • Ang pagbuo ng kasync module ay nagpatuloy sa pagpapatupad ng mga asynchronous programming method (async).
  • Nagdagdag ng halimbawa ng isang kernel level TCP server na nakasulat sa Rust at nagdagdag ng kakayahang pangasiwaan ang mga interrupt sa Rust.
  • Nagdagdag ng procedure macro upang gawing mas madaling gumana sa mga function pointer table, gaya ng file_operations structure.
  • Idinagdag ang pagpapatupad ng bidirectional linked list na "unsafe_list::List".
  • Nagdagdag ng paunang suporta para sa RCU at ang uri ng Guard upang tingnan kung ang isang read lock ay nakatali sa kasalukuyang thread.
  • Nagdagdag ng function na Task::spawn() para awtomatikong mag-spawn at magsimula ng mga kernel thread.
  • Ang Task::wake_up() na pamamaraan ay naidagdag din.
  • Nagdagdag ng delay module

Sa wakas kung interesado kang malaman ang tungkol dito, maaari mong suriin ang mga detalye Sa sumusunod na link.


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: AB Internet Networks 2008 SL
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.