A következő modulokat fordítottam bele a kernelbe: ZFS, FDESCFS, NullFs, UnionFS, AMD temperature modul (amdtemp), AMD System Management Network (amdsmn), CPU control (cpuctl), network bridging (if_bridge), USB-vel kapcsolatos modulok: uhid, usbhid, hidbus
Ezen kívül a configból kivettem egy csomó modult, ami az én hardware-emhez nem kell, vagy egy NAS-hoz semmi szükség rá. A kernel méretét így sikeresen lefeleztem (bár ennek itt tényleg nincs jelentősége, és egyébként a GENERIC kernellel is csak olyan module-ok töltődnek be, amikre szükség van).
A dokumentációban most sem csalódtam; minden részletesen le van írva:
A műveleteket a root felhasználóval kell végezni.
Az első lépés a kernel forrásának letöltése, és átváltás a megfelelő branch-re:
git clone -b releng/14.1 https://git.freebsd.org/src.git /usr/src
A konfigurációkat a következő könyvtárban találod:
cd /usr/src/sys/amd64/conf
A GENERIC konfigurációból érdemes kiindulni, le tudod másolni magadnak valahova, és tetszőlegesen módosítani. (Én egy a NAS nevű fájlba tettem a saját configomat, mivel a NAS-om kerneléről van szó.) Ezt egy szimbolikus link létrehozásával tudod a megfelelő könyvtárba linkelni:
cd /usr/src/sys/amd64/conf
ln -s /path/to/NAS_FreeBSD_kernel_conf/sys/amd64/conf/NAS NAS
A módosított config (az én gépemhez): https://pastebin.com/xgB7yYQH (###-vel commenteztem ki, amit kivettem a GENERIC-ből, a custom rész alatt van, amit betettem.)
Az előző build-et a következő módon tudod letörölni:
cd /usr/src
make -j12 clean
A -j paraméterrel tudod megadni, hogy hány szálon fusson a buildelés. Nekem 12 mag van a gépemben, ezért állítottam 12-re.
Kernel fordítás (továbbra is a /usr/src könyvtárban):
make -j12 buildkernel KERNCONF=NAS
Kernel installálása (a /usr/src könyvtárban):
make installkernel KERNCONF=NAS
Gép újraindítása:
reboot
Ha valami félre menne, a bootolás során választhatod az előző kernelt is.
Frissítés telepítése után a saját kernelt a /usr/src könyvtárban a git pull paranccsal tudod frissíteni, és a fenti lépésekkel tudod újra fordítani.
Nekem 12 szálon, 32 Gb memóriával, egy AMD 5600G procival, SSD-n a kernel kereken 3 perc alatt fordul le.
Még egy kiegészítés: Megéri-e custom kernelt fordítani? Szerintem, ha minden jól működik a GENERIC kernellel, vagy nincs speciális dolog, amire szükség lenne, akkor nem. Ez inkább csak próbálgatás / játszadozás.
Nem hiszem, hogy sokat lehet vele nyerni bootidőben (max pár ms), vagy memória használatban (max pár Mb).
- dlaszlo blogja
- A hozzászóláshoz be kell jelentkezni
- 470 megtekintés
Hozzászólások
Hasznos írás. Főleg, hogy még nem fordítottam FreeBSD-s kernelt, csak Linux kernelt.
- A hozzászóláshoz be kell jelentkezni
Én linux kernelt régen fordítottam, és nem is futott elsőre. :)
Ezen meglepődtem, hogy egyszerű, és viszonylag gyors folyamat, és a doksi is jó.
Itt találtam még egy jó repo-t, ami bemutatja, hogy lehet saját modulokat írni, hátha valakinek érdekes: https://github.com/xcellerator/freebsd_kernel_hacking (egy könyv is van hozzá).
- A hozzászóláshoz be kell jelentkezni
A FreeBSD doksi tényleg jó. Áttekinthető, követhető, logikus.
Köszi a linket, majd ránézek.
Aki ismer engem személyesen, az tudja, hogy nálam magas a mérce: 10000-ből 1-szer mondom valamire, hogy jó. Általában az elfogadható kifejezést használom.
- A hozzászóláshoz be kell jelentkezni
A doksi nagyon jó szerintem, ez volt az első dolog, ami miatt megszerettem a FreeBSD-t, és nagyon szimpatikus nekem ez az egész.
Még egy kiegészítés az előző linkhez, amit küldtem: ha valaki ezzel akar hobbizni, és kipróbálni hogy lehet modult írni alá, akkor viszont érdemes a fejlesztői kézikönyvvel kezdeni: https://docs.freebsd.org/en/books/developers-handbook/introduction/
(Persze ez már megint egy minden időt elvivő, kizárólagos hobbi lehetne valakinek, de hátha valakit ez érdekel. :))
- A hozzászóláshoz be kell jelentkezni
Már pont meg akartam kérdezni, hogy minek, amikor az utolsó bekezdésben csak leírtad. Egy-két főverzióval ezelőtt még volt olyan funkció, ami érdekelt, nem volt benne a GENERIC-ben, és nem lehetett modulból betölteni. Most már nem tudok ilyenről. (Szerintem legalább 10 éve leszoktam róla, igyekszem minden megoldani a betölthető modulokkal.)
Persze csak hajrá!
- A hozzászóláshoz be kell jelentkezni
Először akkor gondoltam rá, hogy kell majd fordítani, amikor a feleségem laptopjában a wifi sehogy nem akart működni, és a szükséges drivernek a forráskódját találtam meg.
Persze a szükséges modult a teljes kernel fordítás nélkül le lehetett fordítani, és be lehet tölteni.
Én sem látok most olyan esetet, amire nekem nem lenne jó a GENERIC kernel.
- A hozzászóláshoz be kell jelentkezni
Pf+Altq nem oldható meg nélküle sajnos.
Mivel én ehhez szoktam hozzá és ezt használom NAS-on, nekem mindíg marad a custom kernel készítés, ha a freebsd update frissíti a kernelt.
De nem nagy dolog, már hozzászoktam.
Plusz nyüglődtem 14-es szérián a Realtek RTL8192EU usb driver saját fordításán, mert a hostapd elhasalt tőle.
De sajnos úgy sem működött.
Maradtam 13.2 szérián ott tökéletes.
Egyébként az esetek 99 százalékában tényleg felesleges.
- A hozzászóláshoz be kell jelentkezni
Az ALTQ-ra emlékeztem (*). Tudom, hogy a szokásokat nehéz megváltoztatni, de dummynet(4) használata helyette - azt egy ideje már be lehet modulként is tölteni :-) ? (Mondjuk azt olvasom, hogy a dummynet csak 14-es óta megy pf-fel, és gondolom PF-ről IPFW-re váltani az már kicsit sok lenne egy kernel fordítás megspórolása érdekében.) Amúgy ha valaki tud egy jó összehasonlító cikket ALTQ vs dummynet témában, szóljon!
(*) Meg a VNET-re, de a VIMAGE egy ideje már benne van GENERIC-ben. Persze nyilván van még egy halom (másnak) fontos funkció.
- A hozzászóláshoz be kell jelentkezni
Ránézek majd a dummynet+pf dologra, bár már nagyon hozzászoktam az altq-hoz.
OpenBSD 3.8 óta használom, és annyira megszoktam, hogy nem valószínű, hogy váltok :-)
De majd megpróbálom, hátha.
- A hozzászóláshoz be kell jelentkezni
Megéri-e custom kernel a GENERIC helyett? Már csak azért sem, mert ha gondod van vele, leginkább csak a generic-es kernelt szeretik a troubleshoot levlistán. Ha meg esetleg még peccselve is lett, akkor hagyj fel minden reménnyel.
- A hozzászóláshoz be kell jelentkezni
Céges környezetben, csak ha valami nagyon nyomós ok van rá. (az egy másik kategória)
Ha otthon kell, azt mindenki eldönti, hogy akar-e ilyenekkel foglalkozni. (annak nyilván megéri, aki tanulni akar, vagy érdeklődik, vagy így tud csak valamit megoldani). Pl az egyik hobbim volt 12-13 éve, hogy a HTC desire telefonomhoz kernelt fordítgatok és patch-elem, kísérletezek. Az még 2.6-os kernel volt, ki lehetett próbálni pl a brain fuck schedulert (ami nem volt jobb mint a CFS szerintem), under voltage beállításokat, vagy call record patch. A call record patch pl nekem kellett, a többi meg szórakozás volt.
De az biztos, hogy ezzel az ember egy csomó feladatot vesz a nyakába, pl frissítések után fordítgatni kell, ha valami nagyobb verzió ugrás van, akkor eltérések lehetnek, esetleg a patch sem jó már.
- A hozzászóláshoz be kell jelentkezni
Nalunk, ha jol remlik a TCP_RACK(4) miatt kell forgatni sajat kernel-t, de lehet a ktls + cx6 hw offload miatt is.
- A hozzászóláshoz be kell jelentkezni