የዝገት ማጎልበቻ መሳሪያዎችን ወደ ሊኑክስ ከርነል የመጨመር ጉዳይ ለመወያየት የቀረበ ሀሳብ

ኒክ ዴሳኒየር (ኒክ Desaulniers) ለማቅረብ በጎግል ላይ የሚሰራ ድጋፍ Clang compiler በመጠቀም የሊኑክስ ከርነል መገንባት እና እንዲሁም መርዳት በ Rust compiler ውስጥ ስህተቶችን ያስተካክሉ ፣ የተጠቆመ ኮንፈረንስ ላይ ያዙ የሊኑክስ ፕላምበርስ ኮንፈረንስ 2020 በሩስት ውስጥ የከርነል ክፍሎችን ማልማት እንደሚቻል ለመወያየት ክፍለ ጊዜ። ኒክ ለኤልኤልቪኤም የተሰጠ ማይክሮ ኮንፈረንስ በማዘጋጀት ላይ ነው፣ እና የዝገት ድጋፍን ወደ ከርነል ሊዋሃድ ስለሚችልበት ሁኔታ ቴክኒካዊ ጉዳዮችን መወያየት ጥሩ ነው ብሎ ያምናል (ለ KBuild የሚሰራ ፕሮቶታይፕ አዘጋጅቷል) እና እንደዚህ አይነት ድጋፍ መሆን እንዳለበት ይረዱ። በሁሉም ላይ መጨመር እና በ Rust አጠቃቀም ላይ ምን ገደቦች መቀበል አለባቸው.

በቅርቡ በተከፈተው የሊኑስ ቶርቫልድስ የክፍት ምንጭ ስብሰባ እና የተካተተ ውይይት ላይ እናስታውስ። አላስወገደውም። እንደ ዝገት ባሉ ቋንቋዎች ዋና ላልሆኑ የከርነል ስርአቶች (ለምሳሌ ሾፌሮች) ልማት ማያያዣዎች መከሰት። በሩስት ውስጥ ሾፌሮችን የማዳበር ችሎታ ደህንነቱ የተጠበቀ እና የተሻሉ አሽከርካሪዎችን ለመፍጠር ያስችለናል በትንሽ ጥረት፣ ነፃ ከወጡ በኋላ እንደ ማህደረ ትውስታ ተደራሽነት ፣ ባዶ ጠቋሚዎች እና ቋት መጨናነቅ ካሉ ችግሮች ነፃ ናቸው። ይህንን ባህሪ ለመተግበር በርካታ የሶስተኛ ወገን ፕሮጀክቶች አሉ፡

  • የኩባንያው ገንቢዎች "በበርሜል ውስጥ ያለ አሳ" ተዘጋጅቷል ደህንነትን ለመጨመር በይነገጽ እና የከርነል አወቃቀሮች ላይ የአብስትራክት ንብርብሮችን በመጠቀም ለሊኑክስ ከርነል በዝገት ቋንቋ ሊጫኑ የሚችሉ ሞጁሎችን ለመፃፍ የሚያስችል መሳሪያ። መገልገያውን በመጠቀም አሁን ባሉት የከርነል ራስጌ ፋይሎች ላይ በመመስረት ንብርብሮች በራስ-ሰር ይፈጠራሉ። ማሰር. ክላንግ ንብርብሮችን ለመገንባት ጥቅም ላይ ይውላል. ከመጠላለፍ በተጨማሪ, የተገጣጠሙ ሞጁሎች የስታቲክሊብ ጥቅል ይጠቀማሉ.
  • የሆንግ ኮንግ የቻይና ዩኒቨርሲቲ ተመራማሪዎች ማዳበር በሩስት ውስጥ ለተካተቱ ስርዓቶች እና የነገሮች በይነመረብ መሳሪያዎች ሾፌሮችን የማዳበር ፕሮጀክት፣ እሱም እንዲሁም በከርነል ራስጌ ፋይሎች ላይ በመመስረት ንብርብሮችን ለመፍጠር ቢንዲን ይጠቀማል። ማዕቀፉ በከርነል ላይ ለውጦችን ሳያደርጉ የአሽከርካሪዎችን ደህንነት እንዲያሻሽሉ ይፈቅድልዎታል - በከርነል ውስጥ ለአሽከርካሪዎች ተጨማሪ የመገለል ደረጃዎችን ከመፍጠር ይልቅ ደህንነቱ የተጠበቀ የዝገት ቋንቋ በመጠቀም በማጠናቀር ደረጃ ላይ ያሉ ችግሮችን ለመግታት ሀሳብ ቀርቧል። ተገቢው ኦዲት ሳያደርጉ በችኮላ የባለቤትነት አሽከርካሪዎችን በማፍራት የመሣሪያ አምራቾች እንዲህ ዓይነቱ አካሄድ ሊጠየቅ ይችላል ተብሎ ይታሰባል።
  • ማዕቀፍ ገንቢዎች C2 ዝገት C ኮድ ወደ ዝገት ለማሰራጨት ፣ ማውጣት በትንሹ በእጅ አርትዖቶች የከርነል ሞጁሎችን የመቀየር ሙከራዎች። ከተጠቀሱት ችግሮች አንዱ በC2Rust ውስጥ ገና ያልተደገፉ የጂሲሲ ቅጥያዎችን በሚጠቀሙ የከርነል ኮድ ክፍሎች ውስጥ ጥቅም ላይ መዋሉ ነው። ይህንን ችግር ለመፍታት C2Rust ለጂሲሲ የመስመር ላይ፣ ቅዝቃዜ፣ ተለዋጭ ስም፣ ጥቅም ላይ የዋለ እና ክፍል ድጋፍን ለመጨመር አቅዷል፣ እንዲሁም የውስጠ-መስመር ሰብሳቢውን አቅም ለማስፋት እና ችግሮችን ለመፍታት በሁለቱም የተደረደሩ እና የታሸጉ መዋቅሮች (ለምሳሌ xregs_state) . በእጅ ሥራ የሚያስፈልጋቸው ጉልህ ችግሮች ቀላል ያልሆኑ C ማክሮዎችን ወደ Rust macro መተርጎም አለመቻል እና ዓይነቶችን እንደገና መወሰን አስፈላጊ ነው ፣ ምክንያቱም C2Rust የ C ዓይነቶችን በ libc ጥቅል ውስጥ ወደ ትርጓሜዎች ስለሚተረጉም ፣ ግን ይህ ጥቅል በከርነል ሞጁሎች ውስጥ መጠቀም አይቻልም።

ምንጭ: opennet.ru

አስተያየት ያክሉ