Strona 1 z 2

Kompilacja jądra - pytania

: 16 kwie 2009, 11:00
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

Odp: Kompilacja jądra - pytania

: 16 kwie 2009, 13:08
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

Odp: Kompilacja jądra - pytania

: 16 kwie 2009, 17:16
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

Odp: Kompilacja jądra - pytania

: 16 kwie 2009, 18:47
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
??

Odp: Kompilacja jądra - pytania

: 16 kwie 2009, 19:05
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...

Odp: Kompilacja jądra - pytania

: 16 kwie 2009, 19:51
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. ;)

Odp: Kompilacja jądra - pytania

: 16 kwie 2009, 19:57
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

Odp: Kompilacja jądra - pytania

: 16 kwie 2009, 20:03
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ę;)

Odp: Kompilacja jądra - pytania

: 20 kwie 2009, 11:38
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.

Odp: Kompilacja jądra - pytania

: 21 kwie 2009, 09:22
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

Odp: Kompilacja jądra - pytania

: 21 kwie 2009, 10:15
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?

Odp: Kompilacja jądra - pytania

: 21 kwie 2009, 13:40
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 ;)

Odp: Kompilacja jądra - pytania

: 21 kwie 2009, 19:48
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

Odp: Kompilacja jądra - pytania

: 27 kwie 2009, 16:35
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?:)

Odp: Kompilacja jądra - pytania

: 27 kwie 2009, 17:19
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. ;-)

Odp: Kompilacja jądra - pytania

: 27 kwie 2009, 23:00
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ć?

Odp: Kompilacja jądra - pytania

: 22 maja 2009, 16:49
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...

Odp: Kompilacja jądra - pytania

: 22 maja 2009, 22:46
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 :)

Odp: Kompilacja jądra - pytania

: 23 maja 2009, 00:31
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...

Odp: Kompilacja jądra - pytania

: 23 maja 2009, 09:18
autor: EF
nie configure tylko

Kod: Zaznacz cały

sudo make xconfig
;)