Nowe posty

Autor Wątek: Kompilacja kernela.  (Przeczytany 2581 razy)

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2757
  • 1709
    • Zobacz profil
Kompilacja kernela.
« dnia: 2019-01-26, 13:05:35 »
Nie znam sie na kompilacji kernela, ale chcialem sprobowac z domyslnymi ustawieniami

Probowalem w ten sposob
make ARCH=x86 defconfig
make

Ale ciagle mi wychodzi jakas wersja odchudzona
config ma linii
$ grep y .config | wc -l
1198
a sterownikow ma
...  CC      arch/x86/boot/version.o
  CC      arch/x86/boot/video-vga.o
  CC      arch/x86/boot/video-vesa.o
  CC      arch/x86/boot/video-bios.o
  LD      arch/x86/boot/setup.elf
  OBJCOPY arch/x86/boot/setup.bin
  OBJCOPY arch/x86/boot/vmlinux.bin
  HOSTCC  arch/x86/boot/tools/build
  BUILD   arch/x86/boot/bzImage
Setup is 15452 bytes (padded to 15872 bytes).
System is 6468 kB
CRC a7a2a8b9
Kernel: arch/x86/boot/bzImage is ready  (#1)
  Building modules, stage 2.
  MODPOST 18 modules
  CC      drivers/thermal/x86_pkg_temp_thermal.mod.o
  LD [M]  drivers/thermal/x86_pkg_temp_thermal.ko
  CC      fs/efivarfs/efivarfs.mod.o
  LD [M]  fs/efivarfs/efivarfs.ko
  CC      net/ipv4/netfilter/ipt_MASQUERADE.mod.o
  LD [M]  net/ipv4/netfilter/ipt_MASQUERADE.ko
  CC      net/ipv4/netfilter/iptable_nat.mod.o
  LD [M]  net/ipv4/netfilter/iptable_nat.ko
  CC      net/ipv4/netfilter/nf_log_arp.mod.o
  LD [M]  net/ipv4/netfilter/nf_log_arp.ko
  CC      net/ipv4/netfilter/nf_log_ipv4.mod.o
  LD [M]  net/ipv4/netfilter/nf_log_ipv4.ko
  CC      net/ipv4/netfilter/nf_nat_ipv4.mod.o
  LD [M]  net/ipv4/netfilter/nf_nat_ipv4.ko
  CC      net/ipv4/netfilter/nf_nat_masquerade_ipv4.mod.o
  LD [M]  net/ipv4/netfilter/nf_nat_masquerade_ipv4.ko
  CC      net/ipv6/netfilter/nf_log_ipv6.mod.o
  LD [M]  net/ipv6/netfilter/nf_log_ipv6.ko
  CC      net/netfilter/nf_log_common.mod.o
  LD [M]  net/netfilter/nf_log_common.ko
  CC      net/netfilter/nf_nat.mod.o
  LD [M]  net/netfilter/nf_nat.ko
  CC      net/netfilter/nf_nat_ftp.mod.o
  LD [M]  net/netfilter/nf_nat_ftp.ko
  CC      net/netfilter/nf_nat_irc.mod.o
  LD [M]  net/netfilter/nf_nat_irc.ko
  CC      net/netfilter/nf_nat_sip.mod.o
  LD [M]  net/netfilter/nf_nat_sip.ko
  CC      net/netfilter/xt_LOG.mod.o
  LD [M]  net/netfilter/xt_LOG.ko
  CC      net/netfilter/xt_addrtype.mod.o
  LD [M]  net/netfilter/xt_addrtype.ko
  CC      net/netfilter/xt_mark.mod.o
  LD [M]  net/netfilter/xt_mark.ko
  CC      net/netfilter/xt_nat.mod.o
  LD [M]  net/netfilter/xt_nat.ko

Czyli sterowników  tyle co pies napłakał ...
Nie chcialem uzywać oldconfig, bo znowu musiałbym się naklikać żeby ustawić nowe opcje.
$ find ./ -type f -name "*.ko"
./drivers/thermal/x86_pkg_temp_thermal.ko
./net/ipv6/netfilter/nf_log_ipv6.ko
./net/ipv4/netfilter/nf_log_arp.ko
./net/ipv4/netfilter/ipt_MASQUERADE.ko
./net/ipv4/netfilter/iptable_nat.ko
./net/ipv4/netfilter/nf_nat_masquerade_ipv4.ko
./net/ipv4/netfilter/nf_nat_ipv4.ko
./net/ipv4/netfilter/nf_log_ipv4.ko
./net/netfilter/xt_addrtype.ko
./net/netfilter/nf_log_common.ko
./net/netfilter/xt_nat.ko
./net/netfilter/xt_LOG.ko
./net/netfilter/xt_mark.ko
./net/netfilter/nf_nat.ko
./net/netfilter/nf_nat_ftp.ko
./net/netfilter/nf_nat_irc.ko
./net/netfilter/nf_nat_sip.ko
./fs/efivarfs/efivarfs.ko
Nie wiem czy to jest kwestia ze nie istalowalem żadnych zależnosći , czy ja coś źle robie ...
Czy istnieje możliwosc taka najprostrza kompilacja ?
Testowalem to na Linux Mint 18 z kernelem 4.9.153
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline pavbaranov

  • Users
  • Guru
  • *****
  • Wiadomości: 878
    • Zobacz profil
Odp: Kompilacja kernela.
« Odpowiedź #1 dnia: 2019-01-26, 14:02:21 »
Zadam bzdurne pytanie: po co Ci to? :) (retoryczne, sam jak pierwszy kernel robiłem, to nie wiedziałem zbytnio po co).
Z uwagi na to jaki system mam - u mnie jest to proste, niemniej jednak tutaj: https://wiki.archlinux.org/index.php/Kernel/Traditional_compilation masz opisany tradycyjny sposób budowy kernela, którym również się posiłkowałem. Wiem, że to z wiki Archa, ale jest to "ogólne" i właściwe dla każdej dystrybucji. Drugie takie wiki jest na wiki Gentoo oraz w materiałach LFS. Podaję archowe, bo chyba najprzystępniej opisane.
Podaję też do Debiana, bo jest to najbardziej zbliżone do Minta: https://debian-handbook.info/browse/stable/sect.kernel-compilation.html

