Već dvadesetak godina postoji dodatak zvan "PREEMPT_RT patch" koji kad se primjeni na izvorni kod jezgre Linuxa pokuša ispraviti neke od tih nedostataka dodavajući točke prekida u kod. Međutim, taj dodatak je do sada bio izvan strukture službenog koda jezgre, što znači da su osobe koje su taj dodatak održavale morale ažurirati taj kod pri svakoj promjeni koda jezgre Linuxa. Naravno da to nije rađeno baš za svaku inačicu jezgre već tek povremeno. Od inačice jezgre 6.12 taj dodatak je postao službenim dijelom izvorna koda jezgre Linuxa što će u budućnosti značiti da se ne treba zasebno održavati. Svaka promjena jezgre će sada uzimati u obzir i taj nadodani kod i po potrebi prilagođavati se njemu.
Zadatak ove vježbe je prevesti jezgru Linuxa dodavanjem potrebnih zastavica da se uključi nadodani kod uz PREEMPT_RT, pokrenuti sustav s tom novom jezgrom, te istražiti promjene koje su time uključene u kod. Izdvojiti nekoliko njih (3-4) i kratko ih opisati.
Minimalno što treba ostvariti:
- izgraditi jezgru korištenjem tog dodatka i pokazati da sustav radi
- istražiti promjene koje ta postavka mijenja u jezgri (tražiti
CONFIG_PREEMPT_RT
u kodu, npr. preko elixir.bootlin.com) - kratko opisati 3-4 (netrivijalne) promjene u kodu koje poboljšavaju svojstva jezgre (ili ispitati sustav kao u B.2.)
Kuharice kako izgraditi novu jezgru iz izvorna koda lako pronaći na webu. Neke od njih su navedene među linkovima ispod.
Ukratko, potrebno je nekoliko koraka
- Pripremiti Linux s dosta slobodna prostora na disku
- Izvorni kod, prevođenje te instalacija nove jezgre zahtjeva dodatnih skoro 30 GB prostora na disku!
- Već pripremljena slika (za ostale vježbe) nema dovoljno velik disk!
- Ali se on može povećati. Postaviti na minimalno 50 GB (možda i 60 GB).
- Upute za to ako se koristi VMware su ovdje. Ukratko: dok je virtualno računalo ugašeno, preko postaviki "Edit Virtual Machine Settings" odabrati "Hard Disk" te "Utilities > Expand.
- Pokrenuti virtualno računalo.
- U Linuxu povećati tu particiju (npr. "Pomagala->Diskovi->odabrati disk te postavke (gumb s okruglim znakom za postavke) i tamo "Promjena veličine" (slajder povući skroz desno).
- Nakon promjene najbolje restartati virutalno računalo
- Instalirati sve potrebne alate
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
- Dohvatiti izvorni kod željene inačice jezgre (u prikazanom primjeru je to 6.12.8)
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.12.8.tar.xz tar xvf linux-6.12.8.tar.xz cd linux-6.12.8
- Postaviti željene postavke
- za početak dohvatiti postojeće postavke
cp -v /boot/config-$(uname -r)* .config
- napraviti potrebne promjene (npr. uključiti CONFIG_PREEMPT_RT)
scripts/config --disable DEBUG_INFO scripts/config --set-str SYSTEM_TRUSTED_KEYS "" scripts/config --set-str SYSTEM_REVOCATION_KEYS "" scripts/config --enable CONFIG_PREEMPT_RT #ili preko "make menuconfig" te: # General Setup -> Preemption Model -> Fully Preemptible Kernel (Real-Time)
- za početak dohvatiti postojeće postavke
- Pokrenuti prevođenje
make (ili make -j4 ili make -j`nproc`, ali ne pretjerivati, treba i memorije!)
- Prevođenje može potrajati!
- Novije računalo to možda može obaviti za 15-30 min, ali starija će trebati možda i nekoliko sati!
- Primijeniti novo izgrađenu jezgru i module
sudo make modules_install sudo make install
- Ponovno pokrenuti sustav i odabrati novu jezgru (tj. vjerojatno je već postavljena kao zadana)
- Provjeriti je li zaista pokrenuta inačica jezgre
uname -a
- U ispisu treba biti navedena inačica jezgre (broj
6.12.8
za ovaj primjer) te oznake jezgre (#1 SMP PREEMPT_RT
)
- U ispisu treba biti navedena inačica jezgre (broj
- Nova jezgra nije brža! Ali bi trebala imati ima kraće vrijeme odziva, možda veću granulaciju sata za alarme, ...
Korisni linkovi: