| PC Help |
| уроци | | | софтуер | | | хардуер | | | речник | |
| | | връзки | ||||||||
Операционни системи | Как да компилираме и инсталираме ядрото (или kernel-а) "Компилиране на ядро" - това нещо звучи много страшно за всеки начинаещ Linux-фен. Всъщност, това не е никак сложен процес, особено, ако познавате добре компютъра си. Що е то ядрото и какво е компилиране ? Има хора, на които това не е ясно, така че ще обясня тук. Излишно е да казвам, че ядрото на една операционна система е най-важната и част и поне в света на отворения код то въобще не е забулено в мистерия. Ядрото (често наричано кърнъл от английската дума kernel) е просто софтуер като всеки друг, който предоставя основния интерфейс между хардуера на машината и приложенията, които стартирате върху нея. Освен това ядрото е най-общото между всички дистрибуции на Linux - това е нещо, което зависи от Линус Торвалдс. Вие можете да се сдобиете безплатно с него. Обикновенно го получавате в неговия изходен или сорс код (така, както са го писали Линус Торвалдс, Алан Кокс и др.), но, за да се зареди операционната система, трябва ядрото да е в машинен код. Т.е. трябва на превърнете ядрото от изходен в машинен код, който процес се нарича компилиране. Това обаче позволява да компилирате само тези тези части, които са ви нужни. Например, вие може би не се нуждаете от поддръжка на SCSI адаптери, LAN карти, други устройства или на поддръжка на повече от 1GB RAM. При прекомпилацията вие можете да настроите така ядрото, че то да е най-оптимизирано за вашата конфигурация. Нещо повече-много по-добре е да прекомпилирате ядрото с поддръжка само на вашия хардуер и да изхвърлите излишното от него , особено ако не променяте често компонентите на компютъра си. Така ще имате малко ядро, което ще се зарежда по-бързо и ще заема по-малко памет. Когато инсталирате някаква дистрибуция на Linux, вие получавате компилирано ядро, което обаче е така компилирано, че да поддържа почти всичко (естествено авторите на дистрибуцията не знаят какъв е хардуера ви и това се прави заради максимална съвместимост), което го прави доста неоптимизирано. Това предполага, че бихте искали да го прекомпилирате. Прекомпилирането на ядрото съвсем не изисква да познавате изходния му код и може да бъде едно от най-лесните рутинни неща, които правите след инсталация. Все пак трябва да съобразите няколко важни неща, които ще дискутираме в тази статия, както и каква точно е Linux-дистрибуцията която използвате - при всички дистрибуции нещата са подобни или съвсем същите, но все пак ако не сте сигурни или нещо не се получи точно по този ред на прекомпилация е нужно да се провери документацията на самата дистрибуция като е възможно (но не много вероятно) да ви се наложи да се съобразите със някои специфични за дистрибуцията ви различия. Сега по същество. Всички действия по конфигурирането, компилирането и донастройката на новото ядро трябва да извършите като "user" root. Няма да ви е излишно да имате boot-дискета в случай, че нещо се обърка. Командата mkbootdisk в някои дистрибуции ще ви е от полза-в противен случай ще трябва да прочетете в документацията как да си направите такава дискета. Вероятността да попаднете на непредвиден проблем не е голяма, но все пак се случва и ако това все пак стане и нямате boot-дискета ще имате проблеми. Обикновено изходния код на ядрото ви се намира в директорията /usr/src/linux. Ако това не е така, просто ще ви се наложи да замествате имената да директориите. В повечето дистрибуции /usr/src/linux не е директория, я сомволична връзка ("symlink") към директорията съдържаща изходния код (който за краткост отсега нататък ще наричам "source") на текущото ядро, примерно /usr/src/linux-2.2.16 Можете да изтеглите от FTP сървърите на kernel.org, sunsite.unc.edu, техните mirror-и, както и от много други места, разбира се също и от FTP сървърите на вашата предпочитана дистрибуция пълно ядро (примерно 2.2.17) или само измененията в него (файла с последните ще наричам с по-популярното му название - "patch"-в нашият случай patch-2.2.17.gz). Обикновено ядрото е архив във формат tar.gz или tar.bz2 и името на файла съдържа и номера на версията му linux-x.y.p (в нашият случай linux-2.2.17.tar.gz), където x е версията, y е номера на конкретната реализация, а p е номер на patch. Patch се наричат малки промени в ядрото, които се правят непрекъснато с цел включване на нови функции или подобряване на предишния код. Когато номера на реализацията ( y) е четно число ядрото се нарича стабилно, а когато е нечетно това е ядро, което е в стадий на разработка - нещо като бета-версия, когато едно такова ядро премине достатъчно тестове, то излиза като стабилно с четен номер. Например ядрата 2.0.36 и 2.2.17 са стабилни, а ядро версия 2.3.74 е развойно. Всяка дистрибуция по правило инсталира стабилно ядро . В зависимост от това какво точно сте изтеглили имате два варианта на действие: 1. Изтеглили сте си чисто ново и функционално ядро и името на файла е "/usr/src/linux-2.2.17.tar.*", където "*" е "gz", "bz2" или "Z". Правим следното:
machine:~# cd /usr/src
machine:/usr/src# rm -f linux
Ако е ".tar.gz", то пишем: machine:/usr/src# gunzip linux-2.2.17.tar.gz Ако е ".tar.bz2", пишем: machine:/usr/src# bunzip2 linux-2.2.17.tar.bz2 Ако е ".tar.Z", пишем: machine:/usr/src# uncompress linux-2.2.17.tar.Z
machine:/usr/src# tar -xvf linux-2.2.17.tar В този момент вече можете да изтриете архива linux-2.2.17.tar.* ако имате недостиг на място. Сега в / usr/src ще видите новосъздадена директория linux, която съдържа изходния код на новото ядро. Нека да я преименуваме като linux-2.2.17 и да създадем символична връзка linux, сочеща към нея. След това трябва да влезем в новата директория за да започнем конфигурирането. machine:/usr/src#mv linux linux-2.2.17 machine:/usr/src#ln -s linux-2.2.17 linux machine:/usr/src#cd /usr/src/linux За многообразието от опции и възможности при компилирането на ядрото може да се напише книга (и такива има), но общия съвет, който мога да ви дам е, че когато не разбирате нещо е по-добре да го оставите в неговото състояние по подразбиране или да прочетете подробният "help" който е изведен на бутон за всяка опция. Конфигурирането на ядрото става с помощта на конфигурационите скриптове и програми, които вървят с него - по подробно за тях можете да прочетете в README файла към ядрото. Но първо трябва да влезете в директорията със source-а: machine:/usr/src# cd /usr/src/linux Самите скриптове се пускат както следва:
machine:/usr/src/linux# make config
machine:/usr/src/linux# make menuconfig
machine:/usr/src/linux# make xconfig Две думи как се работи с конфигураторите - за всеки елемент имате до три възможности - да го включите в ядрото, да го компилирате като външен модул, който ще се зарежда при boot-ване на ядрото или да не го компилирате въобще. В Linux обществото има спорове за това кое е по-добре - да имаме малко ядро с модули около него или да компилираме по-голямо ядро, включвайки модулите, които са необходими вътре в него. Искам да спомена за модулите. Те са аналог на драйверите под Microsoft (r) Windows (TM), с тази разлика там, че те могат да бъдат пускани и спирани по всяко време. Трябва добре да прецените кое колко често ви трябва и дали да го компилирате на модули. Уви, не всичко може. Но определено модулите помагат за смаляването на паметта заемана от ядрото по време на работа. По време на настройката разполагате информация за почти всяка опция, като в същото време можете да хвърляте едно око на документацията на ядрото намираща се в директорията /usr/src/linux/Documentation, където примерно можете да намерите информация за това как стъпка по стъпка да инсталирате мрежовата и/или звуковата си карта, както и много други дрънкулки по машината си. Досега не сте си и помисляли че това е възможно нали ... но именно в това е силата на Linux - неограничената му свобода и гъвкавост. След като настроите ядрото съобразно нуждите и предпочитанията си трябва да запишете конфигурацията му във файл със "Save Kernel Configuration", за да можете при следваща преконфигурация на ядрото да я заредите с "Load Kernel Configuration" след което излизате от конфигуриращият скрипт и със това настройката е приключена. Пристъпваме към самата компилация. Първо ще трябва да оправите зависимостите между файловете: machine:/usr/src/linux# make dep
machine:/usr/src/linux# make clean Във зависимост от това какви и колко опции сте включили във ядрото съобразно вашите нужди то може да стане доста големичко, при което е възможно то да се компресира, като отрицателният ефект на това е, че зареждането на Linux става малко по-бавно заради декомпресирането.
machine:/usr/src/linux# make install За да компилирате ядрото с нормална компресия: machine:/usr/src/linux# make zImage За да компилирате ядрото с висока компресия: machine:/usr/src/linux# make bzImage
machine:/usr/src/linux# make modules Готовите модули след инсталация се разполагат в директория /lib/modules/<версия> в случая /lib/modules/2.2.17 и ако това не е първата компилация на това ядро е добра идея да преместим компилираните преди това модули на същото ядро, защото в противен случай ще ги "замажем" със току-що компилираните. Например така: mv /lib/modules/2.2.17 /lib/modules/2.2.17.backup
machine:/usr/src/linux# make modules_install Ако не сте получили някакви грешки можете да се поздравите - имате ново ядро което трябва само да инсталирате. ВНИМАНИЕ !!! Ако сте компилирали ядрото без компресия с команда: machine:/usr/src/linux# make install, долните манипулации НЕ СА НЕОБХОДИМИ, защото вече са изпълнени !!!
"vmlinuz", ако е без компресия; "zImage", ако е с нормална компресия; "bzImage", ако е с висока компресия.
machine:/usr/src/linux# mv arch/i386/boot/bzImage /bzImage-2.2.17
LILO ("LInux LOader"). Значи, LILO има конфигурационен файл (обикновенно /etc/lilo.conf). В този файл ще трябва да добавите въпросното ядро по показания начин и след това да напишете "lilo", за да може то да се обнови: #image=/bzImage-2.2.17 root = /dev/hda2 label = Linux read-only machine:/usr/src/linux# lilo LoadLin. За тази цел, ще трябва да изкопирате ядрото на Windows дял, като последния монтирате в някоя празна директория (нещо, което не смятам да коментирам тук). LoadLin ще трябва вече да пускате с ред от рода на: c:\loadlin\loadlin.exe c:\loadlin\bzImage root=/dev/hda2 ro Разбира се, този ред можете да си натъпчете в някой ".bat"-файл, но това вече си е ваша работа. Остава ви само да рестартирате машината си и да си пуснете Linux-а. Проблеми След като пуснете Linux-а си, може да се имате появяват някои досадни грешки при зареждането на модулите. В такъв случай направете следното:
machine:~# rm -Rf /lib/modules/2.2.17
machine:~# cd /usr/src/linux
machine:/usr/src/linux# make modules_install
machine:/usr/src/linux# depmod -a
Друга полезна информация В документацията, която върви с ядрото (/usr/src/linux/Documentation/*), можете да намерите информация за почти всичко свързано с него (включително и скриптове, които да автоматизират и улеснят процеса на компилиране). Голяма е вероятността с всичко останало да сте инсталирали и стандартната документация. Там можете да намерите следните файлове, в които можете да намерите доста полезна информация: /usr/doc/Linux-HOWTOs/Kernel-HOWTO - за ядрото като цяло; /usr/doc/Linux-mini-HOWTOs/Kerneld - за Kerneld (автомат. зареждане на модули); /usr/doc/Linux-mini-HOWTOs/Modules - за модулите; /usr/doc/Linux-mini-HOWTOs/LILO - за LILO. Авторът на тази статия не носи отговорност за каквито и да било (морални, физически, софтуерни, хардуерни, мийтуерни и т.н.) щети нанесени пряко или косвено от информацията публикувана в този документ. Т.е., правейки нещо в резултат на употребата на този документ, вие носите цялата отговорност за действията си. Освен това авторът не приема упреци, а само предложения (и поздравителни картички :о). Този документ може да бъде разпространяван свободно съгласно последната версия на GNU GPL във вида, в който е публикуван от Free Software Foundation. Версия: 1.0, 19.02.2001 г. | |