Rust дахь Linux цөмд зориулсан аюулгүй драйверуудыг бичих хүрээ

Intel-д ажилладаг, Crates.io-ийн хөгжлийг хянадаг хороонд ажилладаг Жош Триплетт Нээлттэй эхийн технологийн дээд хэмжээний уулзалт дээр үг хэлжээ. танилцуулав системийн програмчлалын чиглэлээр Rust хэлийг Си хэлтэй ижил түвшинд хүргэх зорилготой ажлын хэсэг.

Үүсгэх шатандаа байгаа ажлын хэсэгт Rust хөгжүүлэгчид Intel-ийн инженерүүдтэй хамтран системийн програмчлалын хувьд Rust-д хэрэгжүүлэх шаардлагатай функцуудыг тодорхойлсон техникийн үзүүлэлтүүдийг бэлтгэх болно. Системийн програмчлалд процессорын давуу эрх бүхий зааварчилгааг гүйцэтгэх, процессорын төлөв байдлын талаар дэлгэрэнгүй мэдээлэл авах зэрэг доод түвшний заль мэх шаардлагатай байдаг. Rust-д зориулж аль хэдийн боловсруулж байгаа ижил төстэй функцүүдийн дотроос нэргүй бүтэц, нэгдлүүд, ассемблер хэлний оруулга ("asm!" макро) болон BFLOAT16 хөвөгч цэгийн тооны форматын дэмжлэгийг тэмдэглэв.

Жош системийн програмчлалын ирээдүй нь Rust-д хамааралтай гэж үзэж байгаа бөгөөд орчин үеийн бодит байдалд Си хэл нь өнгөрсөн жилүүдэд Ассемблейд эзлэгдсэн байр суурийг эзэлдэг. Зэв
Энэ нь хөгжүүлэгчдэд санах ойтой бага түвшний ажил хийснээс болж үүсдэг Си хэлний төрөлх асуудлаас ангижруулаад зогсохгүй орчин үеийн програмчлалын парадигмуудыг боловсруулахад ашиглах боломжийг олгодог.

Үеэр хэлэлцүүлэг тоглолтууд
Жош Линуксийн цөмд Rust хэл дээр драйверуудыг хөгжүүлэх чадварыг нэмэх санааг дэвшүүлсэн бөгөөд энэ нь суллагдсаны дараа санах ойд нэвтрэх гэх мэт асуудлуудаас ангид, хамгийн бага хүчин чармайлтаар илүү аюулгүй, илүү сайн драйверуудыг бий болгох боломжийг олгоно, null. заагчийн хаягжилт болон буфер хэт ачаалал.

Линуксийн цөмийн тогтвортой салбарыг хадгалах үүрэгтэй Грег Кроа-Хартман хэрэв C-ээс бодит давуу талтай бол, жишээлбэл, зэвсгийн хэл дээрх драйверуудыг хөгжүүлэх тогтолцоог цөмд нэмэхэд бэлэн байгаагаа илэрхийлэв. Цөмийн API дээрх холболтууд. Нэмж дурдахад, Грег энэ хүрээг зөвхөн сонголт гэж үздэг бөгөөд анхдагчаар идэвхтэй биш бөгөөд ингэснээр зэвийг цөм дээр бүтээх хамаарал болгон оруулахгүй.

Энэ чиглэлээр хэд хэдэн баг ажиллаж байгаа нь тогтоогдсон. Жишээлбэл, "Торх дахь загас" компанийн хөгжүүлэгчид. бэлтгэсэн аюулгүй байдлыг нэмэгдүүлэхийн тулд интерфэйсүүд болон цөмийн бүтцүүд дээр хийсвэр давхаргын багцыг ашиглан Linux цөмд ачаалах боломжтой модулиудыг Rust хэлээр бичих хэрэгсэл. Хэрэгслийг ашиглан одоо байгаа цөмийн толгой файлууд дээр үндэслэн давхаргууд автоматаар үүсгэгддэг холбогч. Clang нь давхаргыг барихад ашиглагддаг. Угсарсан модулиуд нь давхаргын давхаргаас гадна staticlib багцыг ашигладаг.

Зэрэгцээ хөгжиж байна Өөр нэг төсөл нь суулгагдсан систем болон IoT төхөөрөмжүүдэд зориулсан драйверуудыг хөгжүүлэхэд чиглэгдсэн бөгөөд энэ нь цөмийн толгой файлууд дээр суурилсан давхарга үүсгэхийн тулд bindgen ашигладаг. Энэхүү хүрээ нь цөмд өөрчлөлт оруулахгүйгээр драйверын аюулгүй байдлыг сайжруулах боломжийг олгодог - цөмд драйверуудыг тусгаарлах нэмэлт түвшинг бий болгохын оронд илүү найдвартай Rust хэлийг ашиглан эмхэтгэлийн үе шатанд асуудлыг хаахыг санал болгож байна. Ийм арга нь зохих аудит хийхгүйгээр яаран өмчийн жолооч нарыг хөгжүүлж буй тоног төхөөрөмж үйлдвэрлэгчдэд эрэлт хэрэгцээтэй байж магадгүй гэж таамаглаж байна.

Төлөвлөсөн бүх функц хараахан хэрэгжээгүй байгаа боловч уг хүрээ нь ажилд аль хэдийн тохиромжтой болсон бөгөөд Raspberry Pi 9512 самбар дээр нийлүүлсэн LAN3 USB Ethernet хянагчийг ажиллах драйвер бичихэд ашигласан. Одоо байгаа smsc95xx драйверийг дотор бичсэн. C хэл. Rust-д драйвер боловсруулах үед модулийн хэмжээ болон ажиллах үеийн бүрэлдэхүүн хэсгүүдийн ачаалал нь ач холбогдолгүй болохыг тэмдэглэсэн бөгөөд энэ нь хүрээг хязгаарлагдмал нөөцтэй төхөөрөмжүүдэд ашиглах боломжийг олгодог.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх