Kompilacja jądra - pytania

Jeśli już na pewno nie da się umieścić posta wyżej.
Awatar użytkownika
Mattiah
Sędziwy Jeż
Sędziwy Jeż
Posty: 38
Rejestracja: 07 wrz 2008, 13:56
Płeć: Mężczyzna
Wersja Ubuntu: 13.04
Środowisko graficzne: Unity
Architektura: x86_64
Lokalizacja: Kielce
Kontakt:

Kompilacja jądra - pytania

Post autor: Mattiah »

Witam jestem w trakcie przygotowań do kompilacji jądra (przygotowań tj = analizy instrukcji) napotkałem na takie coś :
sudo apt-get install make gcc libcurse5-dev bin86 libc6-dev kernel-package
jest to przygotowanie narzędzi przydatnych do kompilacji. Niestety nie było tam wyjasnione do czego to jest potrzebne (gcc i make to wiadomo) wiec poszukalem sam. Moje pytanie: czy dobrze wyjasnilem te pojecia??

make - narzędzie które automatyzuje proces budowania programów
gcc - kompilator języka C, gdyż jądro jest wykonane w tym języku.
libncurses5-dev - narzędzie do konfiguracji jądra
bin 86 - narzędzie do tworzenia 16bitowego bootsector'a oraz tworzenia plików binarnych.
libc6-dev - zbiór plików naglówkowych i obiektów potrzebnych do kompilacji
kernel-package - pakiet do tworzenia obrazu jądra
przemk
Przyjaciel
Przyjaciel
Posty: 332
Rejestracja: 13 paź 2005, 12:44
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Kompilacja jądra - pytania

Post autor: przemk »

Mattiah pisze:jest to przygotowanie narzędzi przydatnych do kompilacji
[OT]: Ubu ma taki pakiet specjalny "build-essential", nie trzeba lecieć po pojedynczych pakietach [/OT]
ncurses to trochę coś innego - biblioteki potrzebne narzędziu do konfiguracji http://en.wikipedia.org/wiki/Ncurses
[url=http://kalicki.it]http://kalicki.it[/url]
Awatar użytkownika
empe
Sędziwy Jeż
Sędziwy Jeż
Posty: 47
Rejestracja: 13 gru 2006, 11:01
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64

Odp: Kompilacja jądra - pytania

Post autor: empe »

Kompilacja sama w sobie jest banalna... schody zaczynają się podczas konfiguracji wszystkich ustawień, modułów itp.
Cała konfiguracja odbywa się na podobnej zasadzie co instalacja ubuntu z płyty alternate :P
Po wpisaniu make menuconfig uruchamia się menu w którym masz wszystkie opcje podzielone na działy, coś na wzór drzewa katalogów.
Nie masz pojęcia ile "śmieci" znajduje się w standardowym jajku.
Z tego co pamiętam to można zaoszczędzić około 20 do 30 MB pozbywając się zbędnych rzeczy ale... jeden wyrzucony moduł za dużo i kerel nie będzie działał.
Przydaje się dobra znajomość sprzętu i zdrowy rozsądek ;)
Zajrzyj do tego:
LINK

I kompiluj zawsze do pliku *.deb w razie czego łatwiej wszystko usunąć i skompilować nowy kernel :D
nowy sprzęt - operacja zakończona :)
nowy system - http://www.freebsd.org/ - kusząca propozycja... przygotowania trwają ;)
Awatar użytkownika
Mattiah
Sędziwy Jeż
Sędziwy Jeż
Posty: 38
Rejestracja: 07 wrz 2008, 13:56
Płeć: Mężczyzna
Wersja Ubuntu: 13.04
Środowisko graficzne: Unity
Architektura: x86_64
Lokalizacja: Kielce
Kontakt:

Odp: Kompilacja jądra - pytania

Post autor: Mattiah »

Ok z podanego linka wyczytałem:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
Czy pakiety które podałem poprzednio są niewłasciwe?? Z tego co widze to
kernel-package
libncurse5-dev
pojawiły sie i w mojej poprzedniej wypowiedzi. Jezeli chodzi o
bin86 libc6-dev
to domyslam się że są niepotrzebne i mam sie trzymać raczej tych
fakeroot wget bzip2 build-essential
??
Awatar użytkownika
k2cl
Przyjaciel
Przyjaciel
Posty: 3632
Rejestracja: 09 gru 2007, 12:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: LXDE
Architektura: x86

