Geri qayıt
Steam Link-də NixOS: əl ilə yığılan kexec modulu Valve-in imzalı nüvə məhdudiyyətini yan keçir
SiTech AI Team3 წთ. საკითხავი

Steam Link-də NixOS: əl ilə yığılan kexec modulu Valve-in imzalı nüvə məhdudiyyətini yan keçir

George Huebner 2018-ci ildə endirimlə aldığı Steam Link-i daim işləyən ARM serverinə çevirib. Cihaz yalnız Valve-in imzaladığı nüvələri yüklədiyi üçün o, çatışmayan kexec çağırışını əlavə edən minimal nüvə modulu yığıb və yükləməni NixOS obrazına ötürüb.

George Huebner şkafında 2018-ci ildə endirimlə aldığı və hələ də işlək qalan Steam Link tapıb. Ethernet, Wi-Fi, Bluetooth və bir neçə USB portu olan kiçik ARM cihazının daim işləyən, az enerji sərf edən maşın kimi faydalı olacağını düşünüb. 26 sentyabr 2026-cı ildə dərc etdiyi yazıda NixOS-u cihazda necə işə saldığını və bunu mümkün edən nüvə modulu hiyləsini izah edir.

Çətin hissəni artıq fijam təxəllüslü mütəxəssis həll etmişdi; müəllif onun qeydlərinə istinad edir. Əsas maneə budur: cihazın yükləyicisi yalnız Valve-in imzaladığı nüvələri qəbul edir, ona görə xüsusi nüvəni birbaşa işə salmaq mümkün deyil. Həll yolu əvvəlcə Valve-in təsdiqlədiyi nüvəyə yüklənmək, sonra kexec vasitəsilə yeni nüvəyə keçməkdir.

Modul kimi yenidən yığılan sistem çağırışı

Burada ikinci divar çıxır: Valve-in göndərdiyi nüvə CONFIG_KEXEC aktiv olmadan yığılıb, yəni kexec sistem çağırışı sistemdə ümumiyyətlə yoxdur. Müəllif kexec-in uyğun mənbə fayllarını minimal nüvə modulunda birləşdirib kexec_load.ko modulunu yaradıb; modul işləyən sistemə çatışmayan çağırışı əlavə edir. Eyni üsul başqa distributivlər üçün də istifadə olunub, lakin çoxu fijam-ın saytındakı hazır modulu yükləyib. Huebner internetdən nüvə modulu yükləməyə etibar etməyib və onu özü yığıb.

13 illik nüvə üçün çarpaz kompilyasiya

NixOS-un istifadəçi məkanını, nüvəsini və initrd-ni yığmaq sadədir: lib.nixosSystem-a düzgün system və crossSystem ötürmək kifayətdir. Memarlıq seçimi daha mürəkkəb oldu. Valve-in alət dəsti armv7a üçün nəzərdə tutulub, amma uyğun crossSystem parametri armv7a-unknown-linux-gnueabihf Nix-in Go yığım mexanizmi ilə pis uzlaşır, buna görə müəllif armv7l-ni seçib və aarch64 maşından çarpaz kompilyasiya edib. Modulun özü Valve-in 3.8.13 versiyalı, 13 illik nüvə qoluna qarşı yığılmalıdır: müasir GCC ilə yığılması üçün yamalar, həmçinin yalnız make modules_prepare deyil, tam nüvə yığımı tələb olundu, çünki modul versiyalaşdırması Module.symvers faylını istəyir və o olmadan insmod modulu rədd edir.

Kor uçuş və obrazın kiçildilməsi

Ötürməni yoxlamaq çətin idi: yeni nüvə ilə HDMI işləmir, müəllif isə UART üçün cihazı açmayıb. Əvvəlcə diske işarə faylı yazıb sonra yenidən başlayaraq uğuru bildirən BusyBox əsaslı minimal initramfs sınayıb, sonra şəbəkəsi aktiv NixOS initrd-sinə və Netcat vasitəsilə əks shell-ə keçib. İki detal vacib oldu: USB sürücüdən oxumaq üçün reset_berlin initrd-in mövcud modullarına əlavə edilməli idi və systemd əsaslı olmayan köhnə initrd istifadə olunmalıydı. Yükləmə işləyəndə obraz hələ də 2,3 GB idi; müəllif sənədləri, şriftləri, XDG xidmətlərini, Nix-in özünü və 1,8 GB-lıq linux-firmware paketindəki bütün firmware bloblarını biri istisna olmaqla çıxarıb 1,2 GB-da dayandı və nəticəni kifayət qədər yaxşı saydı. Yazının sonunda qeyd edir ki, kimsə bu yaxınlarda vibe coding yolu ilə yüklənə bilən NixOS konfiqurasiyası əldə edib, lakin həmin konfiqurasiya yenidən başlatmaları səhv idarə edir və lazımsız ikili bloblar istifadə edir. Flake və modulun kodu yazı ilə birlikdə dərc olunub.

SSiTech

SiTech — AI ilə gücləndirilmiş veb hazırlanması

Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.