Teraz lekki kubeł zimnej wody z moich doświadczeń (a kompiluję swoje kernele kilka już ładnych lat).
1. "Odchudzenie" kernela ma jakiś lekki sens, ale nie spodziewaj się, że nagle, po takim zabiegu system zostanie "odmieniony".
2. Odchudzając kernel dobrze jest bardzo dokładnie poznać komponenty komputera. Inaczej łatwo można doprowadzić do kernel panic.
3. Oprócz odchudzenia, bardzo dobre efekty daje nałożenie różnych dostępnych patchy, które w istocie zmieniają jego zachowanie. Oczywiście zależy to od systemu (czyt. komputera) oraz od sposobu korzystania z niego i pod to dobiera się łatki. Taka kompilacja ma sens, bo w istocie system z takim kernelem zachowuje się lepiej (jest "szybszy", bardziej responsywny).
Mogę jedynie podać Ci te łatki, które ja nakładam:
a. PDS: http://cchalpha.blogspot.com/ Uwaga: decydując się, powinieneś dobrać odpowiednią wersję dla danej linii kernela, bo inaczej się nie nałoży lub będzie działać wadliwie.
b. UKSM: https://github.com/dolohow/uksm/ - jw.
c. BFQ-MQ: odsyłam do kernela na AUR, bo tu masz "gotowy", aktualny patch: https://aur.archlinux.org/packages/linux-bfq-mq (w źródłach).
d. tzw. patch graysky'ego, który umożliwia kompilację kernela pod dany procesor: https://github.com/graysky2/kernel_gcc_patch
e. dodatkowo ostatnio eksperymentuję z -O3.
Popularnym rozwiązaniem jest również tzw. patch-ck/linux-ck bądź sam muqss: http://ck-hack.blogspot.com/. Ja mam AMD i przez dłuższy czas z tym patchem, kernel chodził mi zdecydowanie gorzej od PDS, stąd wybrałem to rozwiązanie. Ostatnio jednakże, moim awaryjnym kernelem jest linux-zen, który również ma MuQSS i chodzi on w miarę dobrze. W okresie "przejściowym" MuQSS okazywał się chyba zdecydowanie lepszy dla procesorów Intela niż AMD (może dlatego, że sam twórca ma właśnie Intela).
4. Dobre efekty daje również wyłączenie zbędnych schedulerów. W istocie przyspiesza to start systemu.
5. Zerknij sobie na następujące kernele (tu są i gotowce i łatki, dostarczane są również pliki config):
a. https://xanmod.org/
b. https://liquorix.net/
c. https://dragon-kernel.pro/
d. https://github.com/zen-kernel/
e. https://gitlab.com/post-factum/pf-kernel/wikis/README
(ten ostatni, w aktualnej wersji, jest mocno zbliżony w zestawie patchy do tego, który ja używam).