Odp: Kompilacja jądra - pytania

Post autor: k2cl »

Oj... zamiast gdybać - po prostu zajrzyj do oficjalnej dokumentacji na temat kompilowania kernela... Pobierz potrzebne paczki - jeśli czegoś jeszcze będzie brakować, prędzej lub później zobaczysz komunikaty o błędach :D Trochę trudno pisać co będzie Ci konkretnie potrzebne, skoro nie podajesz, z jakich źródeł zamierzasz korzystać i jaką metodą będziesz przeprowadzać konfigurację kernela...
Work less, climb more :D
Awatar użytkownika
alex2
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 111
Rejestracja: 22 cze 2008, 13:41
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: Openbox
Architektura: x86

Odp: Kompilacja jądra - pytania

Post autor: alex2 »

Witam,

z tego co wiem, ncurses służy do wyświetlania menu i tabelek terminalowych i potrzebny jest chyba do wymienionej wyżej komendy:

Kod: Zaznacz cały

make menuconfig
Można ją zastapić inną komendą:

Kod: Zaznacz cały

make xconfig
Czyli tu byśmy ustawiali opcje i wybierali moduły jądra za pomocą nie menu konsolowego ale grafiki X-ów. Ponoć jest to dużo mniej poręczne (nie próbowałem). Ale wtedy ncurses raczej nie będzie potrzebne.

Tutaj jest 5 najpopularniejszych opisów kompilacji po polsku:
http://newbie.linux.pl/?id=article&kg=3&pd=43

Bardzo dobry jest ten ostatni i któryś jeszcze, ale nie pamiętam który. ;)
Awatar użytkownika
empe
Sędziwy Jeż
Sędziwy Jeż
Posty: 47
Rejestracja: 13 gru 2006, 11:01
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64

Odp: Kompilacja jądra - pytania

Post autor: empe »

Wget to program do pobierania plików z sieci więc nie jest wymagany :P
Tutaj jest dość dobre how-to jak kompilować kernel.

Zacznij od punktu 2. [Building A Kernel .deb Package]
Instalujesz potrzebne paczki.
Później ściągasz żródła, możesz to zrobić graficznie i wtedy nie potrzebujesz programu wget :P
Rozpakowujesz, też możesz posłużyć się graficzną nakładką. Katalog może być taki jaki tylko sobie chcesz np /home/user/kompilacja jak będzie Ci wygodniej :P
Przechodzisz do katalogu ze źródłami:

Kod: Zaznacz cały

cd /ścieżka/do/katalogu
W podpunkcie 2.4 jest opisane jak skopiować swój aktualny konfig do nowego kernela :P
wystarczy skopiować zawartość pliku: /boot/config_wersja_kernela do katalogu ze żródłami i nadać mu nazwę .config [albo jakąkolwiek inną, można wskazać ten plik później]

Teraz najważniejsza chwila:

Kod: Zaznacz cały

make menuconfig
i jazda z koksem... mozolne przedzieranie się przez konfig kernela :D
[dwa pierwsze zrzuty ekranu pokazują jak wgrać starą konfigurację]

I po całej syzyfowej pracy [kernel można tuningować bez końca] i zmarnowaniu mnóstwa czasu:

Kod: Zaznacz cały

make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
za --append-to-version=- możesz wpisać jakąś nazwę która zostanie dodana do nazwy samej paczki .deb :P
nowy sprzęt - operacja zakończona :)
nowy system - http://www.freebsd.org/ - kusząca propozycja... przygotowania trwają ;)
Awatar użytkownika
Marvell
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 202
Rejestracja: 29 kwie 2008, 13:34
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: Kompilacja jądra - pytania

Post autor: Marvell »

http://debian.linux.pl/viewtopic.php?p=41656#41656
http://yampress.dug.net.pl/doku.php?id= ... ja-kernela

Te poradniki są proste i jasne, sam z nich korzystałem i nie żałuję;)
Ludzie dzielą się na 10 grup - na tych, którzy rozumieją zapis binarny i resztę.
[ Gentoo ]
Linux user #479548
Awatar użytkownika
Mattiah
Sędziwy Jeż
Sędziwy Jeż
Posty: 38
Rejestracja: 07 wrz 2008, 13:56
Płeć: Mężczyzna
Wersja Ubuntu: 13.04
Środowisko graficzne: Unity
Architektura: x86_64
Lokalizacja: Kielce
Kontakt:

Odp: Kompilacja jądra - pytania

Post autor: Mattiah »

Dziekuje wszystkim za odpowiedź :)
Obeznie jestem przy łataniu jądra, wiem że to moze nie jest konieczne lecz zawsze to jakieś doświadczenie. Ściągnąlem łate
grsecurity
i po wpisaniu komendy patch wylatuje mi takie cos:

Kod: Zaznacz cały

mateusz@mateusz-laptop:~/Pulpit/linux-2.6.29$ sudo patch -p0 < /home/mateusz/Pulpit/grsecurity.patch
[sudo] password for mateusz: 
can't find file to patch at input line 4
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff -urNp linux-2.4.37/arch/alpha/config.in linux-2.4.37/arch/alpha/config.in
|--- linux-2.4.37/arch/alpha/config.in	2008-12-02 03:01:34.000000000 -0500
|+++ linux-2.4.37/arch/alpha/config.in	2008-12-27 14:47:58.000000000 -0500
--------------------------
File to patch: 
zatrzymuje sie i chce żeby wpisać ??plik do łatania??
o co chodzi z tą opcją
-p
i jak ją poprawnie ustawić bo z tego co pisalo na necie to nie bardzo zrozumiełem.
Awatar użytkownika
k2cl
Przyjaciel
Przyjaciel
Posty: 3632
Rejestracja: 09 gru 2007, 12:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: LXDE
Architektura: x86

Odp: Kompilacja jądra - pytania

Post autor: k2cl »

Cóż, z mojej strony jedno pytanie - czy ta łatka na pewno jest przeznaczona do kernela z serii 2.6.29.x? W komunikacie błędu widzę dziwne zapisy dotyczące wersji - 2.4.37
Work less, climb more :D
Awatar użytkownika
marg1
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 188
Rejestracja: 16 sie 2008, 09:09
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: GNOME
Kontakt:

Odp: Kompilacja jądra - pytania

Post autor: marg1 »

Są w ogóle jakieś zalety ręcznego kompilowania jądra? Czy oprócz oszczędności na jego rozmiarach daje to np. przyspieszenie działąnia systemu?
AMD Athlon 64 4200+ DDR II 4GB 800 MHz Gigabyte GF-8600 GTS 256 DDR II 128 Bit
Linux User Registration Number: #488674
Inny OS=Debian - na próbę ;)
Awatar użytkownika
empe
Sędziwy Jeż
Sędziwy Jeż
Posty: 47
Rejestracja: 13 gru 2006, 11:01
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64

Odp: Kompilacja jądra - pytania

Post autor: empe »

Sciągnąłeś złą wersję tego patcha :P

marg1
Kernel jest mniejszy, zawiera mniej zbędnego kodu, system szybciej się uruchamia i jest bardziej responsywny. Wszystko zależy od tego co i ile z niego usuniesz a to z kolei od tego jak dobrze znasz swój sprzęt :>
W przypadku niewielkich zmian różnice mogą być niezauważalne.

I jeszcze jedno. Duży wpływ na szybkość systemu ma wybór np shedulera, z tego co pamiętam są 3 do wyboru, jest kilka opcji zarządzania pamięcią itp itd.

Wady:
Cały proces jest bardzo czasochłonny.
Sama kompilacja zależy wyłącznie od mocy komputera ale przejrzenie wszystkich opcji, zapoznanie się z opisami modułów, powiązanie konkretnych modułów z naszym sprzętem, wybór moduł czy wkompilowanie na stałe itp itd zajmuje baaaardzo dużo czasu...
A po kompilacji okazuje się, że jajko nie działa :D

Opcji sporo więc kombunujcie ;)
nowy sprzęt - operacja zakończona :)
nowy system - http://www.freebsd.org/ - kusząca propozycja... przygotowania trwają ;)
Awatar użytkownika
alex2
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 111
Rejestracja: 22 cze 2008, 13:41
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: Openbox
Architektura: x86

Odp: Kompilacja jądra - pytania

Post autor: alex2 »

Mattiah pisze:o co chodzi z tą opcją i jak ją poprawnie ustawić bo z tego co pisalo na necie to nie bardzo zrozumiełem.
Łatka (patch) to zwykły output z komendy diff, czyli różnica w tekście dwóch plików.
A komenda patch nie robi nic, tylko niweluje te różnice odpowiednimi wpisami (zależy jak mu podamy, z którego pliku do którego).
Czyli jest to sprawa z zakresu lekcji informatyki w ósmej klasie (albo gimnazjum jak oni tam teraz mają). :)
I to oczywiście wcale nie musi dotyczyć jądra Linuksa, może to być lista uczniów, którzy zapłacili za wycieczkę.

Tych plików w łatce może być więcej na raz.
A -pX oznacza, ile slashy obetnie w ścieżkach do nazw plików wewnątrz (oraz tego co przed slashem).

Przykład:
Wycinek z pliku patch-2.6.29.1

Kod: Zaznacz cały

# *DOCUMENTATION*
diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h
index a58378c..ce3b36e 100644
--- a/arch/arm/include/asm/elf.h
+++ b/arch/arm/include/asm/elf.h
@@ -50,6 +50,7 @@ typedef struct user_fp elf_fpregset_t;
 #define R_ARM_ABS32	2
 #define R_ARM_CALL	28
 #define R_ARM_JUMP24	29
+#define R_ARM_V4BX	40
Widzimy, że dotyczy pliku /arch/arm/include/asm/elf.h (w 2-óch wersjach, w katalogach głównych a i b )

Czyli jeżeli robisz Mateuszu komendę patch w tym swoim katalogu ~/Pulpit/linux-2.6.29, to tam już masz od razu podkatalog arch, więc obcinasz tylko 1-szy slash z tym a lub b, czyli u Ciebie będzie to p1.

Kod: Zaznacz cały

# cp ../grsecurity.patch .
# patch -p1 <grsecurity.patch
Awatar użytkownika
marg1
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 188
Rejestracja: 16 sie 2008, 09:09
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: GNOME
Kontakt:

Odp: Kompilacja jądra - pytania

Post autor: marg1 »

O co chodzi z tymi patchami Panowie np jak chciałbym sobie zainstalować 2.6.30-rc3 wszystkie instrukcje dotyczą plików o nazwie linux -2.6 coś tam a z tymi patchami?:)
AMD Athlon 64 4200+ DDR II 4GB 800 MHz Gigabyte GF-8600 GTS 256 DDR II 128 Bit
Linux User Registration Number: #488674
Inny OS=Debian - na próbę ;)
Awatar użytkownika
ulek
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 106
Rejestracja: 18 lut 2009, 16:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64
Kontakt:

Odp: Kompilacja jądra - pytania

Post autor: ulek »

Od siebie dodam, że przydatna okazać się może paczka zlib1g-dev, bo u mnie ostatnio kompilacja kernel'a stanęła i wywaliło, że brakuje takowej paczki, a wiadomo, że na słabszych komputerach kompilacja jądra trochę trwa. ;-)
ArchLinux | DWM
Awatar użytkownika
marg1
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 188
Rejestracja: 16 sie 2008, 09:09
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: GNOME
Kontakt:

Odp: Kompilacja jądra - pytania

Post autor: marg1 »

Skompilowałem sobie już nowego kernela, przy pomocy metody klasycznej czyli w katalogu ze sciągniętym i rozpakowanym źródlem:

Kod: Zaznacz cały

make xconfig

Kod: Zaznacz cały

make 

Kod: Zaznacz cały

make install
a potem

Kod: Zaznacz cały

grub-update
I wszystko się udało, ale po restarcie na nowym jądrze przywitał mnie coś takiego:
kernel panic not syncing vfs unable to mount root fs on unknown-block 0 0
Przeczytałem, ze to dlatego, że nie zrobiłem RAM-dysku, bo nie zrobiłem, czyli w katalogu ze źródłem:

Kod: Zaznacz cały

make-kpkg linux-image linux-headers --initrd 
ma to utworzyć paczkę linux-headers, ale kończy się to komunikatem, że "błąd w nazwie linux-headers nie zawiera żadnej cyfry", cos w tym stylu.
Jak to się właściwie tworzy, bo te wyjaśńienia, które znajduje jakoś do mnie nie trafiają?
Jak zainstalowałem jądro metodą klasyczną to nie muszę już tworzyć paczki linux-image i jej instalować?
AMD Athlon 64 4200+ DDR II 4GB 800 MHz Gigabyte GF-8600 GTS 256 DDR II 128 Bit
Linux User Registration Number: #488674
Inny OS=Debian - na próbę ;)
Awatar użytkownika
alex2
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 111
Rejestracja: 22 cze 2008, 13:41
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: Openbox
Architektura: x86

