Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Компилиране на собствено ядро
  1. Компилиране не собствено ядро
     
Автор  Burkoff (06.05.2004 20:53)  съобщение до автора
Погледнат  3717 пъти  добави към любими
Оценка  добави коментар
Гласове  13  изпрати на приятел
Коментари  (0)  абонирай се за Unix
    Страница 1 / 1

 



1.  Въведение

 

     1.1 Прочетете първо това

     1.2 Няколко думи за стила

 

  2. Важни въпроси и техните отговори

 

     2.1 Какво прави ядрото все пак?

     2.2 Защо бих искал да обновя моето ядро?

     2.3 Какъв хардуер поддържат новите ядра?

     2.4 Какви версии на gcc и libc са ми необходими?

     2.5 Какво е заредим в паметта модул?

     2.6 Колко дисково пространство ми е необходимо?

     2.7 Колко време ще ми отнеме?

 

   3. Как всъщност да конфигурирам ядрото

 

     3.1 Намиране на сорс кодовете

     3.2 Разархивиране на сорсовете

     3.3 Конфигуриране на ядрото

        3.3.1 Поддръжка на емулация на математичен копроцесор

        3.3.2 Разширен (MFM/RLL) твърд диск и поддръжка на IDE диск/CD-ROM (Блокови устройства)

        3.3.3 Мрежова поддръжка (Основна конфигурация)

        3.3.4 System V IPC (Основна конфигурация)

        3.3.5 Фамилия процесори (Вид на процесора и характеристики)

        3.3.6 Поддръжка на SCSI

        3.3.7 Поддръжка на мрежови устройства

        3.3.8 Файлови системи

           3.3.8.1 Но аз не знам кои файлови системи са ми необходими!

        3.3.9 Символни устройства

        3.3.10 Звук

        3.3.11 Други конфигурационни опции

        3.3.12 Хакване на ядрото

     3.4 Сега какво ( Makefile-ът)

 

  4. Компилиране на ядрото

 

     4.1 Разчистване и уточняване на зависимостите

     4.2 Време за компилация

     4.3 Други файлове за компилация

     4.4 Инсталация на ядрото

 

  5. Инсталиране на кръпки

 

     5.1 Прилагане на кръпка

     5.2 Ако нещо не стане както трябва

     5.3 Отървете се от .orig файловете

     5.4 Други кръпки

 

  6. Допълнителни пакети

  

     6.1 kbd

     6.2 util-linux

     6.3 hdparm

     6.4 gpm

 

  7. Някои често срещани затруднения

 

     7.1 make clean

     7.2 Големи или бавни ядра

     7.3 Паралелният ми порт не работи/принтерът ми не работи

     7.4 Ядрото не иска да се компилира

     7.5 Новите версии на ядрото не работят в процеса на първоначалното зареждане

     7.6 Забравили сте да заредите LILO, или вашата система не стартира въобще

     7.7 Получавам съобщение `warning: bdflush not running'

     7.8 Не мога да накарам моя ATAPI/IDE CD-ROM да работи

     7.9 Получавам странни съобщения за obsolete routing requests

     7.10 Firewall-ът не работи в 1.2.0

     7.11 ``Not a compressed kernel Image file''

     7.12 Проблеми с конзолния терминал след обновяване на ядрото до 1.3.х

     7.13 Не мога да компилирам различни програми след обновяване на ядрото

     7.14 Разширяване на границите, наложени от ядрото

 

  8. Забележка за обновяването до 2.0.х, 2.2.х

 

  9. Модули

 

     9.1 Инсталиране на помощните програми за модули

     9.2 Модули, разпространявани с ядрото

 

  10. Трикове и хватки

  

     10.1 Пренасочване на изхода от make или patch командите

     10.2 Условно инсталиране на ядрото

     10.3 Updates на ядрото

 

  11. Други полезни HOW-TO-та, свързани с темата

 

  12. Други

 

     12.1 Автор

     12.2 Предстоящо

     12.3 Контрибуции

     12.4 Авторско право, лицензи и всякакви от този сорт.

 

 

  ______________________________________________________________________

 

1. Въведение

 

 

Трябва ли да четете този документ? Вижте дали някои от нещата по-долу се отнасят и за вас:

 

 

 

.  ''Уфф. Тоя пакет 46.5.6 казва, че иска ядро 2.8.193, а аз все още имам 1.0.9!''

 

.  Има драйвер за устройство в едно от новите ядра, който трябва да имам

 

.  Вие въобще си нямате представа как да компилирате ядрото

 

.  Това в README файла всичко ли е?

 

.  Опитали сте, но сте се провалили

 

.  Нуждаете се да дадете нещо на хората, които постоянно ви молят да инсталирате техните ядра вместо тях

 

 

    1.1 Прочетете първо това

 

Някои от примерите в този докумет приемат, че разполагате с GNU tar, find, и xargs. Те са добре стандартизирани и не би трябвало да причиняват проблеми. Също така се приема, че сте запознати със струкурата на своята файлова система; ако не сте, то тогава е важно да пазите напечатано копие от изхода на командата mount при нормално работеща система (или листинг на /etc/fstab, ако можете да го разберете). Тази информация е важна, и не се променя, освен ако не разделите отново своя твърд диск на различни дялове, преинсталирате системата си, или нещо подобно. Последното ядро, към времето на създаването на този документ е 2.2.9, което означава, че препратките и примерите са съобразени с тази версия. (Бел. прев. Към времето на превеждане актуалната версия е 2.2.10). Въпреки че съм се опитал да направя този документ колкото е въможно по-независим от весията, ядрото е постоянно под развитие и ако се сдобиете с нова версия, то тя неминуемо ще има някои различия. Но това не би трябвало да създава големи проблеми, но може да стане източник на малко объркване.


 

 

Има две версии на сорс кода на Linux ядрото, 'стабилно и работещо' и 'в развитие'. Стабилните са с четно число по средата като 1.2.х, 2.0.х, както и 2.2.х. Тези ядра се считат за най-стабилни, изчистени от грешки по времето на своето излизане. Ядрата в развитие (2.1.х,2.3.х) са тестови ядра, предназначени за хора, които биха желали да изпробват нови и вероятно пълни с грешки ядра. Това е като предупреждение.

 

 

 

    1.2 Няколко думи за стила

 

Текст, който изглежда като този, е нещо, което се появява на вашия екран, файлово име, или нещо, което може да бъде въведено директно, като команда, или опции към команда (ако гледате обикновен текстови файл, то той не излгежда по-различно). Команди и други неща за въвеждане обикновено са оградени с ` ', което поставя следния пуктуационен проблем: ако подобна команда е в края на изречението в кавички, хората често пишат и '.' Заедно с командата, тъй като американският синтаксис изисква да се остави точката вътре в цитираната команда или низ за въвеждане. Въпреки че малко здрав разум (и за съжаление човекът със "здравия разум" трябва да е свикнал с американския синтаксис) подсказва, че трябва да се изчисти пунктуацията първо. Много хора забравят това и поради тази причина аз ще я слагам извън кавичките в такива случаи. С други думи, когато казвам, че трябва да напишете ``make config'', аз ще пиша `make config', а не `make config.'

 

 

 

2. Важни въпроси и техните отговори

 

 

 

    2.1 Какво прави ядрото все пак?

 

 

Ядрото на UNIX действа като посредник между вашите програми и вашия хардуер. Първо, то осигурява управление на паметта за всички изпълнявани в момента програми (процеси), и се грижи за това те да получат необходимото (или отделеното) им процесорно време. В добавка, ядрото осигурява значително преносим интерфейс за програмите, за да могат те от своя страна да взаимодействат с хардуера.

 

 

Има значително много повече информация по въпроса за работата на ядрото, но тези основни функции са най-важните и те трябва да се знаят.

 

 

 

      2.2 Защо бих искал да обновя моето ядро?

 

 

Новите ядра обикновено имат повече драйвери за устройства, те разполагат с по-добро управление на процесите, работят по-бързо от старите версии, могат да бъдат по-стабилни и те поправят глупави грешки в старите версии. Много хора обновяват своето ядро, защото те се нуждаят от новите драйвери и поправката на тези грешки.

 

 

 

   2.3 Какъв хардуер поддържат новите ядра?

 

 

Вижте в Hardware-HOWTO. Също така можете да погледнете в `config.in' файла в сорс кода на ядрото, или просто да разберете, когато опитате `make config'. Това ви показва всичкия хардуер, поддържан от стандартната дистрибуция на ядрото, но не всичко, което Linux поддържа; много стандартни драйвери за устройства (като PCMCIA драйверите и някои драйвери за лентови устройства) са модули, които са разпространявани отделно, и могат да бъдат зареждани в паметта, когато е необходимо.

 

 

 

    2.4 Какви версии на gcc и libc са ми необходими?

 

 

