Mae'r dyfodol eisoes yma neu cod yn uniongyrchol yn y porwr

Fe ddywedaf wrthych am sefyllfa ddoniol a ddigwyddodd i mi, a sut i ddod yn gyfrannwr i brosiect enwog.

Ddim yn bell yn Γ΄l roeddwn i'n tincian gyda syniad: cychwyn Linux yn uniongyrchol o UEFI ...
Nid yw'r syniad yn newydd ac mae nifer o lawlyfrau ar y pwnc hwn. Gallwch weld un ohonyn nhw yma

A dweud y gwir, mae fy ymdrechion hirsefydlog i ddatrys y mater hwn wedi arwain at ffurfioli'n llwyr y penderfyniad. Mae'r ateb yn eithaf gweithio ac rwy'n ei ddefnyddio ar rai o'm peiriannau cartref. Disgrifir yr ateb hwn ychydig yn fwy manwl. yma.

Hanfod UEFI-Boot yw bod y rhaniad ESP (Rhaniad System EFI) wedi'i gyfuno Γ’'r cyfeiriadur /boot. Y rhai. mae pob cnewyllyn a delwedd bootstrap (initrd) wedi'u lleoli ar yr un rhaniad y gall UEFI lansio ffeiliau gweithredadwy ohono ac, yn benodol, lansio llwythwyr cychwyn system. Ond mae'r cnewyllyn Linux ei hun mewn llawer o ddosbarthiadau eisoes wedi'i ymgynnull gyda'r opsiwn UEFISTUB, sy'n caniatΓ‘u i'r cnewyllyn ei hun gael ei lansio o UEFI.

Mae gan yr ateb hwn un eiliad annymunol - mae'r rhaniad ESP wedi'i fformatio yn FAT32, lle mae'n amhosibl creu cysylltiadau caled (y mae'r system yn eu creu yn rheolaidd wrth ddiweddaru'r initrd). Ac nid oes dim byd arbennig o droseddol am hyn, ond nid yw gweld rhybuddion system wrth ddiweddaru cydrannau cnewyllyn yn ddymunol iawn ...

Mae yna ffordd arall.

