Блогът на K4 Компилиране на ядрото на Linux
JunOS, IOS, Unix, Linux, Windows, маршрутизиране, комутиране, сигурност, QoS, мрежов дизайн, телекомуникации.. Статии, бележки. Реших да направя блог, в който да публикувам полезни статии на едно място.
Компилиране на ядрото на Linux
Първо трябва да изтеглите самото ядро [по-точно източниците] от сайта http://www.kernel.org
Изтеглете архива tar.bz2 - по-малък е. Името на файла трябва да е нещо подобно - linux-2.6.0.tar.bz2 , размерът на файла е около 33 MB. Винаги изтегляйте най-новото стабилно ядро.
Ако вече имате ядро 2.6.0. , и трябва да инсталирате например 2.6.2, тогава не е необходимо да теглите отново 33 MB, можете да изтеглите пачове [наричат се още "пачове", но да си говорим на български] и да актуализирате изходните кодове на ядрото си до последната версия. В този случай трябва да изтеглите всички пачове във възходящи номера на версията от вашата версия до най-новата. В този пример това са пачове 2.6.1 и 2.6.2. Файловете с корекции се наричат patch-2.6.1.bz2. Може да не са на главната страница, потърсете ги на ftp сървъра.
В допълнение към самото ядро може да се наложи да изтеглим допълнителни пачове, които разширяват възможностите на ядрото. Например, ядрото 2.6 не поддържа lirc (дистанционни управления). За да бъде тази поддръжка, трябва да се приложи подходяща корекция към ядрото.
Например, нека вземем следните корекции:
1. bootsplash (графично стартиране на Linux) от http://www.bootsplash.org 2. win4lin (за програмата за емулация на Windows със същото име) http://www.netraverse.com 3. lirc (поддръжка за устройства за дистанционно управление) - няма пачове на официалния уебсайт http://www.lirc.org, но можете да ги намерите с > http://www.google.ru по име на файл
По-добре е да изтеглите корекция за версията на ядрото, която искате да инсталирате, ако няма такава, можете да изтеглите най-новатаот наличните. В този случай има вероятност пластирът да не бъде доставен. И вероятността за това е толкова по-голяма, колкото по-голяма е разликата във версиите на ядрата. Да приемем, че инсталираме ядрото 2.6.1 и получаваме тези файлове
1. linux-2.6.0.tar.bz2 2. кръпка-2.6.1.bz2 3. bootsplash-3.1.3-2.6.0-test9.diff 4. Kernel-Win4Lin3-2.6.0.patch и mki-adapter26_1_3_3.patch 5. patch-lirc-20031219.diff
Глоба. Сега нека подготвим папката, в която ще изградим ядрото. Linux има специална директория /usr/src за изграждане от източника. По подразбиране обаче е забранено на обикновен потребител да пише там, така че първо ще си дадем права. Най-лесният начин е да стартирате конзолата, да получите root права и да използвате командата chmod, за да позволите на всеки да пише.
[mike@localhost mike]$ su - Парола: [root@localhost root]# chmod a+w /usr/src [root@localhost root]#
Копирайте изходните кодове на ядрото (linux-2.6.0.tar.bz2) в папката /usr/src
Сега трябва да ги разопаковаме. Ако използвате mc файловия мениджър, натиснете F2 върху файла и след това "x". Ако използвате файловия мениджър на gentoo (http://linux.alhimia.ru/projects/gentoo/), след това щракнете с десния бутон и изберете Действия - Извличане тук.
Получи се директорията linux-2.6.0. Преименувайте го например на linux-2.6.1-my
Копирайте всички кръпки там и преминете към следващата стъпка. 3 Компилиране 3.1 Подготовка
Първо, нека да разгледаме Makefile. Интересуваме се от първите 4 реда
ВЕРСИЯ = 2 НИВО НА КРЕПКА = 6 ПОДНИВО = 1 ЕКСТРАВЕРЦИЯ = .
Променете четвъртия ред на
Това ще накара ядрото, което направихме, да се нарича linux-2.6.1-my. Ако имаме нужда от няколко варианта на ядрото 2.6.1, тогава можем да променим отново реда EXTRAVERSION=my2, да компилираме ядрото отново ивземете ядрото на linux-2.6.1-my2. , което ще ви позволи да изберете варианта на ядрото при зареждане. 3.2 Почистване
Изпълнете командата make mrproper
[mike@localhost linux-2.6.1-my]$ make mrproper RM $(CLEAN_FILES) Създаване на mrproper в srctree RM $(MRPROPER_DIRS) + $(MRPROPER_FILES) [mike@localhost linux-2.6.1-my]$
Тази команда е необходима за премахване на временни файлове, създадени по време на предишната компилация. Той също така премахва всички настройки, които сте направили по време на последното компилиране. (Настройките са в .config файла, ако искате да прехвърлите този файл някъде, изчистете го и след това го върнете обратно) 3.3 Конфигурация на ядрото.
И сега започва най-важният момент, от който зависи успехът на цялото събитие. Тук трябва да знаете поне малко английски и да знаете пълнежа на компютъра. Да започнем с малко теория.
Модулното ядро също е същият файл, който се зарежда при зареждане от диск, както в случая на монолитното ядро, но в допълнение към него има набор от файлове, наречени модули. Тези файлове по същество са функции на ядрото, които можете да включвате и изключвате от ядрото, без да рестартирате компютъра си. Ядрото, което сте инсталирали с комплекта за разпространение, е модулно. В модулното ядро всички функции, които могат да бъдат изведени в отделен файл, т.е. модул - изработват се модулно. Най-големият плюс на модулното ядро е, че можете да включите абсолютно всичко, което ядрото може да направи, всички устройства, всички файлови системи и т.н. Резултатът е ядро, което е малко (в RAM), бързо и гъвкаво. Недостатъците на този подход са, че всъщност трябва да работите с модули, няма да получите възможностите на модула, докато не го заредите. За щастие повечето модули се зареждат автоматично, а останалите се зареждат при стартиране на системата.стартиращи скриптове, елиминирайки необходимостта от ръчно зареждане на десетки модули. В този случай ядрото е представено от същия файл /boot/vmlinuz-xxxx и съдържанието на директорията /lib/modules/. Освен това модулното ядро се нуждае от специален образ за зареждане, т.нар. initrd. Това изображение съдържа всички необходими модули, които позволяват на ядрото да стартира системата. Без тези модули той не може да монтира системния дял на твърдия диск и да чете файлове. Файлът initrd се намира в директорията /boot и се нарича initrd-xxxx.
Къде е истината? Както винаги, по средата. Включвате някои функции в ядрото, някои създавате модули. Какво точно? Тези функции, от които се нуждаете през цялото време - включват например драйвера на твърдия диск, на който лежи системата. Ако приятел идва при вас веднъж месечно с неговата usb камера - направете usb драйвера и модулите на камерата. Ако се съмнявате дали имате нужда от тази или онази функция, поставете я като модул. Можете да видите кои модули в момента са заредени в системата с командата lsmod.
Ако вашата дистрибуция е изградена за ядрото 2.4 (например ASPlinux 9.0), тогава може да имате проблеми със зареждането на модули поради факта, че имената на модулите са променени в 2.6. Затова ви препоръчвам да включите всичко, което ви е абсолютно необходимо, в ядрото.
И така, настройката е направена за избор на една от четирите команди
1. направете xconfig 2. направи menuconfig 3. makeconfig 4. направи oldconfig
Първият вариант е за потребители, които имат графика - ще пуснете графична програма за настройки, останалите - за конзолата. Втората опция предлага текстови менюта за персонализиране. Третият задава 1000 и 1 въпрос. Четвъртият е необходим, ако вече имаме генериран файл с настройки .config (можете да използвате файла с настройки от старото ядро), с тази опция,само онези проблеми, които се появяват в тази версия на ядрото. Първият вариант е най-добрият за нас. Така че давай!
Ако искате възможността да издадете модул, поставете точка (m за конзолата), Ако включите отметка (* или y) в ядрото
За тези, които не знаят английски, давам приблизителна настройка на работната станция. Естествено, ще направя уговорка, че не считам моя подход за единствен правилен, не претендирам да имам 100% разбиране на всичко, което е в ядрото - както го разбирам, го представям в този документ
записан в .config файла (скрит). В бъдеще, ако надстроите до следващата версия на ядрото, можете да копирате този файл в изходната директория на ядрото след корекция и да изпълните командата make oldconfig в конзолата. В този случай няма да трябва да отговаряте на всички тези въпроси, ще ви бъдат зададени само въпроси относно новите функции. 3.4 Сглобяване и монтаж
Сега остава да сглобим ядрото. Процесът на изграждане и инсталиране на ядрото може да се извърши с една команда (като root потребител)
направете bzImage модули modules_install инсталиране
може да се раздели на няколко етапа
от обикновен потребител: make bzImage (изграждане на ядро) направяне на модули (изграждане на модули
като root: make modules_install (инсталирайте модули) make install (инсталирайте ядрото)
Първият вариант е добър, защото можете да зададете всички команди наведнъж и да се разсеете от компютъра. Вторият вариант е идеологически по-правилен. Процесът на сглобяване отнема по-голямата част от времето. Така че обикновено правя това:
от обикновен потребител: направете bzImage модули
като root: направете инсталиране на modules_install
Процесът, в зависимост от мощността на процесора и броя на избраните модули, може да отнеме много време, ще имате време да изпиете чаша кафе или да вземетебаня.
Ако сте прекалено любители на пачовете, тогава ядрото може да не се изгради (на определен етап изграждането ще бъде прекъснато и ще видите код за грешка). В този случай ще трябва или да деактивирате модулите, на които възниква грешката, или да повторите всичко отначало с по-малък брой пачове. Ако вашето ядро не иска да се компилира без кръпки, тогава това показва неправилна инсталация на комплекта за разпространение или липса на компилатор или библиотеки. Опитайте да инсталирате дистрибуцията в режим на разработка (не забравяйте да добавите KDE и други потребителски програми). Дистрибуциите на ALT Linux Junior и ASPLinux ChipEdition всъщност не са дистрибуции, а, разумно казано, демо версии, така че не се изненадвайте, ако не успеете.
Когато ядрото е изградено, трябва да имате следните файлове
/boot/vmlinuz-2.6.1-my /boot/System.map-2.6.1-my /boot/initrd-2.6.1.img и директория с модули /lib/modules/2.6.1-my
Ядрото е инсталирано, сега трябва да конфигурирате буутлоудъра. 4. Настройка на зареждащото устройство
Трите най-често срещани буутлоудъра
1. LILO 2. GRUB 3. ASPLoader
Първият от тях е най-старият (но това не означава най-лишеният от възможности). Отличава се с добра надеждност и големи възможности.
GRUB е най-мощният буутлоудър по отношение на функции. Много добре.
ASPLoader има две оригинални функции - поддръжка на мишка и простота. Въпреки това, дизайнът му болезнено прилича на Маздаевски. Да, и слаб по отношение на възможностите.
Ако имате инсталиран ASPLinux, след инсталиране на ядрото grub ще бъде презаписан от ASPLoader. Ще трябва да преинсталирате grub.
. Никога не изтривайте настройките на старото ядро, това може да доведе до невъзможност за зареждане на системата по обичайния начин, ако създаденото от вас ядро не еработещ . 4.1 Настройка на ASPLoader
1. Първо коригирайте файла с настройки
Той се намира в /etc/aspldr.conf
[linux1062672691@Linux(2.6.1-my)] икона linux ядро /boot/vmlinuz-2.6.1-my root=/dev/hda5 hdc= > initrd /boot/initrd-2.6.1-my.img
[asplinux1@ASPLinux(2.4.20-9asp)] икона linux ядро /boot/vmlinuz-2.4.20-9asp root=/dev/hda5 ro initrd /boot/initrd.2.4.20-9asp.img
Ако не използвате initrd (всички драйвери, необходими за стартиране на системата, са включени в ядрото и bootsplash не се използва), тогава съответният ред може да бъде премахнат
2. Издайте командата aspldr, за да запишете промените в буутлоудъра
Вижте man aspldr.conf 4.2 Конфигуриране на GRUB за повече информация.
1. Коригирайте файла с настройки
заглавие linux-2.6.1-my kernel /vmlinuz-2.6.1-my root=/dev/hda5 hdc= > initrd /initrd-empty.splash зареждане
заглавие linux-2.4.20 ядро /vmlinuz-2.4.20-9asp root=/dev/hda5 initrd /initrd.2.4.20-9asp.img зареждане
2. Ако имате инсталиран ASPLinux, след инсталиране на grub kernel в MBR, то ще бъде презаписано от ASPLoader. Ще трябва да преинсталирате grub. Като root потребител въведете в конзолата
grub grub> root (hd0,0) (/boot дялът се намира на първия дял на първия твърд диск) Типът на файловата система е ext2fs, тип дял 0x83
grub> настройка (hd0) (запис на буутлоудъра в MBR на първия твърд диск) Проверява се дали съществува "/boot/grub/stage1". не Проверява се дали съществува "/grub/stage1". да Проверява се дали съществува "/grub/stage2". да Проверява се дали съществува "/grub/e2fs_stage1_5". да Изпълнява се "вграждане /grub/e2fs_stage1_5 (hd0)". Вградени са 16 сектора. успешно Стартиране на "install /grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/grub/stage2 /grub/grub.conf".успя Готово.
Преди да можем да стартираме от ядрото 2.6, трябва да променим някои неща в нашата дистрибуция. (Имам предвид комплекта за разпространение ASPlinux 9.0)
Първо, имаме нужда от нови помощни програми за работа с модули - modutils. Можете да ги намерите на http://www.rpmfind.net. Изтеглете най-новата версия за RedHat (Fedora).
За да инсталирате пакети, изпълнете командата като root
Второ, скриптовете за стартиране погрешно деактивират автоматичното зареждане на модула.
За да направите това, във файла /etc/rc.d/rc.sysinit намерете следните редове
ако ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null && [ -f /proc/ksyms ]; след това USEMODULES=y fi
и ги променете да изглеждат
ако ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null ; след това USEMODULES=y fi
Освен това може да има проблеми при свързването на модули, които имат различни имена във версии на ядрото 2.4 и 2.6. В тази ситуация включването на тези модули в ядрото помага.
Това е всичко. Добре дошли в Linux 2.6!