Posts Tagged kompilacja
Gentoo – kompilacja jądra (kernel 2.6.30)
Posted by moriturius in linux on Październik 25, 2009
Info: To nie jest informacja jak kompilować kernel – to raczej informacja jak go nie kompilować
Największym problemem okazała się dla mnie kompilacja kernela 2.6.30. Początkowo podczas instalacji użyłem narzędzia genkernel ponieważ było wygodne. Jednak tak stworzone jądro trochę długo się uruchamiało (około 1 minuty 15 sek. od GRUBA do ekranu logowania). Wszystko dlatego, że na początku uruchamiany był obraz initrd i on ładował do dużo modułów których nawet nie potrzebowałem! Pomijam już fakt, że kompilacja takiego jądra z milionem modułów trwała około 20 minut.
Postanowiłem więc wziąć sprawy w swoje ręce i zmodyfikować nieco ustawienia jądra tak aby nie musiało korzystać z initrd. Dodatkowo chciałem aby jądro obsługiwało system plików ext4, abym mógł pracować na partycji gdzie zainstalowałem Ubuntu (bo ono też jeszcze jest
).
Zatem poszedłem do źródeł gentoo-sources które były już na dysku od czasu gdy instalowałem system:
cd /usr/src/linux
I rozpocząłem konfigurowanie:
make menuconfig
Początkowo ogrom opcji jakie się cisną do oczu jest porażający. Po kilku nieudanych kompilacjach (tzn takich, że jądro po uruchomieniu dawało KERNEL PANIC). Postanowiłem zacząć całkowicie od nowa. W katalogu /usr/src/linux wydałem polecenie:
rm .config
Co oznacza, że usunąłem starą konfigurację (jeszcze wygenerowaną przez genkernel – stąd pewnie były problemy). Po tej operacji program do konfiguracji jądra wczytał podstawowe ustawienia, które są bardzo minimalistyczne. Bałem się czy takie jądro w ogóle poradzi sobie w życiu codziennym, ale postanowiłem spróbować.
Jedyne rzeczy jakie zmieniłem to dodałem obsługę ext4 oraz zaznaczyłem kilka opcji graficznych dla kart NVIDIA i mojej karty bezprzewodowej.
Kompilacja nowego jądra trwała mniej niż 2 minuty. Wygenerowanych zostało zaledwie 12 modułów, z których łatwo było wybrać te interesujące
Jak się okazało jądro poradziło sobie i uruchomiło się w około 30 sekund (gdyby nie konfigurować sieci to nawet kilka sekund szybciej). Widać zatem, że w prosty sposób można znacznie przyspieszyć ładowanie systemu operacyjnego.
Teraz jeśli zauważę, że potrzebuję dodatkowej opcji w jądrze to dodanie jej zajmuje tylko kilka minut. Ma to ogromne zalety w stosunku do tego, ze w Ubuntu właściwie wszystko działo się samo i nawet nie wiedziałem skąd, po co i dlaczego
A ja lubię wiedzieć dlaczego.
Wniosek
Jeśli kompilowałeś jądro przy użyciu genkernela lub w jakiś inny automatyczny sposób to najlepiej usuń tę konfigurację i zacznij od nowa.
W internecie jest bardzo wiele przewodników dotyczących konfiguracji i kompilacji jądra Linux. TA STRONA jest jednym z przykładów. Najważniejszą rzeczą podczas szukania informacji jest wiedza o tym, że informacje te mogą być przestarzałe – dlatego należy ostrożnie podchodzić do znalezionych informacji.
C++ Sockets Library
Posted by moriturius in Programowanie on Wrzesień 22, 2007
Kiedy wreszcie postanowiłem napisać jakiś kawałek kodu dla ageNet i dla ułatwienia sobie życia wykorzystać przy tym C++ Sockets Library to okazało się, że kompilacja tego cuda nie jest możliwa ponieważ:
1>g:\\libs\\sockets-2.1.7\\sockethandler.cpp(447) : error C2065: 'EINVAL' : undeclared identifier 1>g:\\libs\\sockets-2.1.7\\sockethandler.cpp(447) : error C2065: 'EINTR' : undeclared identifier 1>g:\\libs\\sockets-2.1.7\\sockethandler.cpp(447) : error C2065: 'EBADF' : undeclared identifier 1>g:\\libs\\sockets-2.1.7\\sockethandler.cpp(447) : error C2065: 'ENOMEM' : undeclared identifier
Na szczęście są w świecie ludzie, którzy wiedzieli w czym rzecz i opisali to w internecie. Dzięki jednemu z nich problem został szybko rozwiązany. Nie mogłem się jednak nacieszyć tym osiągnięciem ponieważ chwilę później pojawił się nowy błąd!
1>LINK : fatal error LNK1181: cannot open input file 'ssleay32md.lib'
Zupełnie nie wiem dlaczego w pakiecie openssl-lib, który zassałem z internetu nie ma tego pliku… Wizja kompilacji OpenSSL ze źródeł strasznie mnie wkurza, bo zapewne pojawią się nowe zależności przez które się ona nie powiedzie…