Gall rheolwr cychwyn UEFI (yr un un lle mae angen i chi gofrestru'r cychwynnydd OS), yn ogystal Γ’ llwythwyr cychwyn / cnewyllyn Linux, hefyd lwytho gyrwyr. Felly gallwch chi lwytho'r gyrrwr ar gyfer y system ffeiliau lle mae gennych chi / cist a llwytho'r cnewyllyn yn uniongyrchol oddi yno gan ddefnyddio UEFI. Mae angen gosod y gyrrwr, wrth gwrs, yn y rhaniad ESP. Dyma'n fras beth mae llwythwyr cychwyn fel GRUB yn ei wneud. Ond yr uchafbwynt yw bod yr holl swyddogaethau GRUB a ddefnyddir yn aml eisoes yn UEFI. Yn fwy manwl gywir yn ei rheolwr llwytho i lawr. Ac i fod hyd yn oed yn fwy diflas, mae gan reolwr cist UEFI hyd yn oed mwy o alluoedd mewn rhai materion.

Mae'n ymddangos ei fod yn ddatrysiad hardd, ond mae un β€œOND” (neu yn hytrach, yr oedd, ond mwy am hynny yn ddiweddarach). Y ffaith yw bod system gyrrwr UEFI yn eithaf syml. Nid oes y fath beth Γ’ gosod system ffeiliau neu gysylltu gyrrwr Γ’ dyfais benodol. Mae galwad system gyda'r enw confensiynol Map, sy'n cymryd pob gyrrwr yn ei dro ac yn ceisio ei gysylltu Γ’ phob dyfais, o leiaf addas. Ac os oedd y gyrrwr yn gallu codi'r ddyfais, yna mae mapio yn cael ei greu - cofnod cysylltu. Dyma'n union sut y dylid cychwyn y gyrrwr sydd newydd ei lwytho mewn pentwr cyffredin Γ’'r lleill i gyd. A'r cyfan sydd ei angen arnoch yw gosod un did (LOAD_OPTION_FORCE_RECONNECT) i 1 yn y cofnod cychwyn gyrrwr a bydd UEFI yn gwneud y remap byd-eang hwn ar Γ΄l ei lwytho.

Ond nid yw hyn mor hawdd i'w wneud. Nid yw'r cyfleustodau safonol efibootmgr (a ddefnyddir i ffurfweddu rheolwr dadlwytho UEFI) yn gwybod sut (neu yn hytrach, nid oedd yn gwybod sut) i osod y darn hwn. Roedd yn rhaid i mi ei osod Γ’ llaw trwy weithdrefn eithaf cymhleth a pheryglus.

Ac unwaith eto, ar Γ΄l ceisio ei wneud gyda fy nwylo, ni allwn ei sefyll a ffurfioli mater ar GitHub gofyn i ddatblygwyr ychwanegu'r nodwedd hon.

Aeth amryw ddyddiau heibio, ond ni thalodd neb sylw i'm cais. Ac allan o chwilfrydedd, edrychais ar y cod ffynhonnell... fe wnes i ei fforchio, a darganfod ar fy ngliniau sut i ychwanegu'r nodwedd hon... β€œAr fy ngliniau” oherwydd wnes i ddim gosod dim byd felly a golygu'r ffynhonnell cod yn uniongyrchol yn y porwr.

Dwi'n nabod C (yr iaith raglennu) yn arwynebol iawn, ond fe wnes i fraslunio datrysiad bras (copi-past yn bennaf)... ac yna meddyliais - o leiaf mae'n debyg bod gen i lawer o wallau yno (fy nghynigion yn y gorffennol i olygu rhai rhywun arall). Cwblhawyd cod C tua'r 10fed tro) Byddaf yn cyhoeddi Cais Tynnu. Wel wedi'i ddylunio.

Ac yno Travis CI troi allan i fod ynghlwm i wirio ceisiadau tynnu. A dywedodd yn ddiwyd wrthyf fy holl gamgymeriadau. Wel, os oes gwallau hysbys, nid oes angen eu trwsio: eto, yn union yn y porwr, ac ar y pedwerydd cynnig fe weithiodd y cod (cyflawniad i mi).

Ac yn union fel hynny, heb adael y porwr, fe wnes i fformatio Cais Tynnu gwirioneddol iawn i mewn i gyfleustodau a ddefnyddir ym mron pob dosbarthiad Linux modern.

Cefais fy synnu gan y ffaith, heb wybod yr iaith mewn gwirionedd, heb sefydlu unrhyw beth (mae dibyniaethau angen cryn dipyn o lyfrgelloedd ar gyfer cydosod), a heb hyd yn oed redeg y casglwr, fe wnes i β€œgodio” nodwedd gwbl weithredol a defnyddiol yn y porwr.

Fodd bynnag, nid oedd fy nghais yn ymateb ers Mawrth 19, 2019, ac roeddwn eisoes wedi dechrau anghofio amdano.

Ond ddoe ychwanegwyd y cais hwn at feistr.

Felly am beth mae fy stori? Ac mae'n sΓ΄n am y ffaith, o fewn fframwaith technolegau modern, y gellir ysgrifennu cod go iawn eisoes yn y porwr, heb ddefnyddio unrhyw offer datblygu a dibyniaethau yn lleol.

Ar ben hynny, mae'n rhaid i mi gyfaddef, dyma fy ail gais tynnu eisoes ar gyfer cyfleustodau adnabyddus (o leiaf mewn cylchoedd cul). Y tro diwethaf, arweiniodd fy nghais i gywiro arddangosiad rhai meysydd yn rhyngwyneb gwe SyncThing at fy ngolygiad un llinell yn llythrennol mewn amgylchedd nad wyf yn ei wybod o gwbl.

Dim ond defnyddwyr cofrestredig all gymryd rhan yn yr arolwg. Mewngofnodios gwelwch yn dda.

A ddylwn i ysgrifennu mwy neu beidio?

  • ie

  • Nid yw werth ei

Pleidleisiodd 294 o ddefnyddwyr. Ymataliodd 138 o ddefnyddwyr.

Ffynhonnell: hab.com

Ychwanegu sylw