Masa depan sudah ada di sini atau kod terus dalam penyemak imbas

Saya akan memberitahu anda tentang situasi lucu yang berlaku kepada saya, dan cara menjadi penyumbang kepada projek terkenal.

Tidak lama dahulu saya bermain-main dengan idea: boot Linux terus dari UEFI...
Idea ini bukan baru dan terdapat beberapa manual mengenai topik ini. Anda boleh melihat salah seorang daripada mereka di sini

Sebenarnya, percubaan lama saya untuk menyelesaikan isu ini menghasilkan penyelesaian yang diformalkan sepenuhnya keputusan. Penyelesaiannya agak berkesan dan saya menggunakannya pada beberapa mesin rumah saya. Penyelesaian ini diterangkan dengan lebih terperinci. di sini.

Intipati UEFI-Boot ialah partition ESP (EFI System Partition) digabungkan dengan direktori /boot. Itu. semua kernel dan imej bootstrap (initrd) terletak pada partition yang sama dari mana UEFI boleh melancarkan fail boleh laku dan, khususnya, melancarkan pemuat but sistem. Tetapi kernel Linux itu sendiri dalam banyak pengedaran sudah dipasang dengan pilihan UEFISTUB, yang membolehkan kernel itu sendiri dilancarkan daripada UEFI.

Penyelesaian ini mempunyai satu momen yang tidak menyenangkan - partition ESP diformatkan dalam FAT32, di mana mustahil untuk membuat pautan keras (yang sistem selalu buat semasa mengemas kini initrd). Dan tidak ada apa-apa jenayah yang khusus tentang ini, tetapi melihat amaran sistem apabila mengemas kini komponen kernel tidak begitu menyenangkan...

Ada cara lain.

Pengurus but UEFI (yang sama di mana anda perlu mendaftarkan pemuat but OS) boleh, sebagai tambahan kepada pemuat but/ kernel Linux, juga memuatkan pemacu. Jadi anda boleh memuatkan pemacu untuk sistem fail di mana anda mempunyai /boot dan memuatkan kernel terus dari sana menggunakan UEFI. Pemandu, sudah tentu, perlu diletakkan dalam partition ESP. Inilah yang dilakukan oleh pemuat but seperti GRUB. Tetapi kemuncaknya ialah semua fungsi GRUB yang kerap digunakan sudah ada dalam UEFI. Lebih tepat lagi dalam pengurus muat turunnya. Dan untuk menjadi lebih membosankan, pengurus but UEFI mempunyai lebih banyak keupayaan dalam beberapa perkara.

Nampaknya ia merupakan penyelesaian yang cantik, tetapi terdapat satu "TETAPI" (atau lebih tepat, ia adalah, tetapi lebih lanjut mengenainya kemudian). Hakikatnya ialah sistem pemacu UEFI agak mudah. Tidak ada perkara seperti memasang sistem fail atau mengaitkan pemandu dengan peranti tertentu. Terdapat panggilan sistem dengan nama konvensional Map, yang membawa setiap pemandu secara bergilir-gilir dan cuba mengaitkannya dengan semua, sekurang-kurangnya peranti yang sesuai. Dan jika pemandu dapat mengambil peranti itu, maka pemetaan dibuat - rekod penyambungan. Beginilah cara pemacu yang baru dimuatkan harus dimulakan dalam timbunan biasa dengan semua yang lain. Dan apa yang anda perlukan ialah menetapkan satu bit (LOAD_OPTION_FORCE_RECONNECT) kepada 1 dalam rekod but pemacu dan UEFI akan melakukan pemetaan semula global ini selepas memuatkannya.

Tetapi ini tidak begitu mudah untuk dilakukan. Utiliti efibootmgr standard (yang digunakan untuk mengkonfigurasi pengurus offload UEFI) tidak tahu bagaimana (atau lebih tepatnya, tidak tahu bagaimana) untuk menetapkan bit ini. Saya terpaksa memasangnya secara manual melalui prosedur yang agak rumit dan berbahaya.

Dan sekali lagi, setelah mencuba melakukannya dengan tangan saya, saya tidak tahan dan membuat formal isu di GitHub meminta pembangun menambah ciri ini.

Beberapa hari berlalu, tetapi tiada siapa yang menghiraukan permintaan saya. Dan kerana ingin tahu, saya melihat kod sumber... Saya bercabang, dan memikirkan cara untuk menambah ciri ini... "Pada lutut saya" kerana saya tidak memasang apa-apa seperti itu dan mengedit sumber kod terus dalam penyemak imbas.

Saya tahu C (bahasa pengaturcaraan) secara dangkal, tetapi saya melakarkan penyelesaian anggaran (kebanyakannya salin-tampal)... dan kemudian saya fikir - sekurang-kurangnya saya mungkin mempunyai banyak kesilapan di sana (percubaan masa lalu saya untuk mengedit orang lain Kod C telah selesai kira-kira kali ke-10) Saya akan mengeluarkan Permintaan Tarik. Baiklah dirancang.

Dan di sana Travis CI ternyata dilampirkan untuk menyemak permintaan tarik. Dan dia bersungguh-sungguh memberitahu saya semua kesilapan saya. Nah, jika terdapat ralat yang diketahui, tidak perlu membetulkannya: sekali lagi, betul-betul dalam penyemak imbas, dan pada percubaan keempat kod itu berfungsi (satu pencapaian untuk saya).

Dan seperti itu, tanpa meninggalkan penyemak imbas, saya memformat Permintaan Tarik yang sangat nyata ke dalam utiliti yang digunakan dalam hampir semua pengedaran Linux moden.

Saya terkejut dengan hakikat bahawa, tanpa benar-benar mengetahui bahasa, tanpa menyediakan apa-apa (kebergantungan memerlukan beberapa perpustakaan untuk pemasangan), dan tanpa pernah menjalankan pengkompil, saya hanya "mengkodkan" ciri yang berfungsi sepenuhnya dan berguna dalam pelayar .

Walau bagaimanapun, permintaan saya kekal tidak respon sejak 19 Mac 2019, dan saya sudah mula melupakannya.

Tetapi semalam permintaan ini telah ditambah kepada tuan.

Jadi apa cerita saya? Dan dia bercakap tentang fakta bahawa, dalam rangka teknologi moden, ternyata kod sebenar sudah boleh ditulis dalam penyemak imbas, tanpa menggunakan sebarang alat pembangunan dan kebergantungan secara tempatan.

Lebih-lebih lagi, saya mesti mengakui, ini sudah menjadi permintaan tarik kedua saya untuk utiliti yang terkenal (sekurang-kurangnya dalam kalangan sempit). Kali terakhir, permintaan saya untuk membetulkan paparan beberapa medan dalam antara muka web SyncThing menghasilkan pengeditan satu baris saya secara literal dalam persekitaran yang saya tidak tahu sama sekali.

Hanya pengguna berdaftar boleh mengambil bahagian dalam tinjauan. Log masuk, Sama-sama.

Perlukah saya menulis lebih banyak atau tidak?

  • ya

  • tidak berbaloi

294 pengguna telah mengundi. 138 pengguna berpantang.

Sumber: www.habr.com

Tambah komen