Podsumowując - pomijając kwestie "szkoleniowe" - kompilacja kernela, dla samej kompilacji - ma IMO niewielki sens. Zdecydowanie większy, gdy ten kernel jakoś modernizujesz.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3047
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Kompilacja kernela.
« Odpowiedź #2 dnia: 2019-01-26, 20:01:32 »
Konfiguracja "defconfig" to szablonowe ustawienia "na szybko" dla minimalnego systemu, jego przeznaczeniem pierw "make defconfig" dla wygenerowania szkieletu a potem "make xconfig/nconfig/menuconfig", żeby go dostosować do swoich potrzeb. Ja częściej zaczynam co prawda od "make allnoconfig", potem "make xconfig/nconfig/menuconfig" i aktualizacje do nowszych wersji "make oldconfig".

Konfiguracja "oldconfig" bierze konfiguracje bieżącego systemu i próbuje jej użyć jako konfiguracji nowego. Pytania są o nową funkcjonalność, która nie istniała w starej wersji (np czy kompilować driver do jakiejś nowej karty sieciowej, itp). Warto raz przebrnąć przez "oldconfig", który zada milion pytań przy przejściu z wersji np. 4.9 na 4.20 (dużo się zmieniło), natomiast przy przejściu z 4.20.3 na 4.20.4 (czyli przy standardowych aktualizacjach) zada jedno-dwa pytania albo i wcale...

Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2757
  • 1709
    • Zobacz profil
Odp: Kompilacja kernela.
« Odpowiedź #3 dnia: 2019-01-27, 02:09:33 »
Cytuj
Zadam bzdurne pytanie: po co Ci to? :) (retoryczne, sam jak pierwszy kernel robiłem, to nie wiedziałem zbytnio po co).
Potrzebuje zaktualizowac kernel w swoim systemie.I nie tylko dla siebie.
 Jedyna mozliwosc to zakasac rekawy to skompilowac samemu i spaczkowac.
Kiedys juz sie za to zabieralem bardziej hobbystycznie, ale odpadlem conajmniej dwa razy.
Raz kiedy mialem juz dosc wybierania tych opcji, a drugi przy poprawianiu zawilego pliku spec dla zbudowania pakietu rpm.
Orginalny src.rpm jest budowany z oldconfig + trzeba wybrac opcje.
Zdawalo mi sie wtedy ze config z kernel/arch/x86/... jest identyczny z oldconfig + ma nowe opcje, ale chyba sie pomylilem.
Kierowalem sie wtedy jakims manualem ktory sugerowal mniej doswiadczonym uzytkownikom uzycia domyslnego configu.
W grudniu 2018 po dwoch tygodniach prob udalo mi sie ogarnac troche plik .spec na tyle aby wywalic czesc nie aktualnych rzeczy,
wywalic narazie patche, bo wiekszosc jest nie kompatybilna z nowym kernelem, ale warto sie nim przyjrzec w przyszlosci, bo zauwazylem ze np.
jeden z nich zwieksza pamiec dla linuxa przy starcie.
W czasie testow na virtualboxie udalo mi sie uruchomic system z kernelem, choc zauwazylem tylko ze brakuje sterownika Intel.
Pozniej "kolega" zwrocil mi uwage ze kernel jest "bardzo odchudzony i brakuje sterownikow", przyjrzalem sie kernelom i faktycznie ma racje.
Niestety uzycie opcji " make ARCH=i386 savedefconfig " zamiast "oldconfig" prawdopodobnie spowodowalo ze kernel jest ogromnie odchudzony.
 jak przy uzyciu "defconfig"  lub "i386_defconfig".
Stwierdzam to po tym ze kernel wyzej skompilowalem recznie i ilosc sterownikow jest mniej wiecej tak samo strasznie mala.
Przyjrzalem sie ostatniej nocy  "make help"
Cytuj
  savedefconfig   - Save current config as ./defconfig (minimal config)
https://www.kernel.org/doc/makehelp.txt
Ale nic nie pisalo przy innych, stad moje zdziwienie oco chodzi.
Testowanie wszystkich dostepnych opcji by mi troche zajelo, dlatego wolalem sie poradzic.
Dzieki, poczytam troche, sprobuje i dam znac.
« Ostatnia zmiana: 2019-01-27, 02:13:18 wysłana przez 1709 »
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline pavbaranov

  • Users
  • Guru
  • *****
  • Wiadomości: 878
    • Zobacz profil
Odp: Kompilacja kernela.
« Odpowiedź #4 dnia: 2019-01-27, 03:04:37 »
Cytuj
Zadam bzdurne pytanie: po co Ci to? :) (retoryczne, sam jak pierwszy kernel robiłem, to nie wiedziałem zbytnio po co).
Potrzebuje zaktualizowac kernel w swoim systemie.I nie tylko dla siebie.
Ale przecież nawet dla Minta znajdziesz gotowca. To jest dokładnie ten sam kernel, który jest w Ubuntu. Tutaj: https://kernel.ubuntu.com/~kernel-ppa/mainline/ powinieneś znaleźć ich sporą ilość, ba, nawet kandydujące wersje 5.0 są.
Dodatkowo spośród podanych wcześniej linków masz co najmniej xanmod oraz liquorix, które są również w binarkach.
Zaleta - zwłaszcza, gdy ten kernel ma być instalowany na różnych systemach - absolutna powtarzalność.

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2757
  • 1709
    • Zobacz profil
Odp: Kompilacja kernela.
« Odpowiedź #5 dnia: 2019-02-07, 11:50:07 »
Kompilacja kernela to jednak nie taka prosta sprawa. Na Mincie to tylko testowalem.
"Config-i" troche sie sypia. Najlepiej działał domyślny i na tej podstawie bede cos jednak probowal.
make ARCH=i386 savedefconfig
make defconfig
Ewentualnie bede probowal config stworzony z oldconfig poprawic aby byl podobny do configa z defconfig.

Gdybym kiedys zapomnial to dowiedzialem sie ze:
- ze jak tworze inna wersje tego samego kernela to powinienem zmienic nazwe
Cytuj
General Setup ---> () Local version - append to kernel release.
https://www.howtoforge.com/kernel_compilation_mandriva
- ze initrd oraz mkinitrd w zasadzie robia to samo co initramfs i tu musze tez uwazac co mam wybrane w "config-u"
https://wiki.centos.org/TipsAndTricks/CreateNewInitrd

Czego nie wiem ?
- Jesli np. Debian nie uzywa Aufs, to czego uzywa do montowania ? ( w kernelu mialem latke do tego )
 https://en.wikipedia.org/wiki/Aufs
- kernel zbudowany na podstawie defconfig uzywa domyslnego logo. ( taki bialy pasek, zakrywany jasnym a potem ciemno niebieskim )
Mnie gdzies to umknelo w jakims patch-u albo nie chcacy usunelem komende
Jedyne co znalazlem to to http://www.armadeus.org/wiki/index.php?title=Linux_Boot_Logo
A jak wy zmieniacie logo ?
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline pavbaranov

  • Users
  • Guru
  • *****
  • Wiadomości: 878
    • Zobacz profil
Odp: Kompilacja kernela.
« Odpowiedź #6 dnia: 2019-02-07, 12:08:41 »
Krótko: AUFS nie jest potrzebny do montowania. Nie mam AUFS i wszystko działa w należytym porządku. W zależności od tego, o czym mówisz, mam ustawioną obsługę pewnych urządzeń w kernelu, a za sam proces automatycznego montowania (bo o tym chyba mówimy) odpowiada u mnie udisks2 (może być i udisks).
Logo w ogóle wywalam, ale jeśli w ogóle, to właśnie mniej więcej tak, jak w tym, co podałeś.