Линус Торвалдс препоръчва версията на gcc, упомената в README файла, включен в сорс кода на ядрото на Linux. Ако нямате тази версия, документацията в препоръчваната версия на gcc трябва да ви уведоми дали трябва да обновите своята libc. Това не е сложна процедура, но е важно да следвате инструкциите.

 

 

 

    2.5 Какво е заредим в паметта модул?

 

 

Това са части от ядрото, които не са свързани директно с него (не са включени). Те се компилират отделно и могат да бъдат зареждани и изхвърляни от паметта почти по всяко време. Поради тази гъвкавост, това сега е предпочитания начин да се използват някои характеристика на ядрото. Много популярни драйвери за устройства, като PCMCIA и QIC-80/40 tape драйверите, са заредими в паметта модули.

 

 

 

    2.6 Колко дисково пространство ми е необходимо?

 

 

Отговорът на този въпрос зависи от системната конфигурация. Първо, компресираният сорс код на ядрото е около 14 мегабайта (за версия 2.2.9). Декомпресирано и компилирано с умерена конфигурация ядрото ще заема още около 67 MB.

 

 

 

    2.7 Колко време ще ми отнеме?

 

С нови компютри, компилацията трае значително по-кратко, отколкото ако се изпълнява на стари такива; AMD K6-2/300 с бърз диск може да се справи с 2.2.х ядро за около 4 минути. Ако използвате стари Пентиум-и, 486-ци, 386-ци, и планирате да компилирате ядрото, то бъдете готови да чакате, най-вероятно часове, може и дни...

 

Ако това ви притеснява, и вие разполагате с по-бърза машина на която да го компилирате, можете да я използвате (приемайки, че вие подавате верните параметри, и че вашите помощни програми са осъвременени, и т.н.) и после да пренесете т.нар. kernel image на вашия по-бавен компютър.

 

 

 

 

3. Как всъщност да конфигурирам ядрото

 

 

 

    3.1 Намиране на сорс кодовете

 

 

Можете да се снабдите със сорс кода чрез anonymous ftp от ftp.kernel.org в /pub/linux/kernel/vx.y, където x.y е версията, например 2.2, и както бе споменато по-горе, ядрата, които завършват на нечетно число са в развитие и може и да са нестабилни. Ядрото обикновено е с името x.y.z.tar.gz, където x.y.z е номера на версията. Сайтовете също разполагат с файлове с разширение .bz2, които са компресирани с bzip2 (тези файлове са по-малки по обем и се нуждаят от по-малко време за трансфер).

 

Най-добре използвайте ftp.xx.kernel.org, където хх е кода на вашата страна, например ftp.at.kernel.org за Австрия, и ftp.us.kernel.org за Америка. (Бел. прев. За България сайтът е ftp.bg.kernel.org, но са съжаление е необходимо да почакате няколко дена (може и седмица), за да се update-не).

 

 

 

    3.2 Разархивиране на сорсовете

 

 

Логнете се като root или използвайте su, за да получите суперпотребителски права, и отидете в /usr/src. Ако сте инсталирали сорс кода на ядрото, когато сте инсталирали Linux (както повечето хора), вече ще има създадена директория 'Linux' там, която съдържа всичките сорс кодове на старото ядро. Ако разполагате с дисково пространство и искате да се подсигурите, запазете тази директория, заедно с поддиректориите. Добра идея е да установите каква версия използва вашата система в момента и да преименувате директорията според тази информация. Следователно ако командата `uname -r' даде отговор `1.0.9', то вие бихте могли да преименувате (с `mv') `linux' на `linux-1.0.9'. Също така можете и да изтриете цялата тази директория. Във всеки случай, уверете се, че не съществува директория `linux' в /usr/src преди да разархивирате пълния сорс код на новото ядро.

 

 

 Сега, в /usr/src, разархивирайте сорс кодовете с tar zxpvf linux-x.y.z.tar.gz' (а ако имате само .tar файл, то използвайте командата `tar xpvf linux-x.y.z.tar'). Съдържанието на архива ще се намести там, където трябва и когато изпълнението на тази команда привърши, ще има нова `linux' директория в /usr/src. Влезте в нея и хвърлете един поглед върху README файла. Там има секция със заглавие `INSTALLING the kernel'. Изпълнете иснтрукциите, когато е необходимо - символни връзки, които трябва да се създадат, премахване на .о файлове и др.

 

Ако имате .bz2 файл и bzip2 програмата (можете да научите повече за нея от http://www.muraroa.demon.co.uk/) напишете следното:

 

 

       bz2cat linux-x.y.z.tar.bz2 | tar xvf -

 

 

 

 

    3.3 Конфигуриране на ядрото

 

 

Забележка: Някои неща от тази секция са преразказ или пояснение на съответните секции от README файлът на Линус.

 

 

Командата `make config', изпълнена, когат сте в /usr/src/linux, стартира скрипт за конфигурация, който изисква отговор на много въпроси. Той използва bash, така че се уверете, че bash e /bin/bash, /bin/sh, или $BASH.

Има много по-приятни алтернативи на `make config' и вие най-вероятно ще ги намерите за по-лесни и по-удобни за използване. `make menuconfig' е може би най-често използваната. Каквото и да изберете, най-добре е да свикнете с интерфейса, тъй като може да се наложи да се върнете към него по-скоро, отколкото си мислите. За тези от вас, които използват Х, можете да опитате с `make xconfig', ако имате инсталирани Тк. `make menuconfig' е за тези от вас, които имат инсталирани (n)curses и биха предпочели текстово-базирано меню. Тези интерфейси имат ясно предимство: ако сбъркате нещо по време на конфигурацията, винаги можете да се върнете и да поправите своя избор.

 

 

Конфигурационните опции са подредени йерархично с `make menuconfig' и`make xconfig'.

 

 

Въпросите за конфигурацията на ядрото обикновено изискват отговор 'у' (да) или 'n' (не). Драйверите за устройства често имат опцията 'm'. Тя означава ``module'' - системата ще го компилира, но не директно в ядрото, а като заредим в паметта модул. Някои от по-ясните и маловажни въпроси за конфигурацията на ядрото не са описани тук, вижте секцията 'Други конфигурационни опции' за тези въпроси, които не са описани по-долу. Ако сте избрали 'make menuconfig' шпацията отваря вашия избор за промяна на дадена опция.

 

 

В ядра 2.0.х и нагоре има и още една опция - '?', която изкарва на екрана кратко описание на конфигурационния параметър. Тази информация е съобразена с датата на излизането на сорс кода. По-долу ще намерите списък на по-важните опции, в кое главно меню се намират и кратко описание.

 

 

 

        3.3.1 Поддръжка на емулация на математичен копроцесор

 

Ако нямата математичен копроцесор (т.е. ако имате 386 или 486SX), трябва да отговорите с 'у'. Ако имате копроцесор и все пак отговорите с 'у', не се тревожете много - копроцесорът въпреки това ще се използва, а емулацията ще бъде игнорирана. За повечето съвременни компютри отговорът е 'n', но не се притеснявайте ако случайно отговорите с 'у'; ако не е необходима, емулацията няма да се използва.

 

 

 

        3.3.2 Разширен (MFM/RLL) твърд диск и поддръжка на IDE диск/CD-ROM (Блокови устройства)

 

 

Вие най-вероятно се нуждаете от тази поддръжка; това означава, че ядрото ще поддържа стандартни PC твърди дискове, които повечето хора имат. Този драйвер не включва никакви SCSI устройства; за тях има отделни опции по-нататък в менюто.

 

Ще бъдете попитан за ``old disk-only'' и ``new IDE'' драйвери. Вие трябва да изберете един от тях; основната разлика е, че стария драйвер поддържа само два диска за всеки интерфейс, а новия поддържа вторичен интерфейс и IDE/ATAPI cdrom драйвери. Новият драйвер е около 4к по-голям от стария и също така е най-вероятно подобрен, което означава, че освен изчистените грешки, той увеличава производителността на диска ви, особено ако имате по-нов (от вида EIDE) хардуер.

 

 

 

 

 

 

        3.3.3 Мрежова поддръжка (Основна конфигурация)

 

 

По принцип вие бихте казали 'у' ако компютърът ви е част от мрежа като Интернет, или искате да използвате SLIP, PPP, term и др. за да се свържете с Интернет. Но много пакети (като Х window) изискват мрежова поддръжка дори и ако вашия компютър не е част от мрежа, трябва да отговорите с 'у'. По-нататък ще бъдете попитани за дали искате поддръжка на TCP/IP мрежовия протокол; отново отговорете с 'у освен ако не сте абсолютно сигурен какво правите.

 

 

 

        3.3.4 System V IPC (Основна конфигурация)

 

 

Една от най-добрите дефиниции на IPC (Interprocess Communication) е дадена в книгата за Perl. Не е учудващо, че някои Perl програмисти я изпозват, за да осигурят възможност на различни процеси да обмянат информация един с друг, както и много други пакети (DOOM например), така че да отговорите с 'n' не е добра идея, освен ако наистина не знаете точно какво правите.

 

 

 

        3.3.5 Фамилия процесори (Вид на процесора и характеристики)

 

(в по-старите ядра: Използвайте флага -m486 за оптимизация за 486)

 

 

Традиционно, ядрото се компилираше с някои оптимизации за даден специфичен процоесор; ядрата работеха чудесно на други чипове, но ядрото беше малко по-голямо. В по-новите версии на ядрата това вече не е валидно, така че вие трябва да въведете процесора, за който компилирате ядрото. Ядро за ''386'' ще работи на всички машини.

 

 

 

        3.3.6 Поддръжка на SCSI

 

 

Ако имате SCSI устройства, отговорете с 'у'. От вас ще бъде изискана още информация, като поддръжка на CD-ROM, твърд диск, и какъв вид SCSI адаптер имате. Погледнете SCSI-HOWTO  за по-големи подробности.

 

 

 

        3.3.7 Поддръжка на мрежови устройства

 

 

Ако имате мрежова карта, или ще използвате SLIP, PPP, или паралелен порт за връзка с Интернет, отговорете с 'у'. Скриптът ще ви попита за това с каква карта разполагате, и кой протокол да използва.

 

 

        3. 3. 8 Файлови системи

 

 

Конфигуриращият скрипт тогава ще ви попита за поддръжката на следните файлови системи:

 

 

Стандартна (minix) - По-новите дистрибуции не създават файловата система minix , и много хора не я използват, но може да е добра идея да я конфигурирате. Някои ``rescue disk'' програми я използват, а също така и много флопи-дискове е възможно да имат файловата система minix, тъй като файловата система minix е удобна за използване на флопи дискове.

 

Second extended (ext2 - б.пр.) - Това е стандартната файлова система на Linux. Почти задължително е да сложите поддръжка в ядрото.

 

Msdos - Ако желаете да използвате вашите msdos дялове или да монтирате (mount) MS-DOS форматирани дискети потвърдете с "y".

 

Също така има възможност за поддръжка и на други файлови системи

 

/proc - (идея на Бел Лабс, предполагам) Този файлова система не се изгражда върху диск; това е интерфейс на файлова система на ядрото и процесите. Много програми (като ps) я използват. Опитаите "cat /proc/meminfo" или "cat /proc/devices". Някои шелове (rc по-специално) използват /proc/self/fd (/dev/fd на други системи) за входно-изходни операции. Почти задължително е да потвъдите с "y"; много важни системни програми зависят от нея.

 

NFS - Ако вашата машина е в мрежа и вие искате да използвате файлови системи намиращи се на други машини в мрежата и поделени със NFS, потвърдете с "у"

 

ISO9660 - Повечето от CD-ROM дисковете сас именно с тази файлова система ако имате CD-ROM устройство и желаете да го използвате под Linux потвъдете с "у".

 

 

 

        3.3.8.1 Но аз не знам кои файлови системи са ми необходими!

 

 

Напишете mount на командния ред. Резултата ще е подобен:

 

 

           blah# mount

           /dev/hda1 on / type ext2 (defaults)

           /dev/hda3 on /usr type ext2 (defaults)

           none on /proc type proc (defaults)

           /dev/fd0 on /mnt type msdos (defaults)

 

 

Погледнете на всеки ред думата след "type" e типа на файловата система. В този случай файловата система на / и /usr са second extended, използвам също така /proc файловата система също и флопи диск със MS-DOS файлова система.

 

Може да опитате "cat /proc/filesystems" ако имате поддръжка на /proc  в ядрото; това ще покаже файловите системи, поддържани от ядрото.

 

Ако включите поддръжка на рядко използвани файлови системи, ядрото ще ви ще се увеличи и ще забави началното стартиране на системата; вижте частта за модулите за начин да избегнете това и също така секцията "Някои често срещани затруднения", за да разберете защо голям голямо ядро е нежелателено.

 

 

 

        3.3.9 Символни устройства

 

Тук можете да включите поддръжка на вашият принтер (ако се свърва към паралелен порт), busmouse, PS/2 мишка (много notebook компютри използват PS/2 протокола за своите вградени тракболове), някои лентови устройства (tape drive), и други. Потвърдете със "у", където е необходимо.

 

Забележка: gpm е програма която позволява използването на мишка във конзолата за изрязване и залепване (cut and paste) между виртуални конзоли. Добре е ако имате мишка свързана към серииния порт, защото тя съществува добре със X, но за други ще Ви се наложи да правите специални трикове за други видове мишки.

 

 

        3.3.10 Звук

 

Ако имате звукова карта и желаете да я използвате под Linux можете да потвърдите със "у" и да зададете съответните и настроики. (Когато инсталационната програма ви попита дали да инсталира цялата версия на драйвера може да откажете със "n" и да спестите малко от размера на ядрото като изберете само необходимото)

 

Ако желаете по-добрa поддръжка на звукова карта проверете за безплатни драивери на http://www.linux.org.uk/OSS/ а за платени на http://www.opensound.com/.

 

 

        3.3.11 Други конфигурационни опции

 

 

Не всички опции са изброени тук тъй като се сменят често или се подразбират от самосебе си. Ако желаете можете да намерите всички опции във Documentation/Configure.help в директорията, в която се съдържа сорс кода на вашото ядро.

 

 

        3.3.12 Хакване на ядрото

 

 

>От Linus README:

 

Конфигурационните детайли по "хакването на ядрото" обикновенно водят до голямо или бавно ядро (или и двете), дори може да направят ядрото по-малко стабилно при конфигурирането на някои рутини да опитват да намирat проблеми в ядрото (kmalloc()). Поради тази причина би трябвало да отговорите с 'n' на въпроса за  ``production'' ядро. 

 

 

   3.4. Сега какво? (Makefile-ът)

 

 

След като завършите конфигурацията съобщение ще полу4ите съобщение със следния текст "check the top-level Makefile for additional configuration" (Прегледайте Makefile-ът за допълнителна конфигурация)

 

Прегледайте го. Най-вероятно не би ви се наложило да променяте нищо. Винаги можете да промените опциите му със командата "rdev". Ако не разбирате нищо от makefile-ът не се притеснявайте.

 

 

4. Компилиране на ядрото

 

 

   4.1 Разчистване и уточняване на зависимостите

 

 

Когато приключите със конфигуриращия скрипт ще получите съощение да напишете "make dep" и (по всяка вероятност) "clean". Така се осигуряват за висимостите между файловете. Не би ви отнело много време, освен ако компютърът ви е доста бавен. Не би ви отнело много време освен ако компютърът ви е доста бавен. За по стари версии на ядрото, когато приключи, ще ви е наложи да напишете "make clean". Това премахва object файловете и някои други неща, които стара версия е оставила. В никакъв случай не трябва да пропускате тази стъпка преди да почнете прекомпилирането на ядрото.

 

 

   4.2.  Време за компилация

 

След като осигурите зависимостите и изчистите може да започнете със същинското компилиране с "make bzImage" или "make bzdisk" (тази част отнема доста време) "make bzImage" ще компилира ядрото и ще го остави като arch/i386/boot/bzImage. Това е новото компресирано ядро. "make bzdisk" прави същото, но копира файла на във флопидиск които трябва да поставите във А:. bzdisk е уместно да се използва когато тествате ново ядро. Ако новото ядро не работи добре посто вадите дискетата от А: и стартирате от хард диска, също и ако изтриете ядрото или нещо също толкова ужасно. Също така може да го използвате когато прехвърляте съдържанието на един диск върху друг

 

 

Новите ядра са компресирани от там идва и bz пред името. Копресираното ядро се декомпресира при стартиране.

 

При по стари ядра нямате възможност да компилирате bzImage, а просто zImage. Тази опция е все още достъпна но като се има в предвид размера на новите ядра, е задължително компилирането на bzImage, тъй като старите методи не могат да управляват ядро, което е твърде голямо.

 

 

   4.3 Други файлове за компилация

 

 

'Make mrproper' прави по-обширно изчистване. Това понякога се налага; може да пожелаете да го правите всеки път, когато прилагате кръпки(patch). 'make mrproper' ще изтрие и конфигурационния ви файл, така че ако ви се струва важен, може да запазите копие от него (с разширение .config).

 

'make oldconfig' ще се опита да конфигурира ядрото от стар конфигурационен файл. Това ще стартира 'make config' за вас, най-вероятно не бихте искали да използвате този метод (тъй като бихте искали да промените конфигурацията по подразбиране), освен ако не сте компилирали ядро до сега или имате конфигурационен файл.

 

Вижте часта за модулите за обяснение на 'make modules'

 

 

   4.4 Инсталация на ядрото

 

 

След като вече имате ново ядро, което работи по начина. по който искате, идва ред на инсталирането му. Повечето хора използват LILO (Linux LOader), ако и вие използвате lilo - напишете 'make bzlilo' това ще инсталира ядрото и ще направи необходимите промени в конфигурационния файл на lilo. НО САМО ако lilo е конфигуриран по следния начин: kernel-a ви е /vmlinuz, lilo се намира в /sbin, и конфигурационния файл на lilo е "съгласен".

 

В противен случай ще трябва да използвате lilo директно. Той е относително лесен пакет за инсталиране и работа, но някои хора се объркват от конфигурационния му файл. Прегледайте конфигурационния файл (/etc/lilo/config за по стари версии или /etc/lilo.conf за новите) и вижте каква е конфигурацията. Фаилът ще изглежда по подобен начин:

 

 

 

      image = /vmlinuz

          label = Linux

          root = /dev/hda1

          ...


 

 

'image =' показва ядрото, което използвате. Повечето хора използват /vmlinuz. 'lilo' се използва, за да се определи коя операционна система или ядро да се стартира. 'root' е / на операционната система. Направете копие на ядрото, което използвате и го заменете с новото. ('cp bzImage /vmlinuz' ако използвате '/vmlinuz'). Стартирайте lilo наново - на нови системи може просто да напишете 'lilo', но на по-стари може да се наложи да напишете /etc/lilo/install или дори /etc/lilo/lilo -C /etc/lilo/config

 

 

Ако искате да обновите версията си на lilo или въобще нямате изтеглете си го от ftp  и следвайте инструкциите.

 

За да стартирате старото си ядро от хард диска (друг начин да се спасите в случай, че новото ядро не работи) копирайте следващите редове 'image = xxx' във края на конфигурационния файл на lilo, и променете 'image = xxx' на 'image = yyy', където `yyy' е пътят до копието на старото ви ядро. Може да ви се наложи и да сложите следния ред: `delay=x' ,  където x е време в десети от секундата, за което lilo ще чака да натиснете клавиш (shift например) преди зареждането на новото ви ядро. Също така въведете етикета (label) на старото ви ядро, в случай, че се случи най-лошото.

 

 

 

 

 

5. Инсталиране на кръпки


 

   5.1.  Прилагане на кръпка


 

Обновяване на ядрото може да се направи и с помоща на кръпка. Например ако имате версия 1.1.45 и излезе 'patch46.gz' означава че можете да обновите ядрото си посредством кръпка. Можете да направите резервно копие на дървото източник със командите `make clean' и тогава `cd /usr/src; tar zcvf old-tree.tar.gz linux'.

 

Нека предположим че имате `patch46.gz' във /usr/src. Преминете в /usr/src изпълняваме следната команда `zcat patch46.gz | patch -p0' (or `patch -p0 < patch46' ако кръпката не е компресирана) ще видите пред очите ви да преминават различни неща, казвайки ви какво се опитва да закърпи и дали е успяло или не. Обиккновенно нещата се движат твърде бързо, за да предотвратите това може да използвате флага -s, който кара кръпката да съощава само съобщения за грешки.

За да видите дали има нещо, при което закърпването не е минало гладко, преминете в директорията /usr/src/linux и потърсете за файлове със разширение .rej , може да използвайте find::

 

 

       Find -name '*. rej' -print

 

 

Ще изведе на екрана всички файлове с разширение rej, които се намират в текущата директория или нейна поддиректория.

 

 

Ако всичко е минало без проблеми, използвайте `make clean', `config', и `dep', както е описано в секции 3 и 4.

 

 

Има доста опции към patch командата. Както бе споменато по-горе, patch -s ще потисне изкарването на каквито и да било съобщения, освен тези за грешки. Ако съхранявате вашия сорс код на ядрото на друго място, различно от /usr/src/linux, patch -p1 (в тази директория) ще закърпи нещата правилно и без проблеми. Другите опции на patch са добре документирани в в съответната man страница.

 

 

 

   5.2 Ако нещо не стане както трябва

 

(Забележка: Тази секция касае само доста стари версии на ядрото)

(Забележка втора (на преводачите): И поради тази причина засега няма да я прежеждаме. Ако някой действително се ниждае от нея, то нека ми драсне един e-mail на vsaltirov@bulgaria.com и аз ще му я преведа)

 

 

 

   5.3 Отървете се от .orig файловете

 

Само след няколко кръпки .orig файловете ще започнат да се натрупват. Например аз си спестих над половин мегабайт, когато ги почистих (от 1.1.48 до 1.1.51 бяха натрупвани)

 

          find .  -name '*.orig' -exec rm -f {} ';'

 

ше се погрижи за проблема.

 

Има и по-добри начини да се погрижите за .orig файловете, които зависят от GNU xargs:

 

      find .  -name '*.orig' | xargs rm

 

 

или доста сигурния, но твърде дълъг като команда метод:

 

      find . -name '*.orig' -print0 | xargs --null rm --

 

 

 

 

 

 

   5.4 Други кръпки

 

 

Има и други кръпки, различни от тези, които Линус разпространява (аз ще ги наричам нестандартни). Ако приложите някоя от тези нестандартни кръпки, кръпките на Линус могат и да не проработят, и тогава ще се наложи да инсталирате нови сорс кодове на ядрото или да пипнете в сорс кода на кръпката, което може и да не е особено приятно. Поради тази причина ако не искате да бъркате в сорс кода (което може да има лоши последици) отделете нестандартните кръпки преди да инсталирате такива на Линус или инсталирайте нов сорс код на ядрото. Тогава вие ще можете да видите дали тези нестандартни кръпки работят. Ако те не работят, тогава вие или сте затормозен със старото ядро, играейки си с кръпката или сорс кода, за да я накарате да проработи, или чакате (най-вероятно се молите) да излезе скоро нова версия на тази кръпка.

 

 

Колко чести срещани са кръпките, които не са в стандартната дистрибуция? Най-вероятно ще узнаете за тях. Преди време аз бях използвал кръпка, която караше курсора ми да не премигва. Тази кръпка е (или поне беше) обновявана често при излизането на нови ядра. С новите драйвери за устройства, които се разработват като заредими в паметта модули, нестандартните кръпки са на път да намалеят драстично.

 

 

 

6. Допълнителни пакети

 

Вашето Linux ядро има много характеристики, които не са описани в сорс кода на самото ядро; тези характеристики обикновено се използват от външни пакети. Някои от основните такива са изброени по-долу.

 

 

    6.1 kbd

 

 

Вашата Linux конзола най-вероятно има повече функции отколкото заслужава. Сред тях са възможностите за смяна на шрифтове, смяна на кодовата таблица, смяна на video режима (в по-новите ядра), и т.н. Пакетът kbd има програми, които позволяват на потребителя на прави всичко това, заедно с много кодови таблици и шрифтове за почти всяка клавиатура, пакетът е наличен от същите сайтове, които разпространяват сорс кодовете на ядрото.

 

 

    6.2 util-linux

 

Rik Faith (faith@cs.unc.edu) е събрал на едно място много полезни инструменти, които по странно съвпадение са наречени util-linux. Те сега се поддържат от Andries Brouwer (util-linux@math.uio.no). Те са налични от anonymous ftp ot sunsite.unc.edu в /pub/Linux/system/misc, в този пакет се съдържат програми като setterm, rdev, и ctrlaltdel, които са съобразени с ядрото. Както Рик казва, не инсталирайте без да помислите преди това, не се нуждаете от инсталация на всичко в този пакет, и ако го направите, може и да си създадете проблеми.

 

 

    6.3.  hdparm

 

Както с много програми, това преди беше кръпка.Сега тя е включена в официалния сорс код и програмите, свързани с оптимизация на диска се разпространяват отделно.

 

 

6.4. gpm

 

gpm е съкращение от general purpose mouse. Тази програма ви позволява да маркирате и копирате текст от една виртуална конзола в друга, както и много други неща с голямо разнообразие от мишки.

 

 

7. Някои често срещани затруднения

 

 

    7.1.  make clean

 

Ако новото ви ядро извършва странни неща след рутинно обновяване на ядрото, то най-вероятно сте забравили да make clean преди да компилирате новото ядро. Симптомите могат да бъдат всичко от моментален срив на системата, странни I/O проблеми, до ниска производителност. Не забравяйте също така да извършите и make dep.

 

   

    7.2 Големи или бавни ядра

 

Ако вашето ядро използва голям обем от паметта, то то е твърде голямо, и/или просто отнема цяла вечност при компилация, дори и да имате Quadbazillium-III/4400, то най-вероятно вие имате доста непотребни неща, които са включени и конфигурирани в него (драйвери за устройства, файлови системи, и т.н.). Ако не използвате дадена характеристика, не я компилирайте, тъй като тя заема памет. Най-очевидния симптом за раздуването на ядрото е прекомерно използване на swap пространството на твърдия диск; ако вашия диск издава голямо количество шум и не е от тези стари Fujitsu Eagles, при изключането на които се чува звук от приземяване на самолет, то погледнете в конфигурацията на ядрото си.

 

Вие можете да разберете колко памет използва ядрото ви като вземете пълния обем на RAM паметта във вашата система и извадите от нея количеството ``total mem'' в /proc/meminfo или изхода на командата `free'.

 

 

    7.3 Паралелният ми порт не работи/принтерът ми не работи

 

Конфигурационните опции за PC-та са: Първо, в категорията `General Setup' изберете `Parallel port support' и `PC-style hardware'. Тогава в категорията `Character devices' изберете `Parallel printer support'.

 