Odp: Kompilacja jądra - pytania

Post autor: alex2 »

Initrd jest niepotrzebny, jeśli 2 drivery: do dysku i systemu plików root (czyli powiedzmy ext3) wkomponujesz w jądro, nie jako moduły.

U Ciebie prawdopodobnie brak tych oznaczeń "uname", np.:
linux-image-2.6.29 i linux-headers.2.6.29.

Ja robiłem za pomocą update-initramfs:

Kod: Zaznacz cały

update-initramfs -c -k 2.6.29-moja
Jak nie podasz parametru po k, weźmie najnowszą (jak mu dam własną nazwę, to skąd będzie wiedział, po dacie?)
Zamiast c- create, może być u- update.

2.6.29-moja, to nazwa mojej wersji.
Make modules_install mi zrobił nazwę katalogu /lib/modules/2.6.29, ja mu dodałem "moja". Tak samo nazwałem vmlinuz i System.map. Configa nie robiłem (nie wiem jak), jak i linków w katalogu głównym, bo w GRUB-ie podałem dokładne ścieżki.

Działa.

EDIT:
P.S. Co do poprzednich pytań, czy są wszystkie składniki: w katalogu z kodem Linuksa, który będziemy kompilować, jest podkatalog z przydatnymi skryptami ./scripts. Jest tam skrypt ver_linux, który nam sprawdzi za jednym zamachem i wypisze, czy mamy wszystkie składniki, niezbędne do utworzenia danej wersji jądra.

Jeśli ktoś ma najnowszą wersję Ubuntu 9.04, to chyba kompilator języka C jest i wszystko niezbędne (nie pamiętam, bo jadę już bez instalacji ponad pół roku)

Jedynie konfiguracja modułów wymaga dociągnięcia bibliotek do wyświetlania grafiki dla danej metody - w wersji DEV.
-Make menuconfig wymaga libncurses5-dev
-Make xconfig wymaga libqt4-dev - ale to raczej nie dla użytkowników Ubuntu tylko Kubuntu, bo trzeba całą bibiotekę grafiki Qt z KDE dociągnąć.
-Make gconfig - to to samo co powyżej, tylko z gnomiastą grafiką. Czyli dużo lepszy ybór. Wymaga libgtk2.0-dev
-Make oldconfig- niczego nie wymaga, ale nie polecam tej metody, rodem z głębokiego średniowiecza i czasów panowania ośmiobitowego Atari...
Awatar użytkownika
marg1
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 188
Rejestracja: 16 sie 2008, 09:09
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: GNOME
Kontakt:

Odp: Kompilacja jądra - pytania

Post autor: marg1 »

Dzięki dzięki ;)


Acha ten program w zasadzie wynikał nie ze sterownika, lecz ze złego wpisu w menu.list - o ile pamiętam :)
AMD Athlon 64 4200+ DDR II 4GB 800 MHz Gigabyte GF-8600 GTS 256 DDR II 128 Bit
Linux User Registration Number: #488674
Inny OS=Debian - na próbę ;)
Awatar użytkownika
alex2
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 111
Rejestracja: 22 cze 2008, 13:41
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: Openbox
Architektura: x86

Odp: Kompilacja jądra - pytania

Post autor: alex2 »

Problem raczej? ;)

W ogóle to ciekawie to zrobiłeś, tak jak standardowo: configure; make; make install.
Nie wiem jak to działa, ale jak działa...
Awatar użytkownika
EF
Zakręcona Traszka
Zakręcona Traszka
Posty: 781
Rejestracja: 25 lip 2007, 14:46
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Unity
Architektura: x86
Lokalizacja: Wrocław
Kontakt:

Odp: Kompilacja jądra - pytania

Post autor: EF »

nie configure tylko

Kod: Zaznacz cały

sudo make xconfig
;)
Chakra Linux user.
ODPOWIEDZ

Wróć do „Ostatnia deska ratunku”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości