Компилиране на custom ядро в Debian

Статии свързани с компилиране на ядрото и модули към него.

Модератори: Freya, Kulu Ngile

Компилиране на custom ядро в Debian

Мнениеот phantomlord » Нед 28, Май, 2006 13:58

Компилирането на ядро под Debian освен по стандартния, може да си извърши и по специфичен за Debian начин, който ще опиша тук. Както ще видите, всичко става много лесно.

Забележка: За компилиране на ядра по-нови от 2.6.22 вижте по-надолу.

Към момента на писане на тази тема най-новото ядро в хранилищата на Debian е 2.6.16, поради тази причина всички примери са свързани с него.

#1 Влезте в конзолата като супер потребител (su)

#2 Инсталирайте чрез apt-get:
Код за потвърждение: Избери целия код
apt-get install linux-source-2.6.16 linux-headers-2.6.16-1 linux-manual-2.6.16 linux-patch-debian-2.6.16 kernel-package fakeroot libncurses5 libncurses5-dev yaird


Забележка: Новите версии на ядрото са достъпни за сваляне и инсталиране от „unstable“ хранилищата. За да имате достъп до тях чрез apt-get, необходимо е да имате следните редове във файла ‘/etc/apt/sources.list’:
deb ftp://ftp.bg.debian.org/debian/ unstable main contrib non-free
deb-src ftp://ftp.bg.debian.org/debian/ unstable main contrib non-free

Не забравяйте след редакцията на sources.list да изпълните:
Код за потвърждение: Избери целия код
apt-get update


#3 Отидете в директорията ‘/usr/src’ и разархивирайте сорса на ядрото:
Код за потвърждение: Избери целия код
cd /usr/src
tar -jxvf linux-source-2.6.16.tar.bz2


#4 Влезте в директорията, където е разархивиран сорса:
Код за потвърждение: Избери целия код
cd /usr/src/linux-source-2.6.16


#5 Изпълнете командата:
Код за потвърждение: Избери целия код
make menuconfig

Забележка: За предпочитане е да използвате за база ‘config’-a на текущото ви ядро.

#6 Изберете:
Load an Alternate Configuration File

и задайте пълния път до файла. Намира се в директорията /boot

#7 Направете настройките, които да се използват при компилирането на новото ядро. Това отнема много време. Препоръчвам да настроите ядрото съобразно наличния ви хардуер, според това дали процесорът ви е Pentium или AMD. Препоръчвам изключване на модулите, които отговарят на хардуер, който не е наличен и никога няма да бъде наличен в конфигурацията ви. Например, ако дъното ви е с чипсет NForce, интегрирайте модула в ядрото. Останалите модули съответстващи на други чипсети ги изключете. Може да изключите и други неща, които едва ли ви трябват – Amateur radio support, SCSI and RAID support и т.н. Просто разгледайте наличните опции и конфигурирайте ядрото според вашата система и нужди. Можете да използвате следните клавиши и клавишни комбинации:
‘Shift+?’ - за да видите описание на избран модул (за какво служи, от какво зависи и др.)
‘/’ - за търсене.
Не интегрирайте поддръжката на вашата видеокарта в ядрото, а я оставете като модул, защото наличните в ядрото драйвери не поддържат 3D ускорение. Ако ги интегрирате, после няма да можете да инсталирате допълнителните модули предлагани от производителя на видеокартата за активиране на 3D.
Като приключите с настройките, запишете конфигурацията.

#8 Изпълнете:
Код за потвърждение: Избери целия код
make-kpkg clean
fakeroot make-kpkg --revision=custom.1.0 kernel_image

и компилирането на ядрото ще започне. На моята конфигурация процесът протича около 40 мин. и зависи от бързината на системата ви. Ако компилирането прекъсне с някаква грешка, изпълнете:
Код за потвърждение: Избери целия код
make clean

и започнете наново с
Код за потвърждение: Избери целия код
make menuconfig


#9 Когато процесът завърши, в предишната директория (в случая ‘/usr/src’) ще бъде създаден файл ‘linux-image-2.6.16_custom.1.0_i386.deb’.
Инсталирайте го по стандартния начин:
Код за потвърждение: Избери целия код
dpkg -i linux-image-2.6.16_custom.1.0_i386.deb


#10 За да можете да стартирате новото ядро, изпълнете:
Код за потвърждение: Избери целия код
mkinitrd.yaird -o /boot/initrd.img-2.6.16 2.6.16
update-grub


Това е всичко. Само не махайте старата версия на ядрото, преди да се уверите, че новата работи. Ако го направите, после трудно ще успеете да стартирате системата си. Но не е невъзможно, знам от опит ;)
Като завършите с точка ‘#10’ е време да рестартирате компютъра и новото ядро да се  зареди. Стискам палци да запали!!!
Ако имате да правите някакви корекции или да питате нещо, просто пишете.

Допълнение относно ядра по-нови от 2.6.22 вкл.:

Не знам поради какви причини се налага лека промяна в процедурата за настройване и компилиране на ядрото. Ще посоча само разликите:

1. След като заредите config-a на текущия си кернел съгласно инструкциите по-горе и направите желаните настройки, копирайте използвания конфиг със записаните от вас корекции в директорията със сорса по този начин (примерите се отнасят за ядро 2.6.26):
Код за потвърждение: Избери целия код
cd /usr/src/linux-source-2.6.26
cp /boot/config-2.6.26 .config


2. За да започнете компилирането на ядрото изпълнете:
Код за потвърждение: Избери целия код
make oldconfig
make-kpkg --initrd --revision custom01 kernel_image

Когато това завърши, изпълнявайте инструкциите от т. 9 по-горе нататък.


Източник
Последна промяна phantomlord на Сря 03, Сеп, 2008 22:27, променена общо 6 пъти
Hear the cry of War
Louder than before
With his sword in hand
to control the land
Crushing metal strikes
on this frightening night
Fall onto your knees
For the Phantom Lord
Аватар
phantomlord
Шеф
 
Мнения: 1517
Регистриран на: Пет 03, Мар, 2006 1:16
Местоположение: София

Мнениеот phantomlord » Чет 16, Ное, 2006 13:45

Допълнения:

1. След като смените версията на ядрото си, е необходимо да прекомпилирате всички модули, които сте компилирали за предишната версия на ядрото си. Това е напълно нормално, защото модулите се компилират към текущия кернел. При мен модулите, които трябва да компилирам наново когато инсталирам новото ядро са:
- Модула на видеокартата
- Модулите, които се инсталират от VMware за да работи програмата. За да се направи това се изпълнява:
Код за потвърждение: Избери целия код
/usr/bin/vmware-config.pl


2. Внимавайте какви модули изключвате по време на make menuconfig. Някои от тях, които ви се струват ненужни, може да са важни за неща, които са косвено свързани с тях. Например SCSI, RAID & LVM са необходими за да могат да се монтират USB устройствата с памет.

3. След като си компилирате ново ядро, ако се окаже, че ви трябва някой модул, чиято поддръжка сте изключили при конфигуриране на ядрото, не е необходимо да компилирате наново цялото ядро.
Просто влезте пак в make menuconfig, направете нужните промени и после:
Код за потвърждение: Избери целия код
make modules
make modules_install

След това рестартирате за да се заредят модулите или си ги зареждате ръчно с modprobe.

4. Желателно е ако ви се занимава, да свалите пакета с готовото ядро, което е с желаната от вас версия от хранилището на Debian, после да отворите пакета с архиватор и да извадите от него config-a му за да го използвате като база за изграждане на вашето ядро.
В deb пакета linux-image........... има 3 файла:
control.tar.gz
data.tar.gz
debian-binary
config-a се намира в data.tar.gz, в директорията boot. Просто го вадите от там, слагате го някъде и посочвате пътя до него в make menuconfig, Load an Alternate Configuration File.

5. Можете на системата си да имате едновременно инсталирани няколко версии на gcc. Примерно 3.4, 4.0, 4.1. По ваше желание можете да изберете коя от тях да се използва при компилирането на ядрото. Ето как да направите това:
- Преименувате символната връзка /usr/bin/gcc на gcc.bak
- На нейно място правите нова символна връзка, която да сочи към желаната от вас версия на gcc:
Код за потвърждение: Избери целия код
ln -sv /usr/bin/gcc-X.Y /usr/bin/gcc

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

6. И накрая една интересна опция. В make menuconfig, General setup се вижда това:
() Local version - append to kernel release

Онова, което напишете в скобите ще се "прекачи" към версията на вашия нов кернел. Например, сега uname -r ми вади следният резултат:
$ uname -r
2.6.18phantomlord
Последна промяна phantomlord на Пет 29, Дек, 2006 2:54, променена общо 1 път
Hear the cry of War
Louder than before
With his sword in hand
to control the land
Crushing metal strikes
on this frightening night
Fall onto your knees
For the Phantom Lord
Аватар
phantomlord
Шеф
 
Мнения: 1517
Регистриран на: Пет 03, Мар, 2006 1:16
Местоположение: София

Мнениеот Kulu Ngile » Сря 06, Дек, 2006 10:53

How To Compile A Kernel - The Debian (Sarge) Way е доста добра статия за компилиране на ядро при положение, че сте със Sarge
8)
Ако съдбата е срещу теб, толкова по-зле за нея.

Изображение
APT HOWTO
Kulu Ngile
Унуфри
 
Мнения: 1233
Регистриран на: Съб 04, Мар, 2006 1:04
Местоположение: София

Мнениеот Progress » Пон 11, Юни, 2007 9:12

Ето аз как го правя

Тегля си ядро от kernel.org. Препоръчително е най-новото за момента. Но не пач а сорса на ядрото т.е. цъкате нa "F" (Full source).

След това:

Код за потвърждение: Избери целия код
su


Код за потвърждение: Избери целия код
cd /usr/src/


Код за потвърждение: Избери целия код
tar xvfj /там/където/е/linux-x.x.xx.x.tar.bz2


Код за потвърждение: Избери целия код
cd linux-x.x.xx.x/


Код за потвърждение: Избери целия код
make xconfig -> Там можем да заредим стария конфиг от менюто Load .config-x.x.xx който по принцип е в /boot/


Код за потвърждение: Избери целия код
make-kpkg --initrd --revision examplerev01 kernel_image


Код за потвърждение: Избери целия код
make-kpkg --initrd --revision examplerev01 kernel_headers

Код за потвърждение: Избери целия код
cd ..


И ще видим че имаме два пакета:

kernel-image-xxxxxxx-xexamplerev01_i386.deb
kernel-headers-xxxxxx-xexamplerev01_i386.deb

Съответно ги инсталираме

Код за потвърждение: Избери целия код
dpkg -i kernel-image-xxxxxxx-xexamplerev01_i386.deb


Код за потвърждение: Избери целия код
dpkg -i kernel-headers-xxxxxx-xexamplerev01_i386.deb


Код за потвърждение: Избери целия код
mkinitrd /boot/config-x.x.xx x.x.xx - не е задължително

Код за потвърждение: Избери целия код
update-grub


Това е.

И един съвет - Желателно е да не ползвате стария конфиг защото в новите версии на ядрата доста неща се различават и не винаги сработва. Да не говорим че като си компилирате собствено ядро с избрана от вас конфигурация от модули се мейква с пъти по-бързо. При мен това става за около 35 минути.

Източник

Успех на всички ентусиасти които за вбъдеще ще ползват темата.
Progress your mind
Аватар
Progress
Участник
 
Мнения: 562
Регистриран на: Сря 24, Яну, 2007 20:12

Мнениеот Kulu Ngile » Пон 13, Апр, 2009 23:27

При опит за билдване на img-то на 2.6.29, се получава някаква греда, а именно.... can't open pci module list /lib/blablabla/modules.pcimap.

Просто изпълнете:
Код за потвърждение: Избери целия код
depmode -a -m -F /boot/System-2.6.29-gaara 2.6.29-gaara
dpkg --configure -a
mkinitrd.yaird -o /boot/initrd.img-2.6.29-gaara 2.6.29-gaara
update-grub


Заменете 2.6.29-gaara с вашето ядро :)
Ако съдбата е срещу теб, толкова по-зле за нея.

Изображение
APT HOWTO
Kulu Ngile
Унуфри
 
Мнения: 1233
Регистриран на: Съб 04, Мар, 2006 1:04
Местоположение: София

Мнениеот phantomlord » Съб 30, Май, 2009 22:48

Не е ли по-правилно:
Код за потвърждение: Избери целия код
depmod -a -m -F /boot/System.map-2.6.29-gaara 2.6.29-gaara
;)
Hear the cry of War
Louder than before
With his sword in hand
to control the land
Crushing metal strikes
on this frightening night
Fall onto your knees
For the Phantom Lord
Аватар
phantomlord
Шеф
 
Мнения: 1517
Регистриран на: Пет 03, Мар, 2006 1:16
Местоположение: София

Мнениеот ToxiNiK » Нед 06, Фев, 2011 11:20

Вчера ми се наложи да компилирам ново ядро и при изпълнението на вариантите описани по-горе не ми се получи нищо. Дава ми постоянно грешка при компилирането. Затова порових и намерих работещ начин за компилиране на къстъм ядро. Работи и при последните версии теглени от http://kernel.org .Системата е с инсталиран чист Debian 5.0.8 netinstall.

1. Ъпдейтваме инфото от репозиторите:
Код за потвърждение: Избери целия код
apt-get update


2. Инсталираме необходимите пакети:
Код за потвърждение: Избери целия код
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential


3. Влизаме в папката където ще съхраняваме сорсовете:
Код за потвърждение: Избери целия код
cd /usr/src


4. В момента на написването на този текст последният стабилен кернел от kernel.org е 2.6.37. Теглим го:
Код за потвърждение: Избери целия код
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.37.tar.bz2


5. Разкомпресираме:
Код за потвърждение: Избери целия код
tar -xjvf linux-2.6.37.tar.bz2


6.Влизаме в папката с разкомпресирания кернел:
Код за потвърждение: Избери целия код
cd /usr/src/linux-2.6.37


7. Ако вече имаме разкомпресиран кернела и сме правили предишни опити за компилиране, изчистваме ги с:
Код за потвърждение: Избери целия код
make clean && make mrproper


8. Копираме config файла от текущото ядро в папката с новото което ще компилираме (командата взима името автоматично):
Код за потвърждение: Избери целия код
cp /boot/config-`uname -r` ./.config


9.Стартираме конфигурационното меню:
Код за потвърждение: Избери целия код
make menuconfig

- най-отдолу избираме "Load an Alternate Configuration File" и в излезлото меню избираме ".config" за да заредим конфигурацията на текущия кернел, която копирахме преди малко.
- в менюто "General Setup" => "Local version-append to kernel release" пишем накаква добавка по която ще различаваме този къстъм кернел, например "custom1". Най-отзад на добавката задължително трябва да има число, защото иначе може да даде грешка.
- променяме каквото ни трябва в конфигурацията
- накрая излизаме от главното меню от "<Exit>" и отговаряме на въпроса дали да запише новата конфигурация с "Yes"

10. Пишем следните команди и чакаме няколко часа докато компилира ядрото и всички модули:
Код за потвърждение: Избери целия код
make-kpkg clean
fakeroot make deb-pkg


11. За да видим компилираното .deb ядро:
Код за потвърждение: Избери целия код
cd /usr/src
ls -l


12. Инсталираме ядрото:
Код за потвърждение: Избери целия код
dpkg -i linux-image-2.6.37-custom1_2.6.37-custom1-1-amd64.deb


13. Създаваме ramdisk:
Код за потвърждение: Избери целия код
update-initramfs -k 2.6.37-custom1 -c


14. Ъпдейтваме GRUB:
Код за потвърждение: Избери целия код
update-grub


15. Рестартираме:
Код за потвърждение: Избери целия код
shutdown -r now


16. Радваме се на новото ядро.

Надявам се да съм бил полезен на някой ;)
ToxiNiK
Участник
 
Мнения: 5
Регистриран на: Чет 18, Фев, 2010 18:03


Назад към Компилиране и настройки на ядрото

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 0 госта

cron