Тогава наред идват имената. Linux 2.2 именува устройствата за печат различно от предишните версии. Следствие на това ако сте имали lp1 при старото си ядро, то тогава сега то е lp0 при новото. Използвайте изходът от командата 'dmesg', за да прочетете журналните файлове в /var/log и да разберете точно как е правилното име.

 

 

    7.4 Ядрото не иска да се компилира

 

 

Ако ядрото не се компилира, то тогава най-вероятно е имало неуспешен опит за прилагане на кръпка, или вашите сорс кодове са повредени. Версията ви на gcc може също да не е тази, която е необходима, или да е повредена (например т.нар. include файлове могат да са грешни). Уверете се, че символичните връзки, които Линус описва в README файла са създадени правилно. В общи линии ако стандартното ядро не се компилира, то тогава има някаква сериозна грешка в системата, и преинсталацията на някои инструменти е необходима.

 

В някои случаи gcc може да се срине вселдствие на хардуерни проблеми. Съобщението за грешка ще бъде нещо от сорта: ``xxx exited with signal 15'' и ще изглежда доста мистериозно. Аз нямаше да спомена това, освен ако не ми се беше случило веднъж - имах някаква лоша cache памет и компилаторът от време на време създаваше проблеми. Първо опитайте да преинсталирате gcc ако имате подобни проблеми. Ако вашето ядро се компилира чудесно с изключен външен кеш, редуцирано количество RAM памет и т.н. то най-вероятно имате подобен проблем.

 

Някои хора се дразнят, когато някой им каже, че проблемът може да е в техния хардуер. Аз не си измислям това. Има си специален FAQ за това - той се намира в http://www.bitwizard.nl/sig11/.

 

 

    7.5 Новите версии на ядрото не работят в процеса на първоначалното зареждане

 

 

Не сте стартирали LILO, или той не е конфигуриран правилно. Веднуж имах подобен проблем с config файла: там пишеше `boot = /dev/hda1' вместо `boot = /dev/hda' (Това може да бъде доста изнервящо на първо време, но щом веднъж имате работещ config файл, то няма да се налага да го променяте).

 

 

    7.6 Забравили сте да заредите LILO, или вашата система не стартира въобще

 

 

Опсаааа! Най-доброто нещо, което можете да направите е да заредите от флопи или CD-ROM и да създадете нов флопи диск за първоначално зареждане (`make zdisk' ще свърши работа). Трябва да знаете къде е вашата root файлова система и какъв е нейния вид (ext2, minix). В примера по-долу, трябва да знаете в каква файлова система се намира /usr/src/linux, и къде нормално е монтирана тя.

 

В следващия пример, / е /dev/hda1, и файловата система на /usr/src/linux е /dev/hda3, нормално монтирана в /usr. И двете са ext2 файлови системи. Работещото компресирано ядро в   /usr/src/linux/arch/i386/boot се нарича bzImage.

 

Идеята тук е, че ако имате работещо bzImage ядро, то е възможно да го използвате за новия флопи диск. Друга алтернатива, която може да работи, а може и да не работи по-добре (зависи от конкретния метод, с който сте забъркали тази каша в системата ви), е обсъдена след примера.

 

Първо, заредете системата от boot/root диск или rescue диск и монтирайте файловата система, която съдържа работещо компресирано ядро.

 

      mkdir /mnt

      mount -t ext2 /dev/hda3 /mnt

 

 

Ако mkdir отвърне, че директоричта вече съществува, просто го игнорирайте. Сега отидете до директорията, където е работещия образ на ядрото. Обърнете внимание на това, че:

 

  /mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot

 

Поставете форматирана дискета в устройство ``A:'' (не вашата boot или root дискета!), и копирайте образа на ядрото върху дискетата и конфигурирайте за root файлова система.

 

      cd /mnt/src/linux/arch/i386/boot

      dd if=bzImage of=/dev/fd0

      rdev /dev/fd0 /dev/hda1

 

Прехвърлете се в / and демонтирайте нормалната /usr файлова система:

 

      cd /

      umount /mnt

 

 

Сега трябва да сте в състояние да направите reboot на системата си от това флопи. Не забравяйте да стартирате lilo (или каквото сте сбъркали) след reboot-a!

 

 

Има и друга алтернатива. Ако сте имали работещо ядро в / (/vmlinuz например), то можете да го използвате за boot диск. Ако работещото ядро е /vmlinuz, просто направете тези промени в примера по-горе: променете /dev/hda3 на /dev/hda1 (/ файловата система), /mnt/src/linux на /mnt, и if=bzImage на if=vmlinuz. Забележката за /mnt/src/linux отпада в този случай.

 

Ако използвате LILO с големи дискови устройства (повече от 1024 цилиндъра) може да имате проблеми. Погледнете LILO mini-HOWTO за повече информация.

 

 

    7.7 Получавам съобщение `warning: bdflush not running'

 

 

Това може да бъде сериозен проблем. От версия на ядрото от 1.0 нагоре (излязла около 20.04.1994), програма, наречена 'update', която периодично изчиства буфер



   


Ключови думи: unix компилиране собствено ядро конфигурация


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008