Pagbuo ng Linux kernel. Linux kernel management (building, compiling, configuring) Ipinagpatuloy para sa mga miyembro lamang

Pagbuo ng Linux Kernel
Kamusta mahal na mga mambabasa. Ngayon ay magsasalita ako tungkol sa isang kawili-wiling aralin paano bumuo ng linux kernel. Bakit maaaring kailanganin mong bumuo ng kernel sa iyong sarili? Sa katunayan, maaaring mayroong maraming mga kadahilanan: ang pangangailangan na gumamit ng karagdagang mga tampok ng kernel, i-optimize ang kernel para sa iyong computer, i-update ang kernel sa pinakabagong bersyon. Sa artikulong ito, ipapakita ko ang proseso ng pagkuha ng mga mapagkukunan, pag-configure, pag-compile at pag-install ng Linux kernel sa system, bilang bahagi ng gawain ng pagsasama ng suporta para sa cryptoloop (loop encryption device) sa kernel.

Pagkuha ng source code
Una sa lahat, dapat nating makuha ang source code, ito ay maaaring gawin sa iba't ibang paraan at mula sa iba't ibang mga mapagkukunan. Iminumungkahi kong isaalang-alang lamang ang dalawa: ang mga repositoryo ng system, ang opisyal na kernel site. Ang mga repositoryo ay malamang na may mga bersyon ng kernel na mas luma kaysa sa mga nasa opisyal na website, ngunit ang mga mapagkukunang ito ay dapat magsama ng mga patch at pag-aayos mula sa tagagawa ng iyong pamamahagi ng Linux. Ang diskarte na ito ay mas mainam maliban kung kailangan mo ng ilang bagong teknolohiya o tampok na sinusuportahan lamang ng mga mas bagong kernel. Maaari mong tingnan ang lahat ng mga bersyon ng mga mapagkukunan ng kernel na nakapaloob sa mga repositoryo ng iyong system sa pamamagitan ng pag-type sa terminal (wasto para sa Ubuntu Linux, ang ibang mga distribusyon ay maaaring may ibang pangalan ng package):

apt-cache paghahanap sa linux-source

Ililista ng utos ang magagamit na mga pakete:


Tulad ng nakikita mo, mayroon lang akong package na may kasalukuyang bersyon at ang package na may bersyon 3.5 (sa katunayan, ang kasalukuyang bersyon ng kernel ay 3.5 din). Upang mapalawak ang listahan ng mga kernel na magagamit sa ganitong paraan, sulit na kumonekta ng mga karagdagang repositoryo. Makukuha natin ang kernel gamit ang command: sudo apt-get install linux-source

Ang linux-source ay ang pangalan ng source package, maaaring iba ito sa iyong kaso.
Matapos makumpleto ang command, may lalabas na file sa /usr/src na direktoryo, sa aking kaso - linux-source-3.5.0.tar.bz2. Pumunta tayo sa folder, i-unzip ang archive at para sa kaginhawahan lumikha ng isang simbolikong link:

Cd /usr/src sudo tar -xjvf linux-source-3.5.0.tar.bz2 sudo ln -s linux-source-3.5.0 linux

Kung kailangan mo ng pinakabagong bersyon ng kernel, maaari mo itong i-download anumang oras mula sa kernel.org. Kapansin-pansin na ang site ay naglalaman ng parehong mga matatag na bersyon ng mga kernel at mga bersyon na nilayon para sa pagsubok at pagpapabuti (kadalasan ang kanilang pangalan ay naglalaman ng pagdadaglat na "RC" - Release candidate). Kung hindi mo nais ang mga hindi kinakailangang problema sa system, ipinapayo ko sa iyo na i-download ang matatag na bersyon:

I-save ang source archive sa /usr/src folder. Upang i-unpack ang resultang archive, maaaring kailanganin mong mag-install ng mga karagdagang utility:

sudo apt-get install xz-utils

Ngayon, tulad ng kaso ng pag-download ng kernel mula sa mga repositoryo, dapat nating i-unpack ang source archive at lumikha ng isang link:

Cd /usr/src sudo tar -xpJf linux-3.8.5.tar.xz sudo ln -s linux-3.8.5.tar.xz linux

pagsasaayos at pagsasama-sama.
Narito tayo sa pinakakawili-wili. Bago tayo magsimula, mag-install tayo ng ilang karagdagang mga pakete:

sudo apt-get install build-essential kernel-package libncurses-dev

Gagawa kami ng bagong configuration batay sa kernel na kasalukuyang ginagamit ng system:

Cd /usr/src/linux sudo gumawa ng oldconfig

Kung nagko-configure ka ng mas bagong bersyon ng kernel kaysa sa available sa system, malamang na mayroon itong mga parameter na wala sa configuration ng kasalukuyang kernel. Sa kasong ito, hihilingin sa iyo ng programa na gumawa ng isang pagpipilian, maaari mong iwanan ang mga default na halaga sa pamamagitan lamang ng pagpindot sa Enter key. Sa anumang kaso, ang pagsasaayos ay hindi pa kumpleto. Ngayon ay maaari na nating gawin ang mga setting na kailangan natin sa pamamagitan ng menu ng pagsasaayos:

sudo gumawa ng menuconfig

Ilulunsad ng terminal ang programa ng pagsasaayos:

Dito, ang mga pagpipilian sa pagsasaayos ay nahahati sa mga seksyon upang gawing mas madaling i-navigate ang mga ito. Tulad ng sinabi ko sa itaas, kailangan kong isama ang suporta para sa cryptoloop sa kernel. Upang gawin ito, pumunta sa seksyong "Mga Driver ng Device", at mula dito sa subsection na "I-block ang Mga Device":

Nahanap namin ang parameter na "Cryptoloop Support", sa tabi nito ay ang letrang "M", na nangangahulugan na ang suporta para sa mga device sa pag-encrypt ay idaragdag bilang isang kernel module na maaaring paganahin gamit ang modprobe command. Kailangan nating isama ang suporta para sa teknolohiyang ito nang direkta sa kernel upang ito ay palaging suportado. Ilipat ang focus sa parameter na "Cryptoloop Support" at pindutin ang space bar. Ang letrang "M" ay dapat mapalitan ng simbolo na "*", na nangangahulugang ang suporta para sa teknolohiyang ito ay "tatahiin" sa kernel. Mag-ingat, ang isang espasyo ay nangangahulugan na ang teknolohiya ay hindi susuportahan sa lahat.

Pindutin ang "Tab" key at pindutin ang "Exit" na buton hanggang sa ma-prompt kang i-save ang mga pagbabago:

Sumasagot kami ng "Oo". Matagumpay naming nakumpleto ang pagsasaayos!
Magsimula tayo sa pag-compile. Una, inaalis namin ang mga file na natitira sa mga nakaraang build, kung nagpapatakbo ka ng build sa unang pagkakataon, hindi kinakailangan na patakbuhin ang command na ito: sudo make-kpkg clean

Nagsisimula kami ng compilation:

sudo make-kpkg -j4 --initrd --append-to-version=-mykernel kernel_image kernel_headers

Ang J4 ay isang flag na tumutukoy kung gaano karaming mga thread ang gagamitin para sa compilation. Ito ay lubos na magpapabilis ng compilation sa mga multi-core na processor. Ang numero 4 dito ay nagpapahiwatig ng 4 na stream. Magtakda ng kasing dami ng mga thread gaya ng bilang ng mga core ng iyong processor na "nakikita" ang system.
-mykernel - prefix na nagpapahiwatig na ang kernel ay ginawa nang manu-mano, maaari mo itong baguhin, sa katunayan hindi ito nakakaapekto sa anuman.

Dito magsisimula ang proseso ng compilation. Maaaring tumagal mula 10 minuto hanggang ilang oras, depende sa kung gaano kalakas ang iyong computer:

Pag-install ng kernel sa system

Pagkatapos makumpleto ang compilation, dalawang file na may extension na "deb" ang dapat lumabas sa /usr/src directory. Sila ang mga installation packages ng aming bagong kernel at maaaring i-install gamit ang dpkg utility:

sudo dpkg -i linux-image-3.8.5-mykernel_3.8.5-mykernel-10.00.Custom_i386.deb
sudo dpkg -i linux-headers-3.8.5-mykernel_3.8.5-mykernel-10.00.Custom_i386.deb

Binabati kita! Ang kernel ay naka-install, ngayon ang system ay mag-boot gamit ang kernel na ito bilang default, ngunit kung mayroon kang mga problema sa bagong kernel maaari kang palaging mag-boot gamit ang luma sa pamamagitan ng pagpili nito sa boot screen - Grub. Sa pamamagitan nito, tinatapos ko ang artikulo ngayong araw at nais kong magtagumpay ka, mahal na mga mambabasa!

Sa step-by-step na gabay na ito, matututunan mo kung paano maayos na buuin at i-install ang >2.6 branch kernel sa pamilya ng Ubuntu OS.

Hakbang 1: Kunin ang Pinagmulan ng Kernel

Ang mga mapagkukunan ng kernel ng Ubuntu ay maaaring makuha sa dalawang paraan:

    Sa pamamagitan ng pag-install ng archive mula sa repository, na may awtomatikong overlay ng mga pinakabagong opisyal na patch. Magda-download ito ng ~150 MB na pakete sa kasalukuyang folder. Upang makuha ang pinagmulan ng kernel, ang bersyon nito ay naka-install sa computer, patakbuhin ang command: apt-get source linux-image-`uname -r`

    O, sa halip na `uname -r`, maaari kang tumukoy ng isang partikular na bersyon mula sa mga available sa repositoryo.

Ang listahan ng mga bersyon na available sa repository ay makikita sa pamamagitan ng pag-type ng command: “apt-get source linux-image-” at, nang hindi pinindot ang Enter , pindutin nang dalawang beses ang Tab key.

Huwag kalimutang paganahin ang pagbabahagi ng mapagkukunan sa repository (Mga Setting ng System → Mga Programa at Update → Software ng Ubuntu → Source Code). Magagawa ito mula sa console sa pamamagitan ng pag-uncomment sa mga linya na nagsisimula sa deb-src sa /etc/apt/sources.list file, at pagkatapos ay mag-update gamit ang command na: “sudo apt-get update”.

    Ang pinakabagong bersyon ng kernel ay magagamit mula sa git . Ang laki ng na-download na package ay ~500-800 Mb. git clone git://kernel.ubuntu.com/ubuntu/ubuntu- .git

    saan - pangalan ng release, halimbawa:

    I-clone ng Git ang git://kernel.ubuntu.com/ubuntu/ubuntu-xenial.git

Iba pang mga core

Mayroon ding mga kernel na hindi garantisadong gagana sa ilalim ng Ubuntu. Halimbawa, mayroong isang kilalang problema sa isang bilang ng mga tanyag na application ng system (sa partikular, mga driver ng NVidia, VirtualBox), na, kapag na-install, ay pinagsama-sama para sa naka-install na kernel. Samakatuwid, upang mai-install ang mga ito sa isang kernel na hindi pamantayan para sa bersyong ito ng Ubuntu (halimbawa, ang Ubuntu 16.04 ay may kasamang kernel 4.4.0), maaaring mangailangan sila ng hiwalay na manu-manong compilation o mga espesyal na patch, at maaaring hindi sinusuportahan ng application ang pinakabagong mga bersyon ng kernels mula sa kernel.org sa lahat.

    I-archive mula sa base na bersyon nang walang mga patch, i.e. hal. "4.8.0", "4.8.10": sudo apt-get install linux-source

I-unpack ang resultang archive gamit ang mga command:

Cd ~/ tar -xjf linux-2.6.x.y.tar.bz2

O sa kaso ng linux-source:

Cd /usr/src tar -xjf linux-source-2.6.x.y.tar.bz2

Hakbang 2: Pagkuha ng Mga Package na Kailangang Buuin

Ang hakbang na ito ay kinakailangan lamang kung ang kernel ay binuo sa computer sa unang pagkakataon.

Patakbuhin ang sumusunod na mga utos upang mai-install ang mga pangunahing pakete:

sudo apt-get update sudo apt-get build-dep linux sudo apt-get install kernel-package

    config- ang tradisyonal na paraan ng pag-configure. Ang programa ay nagpapakita ng mga parameter ng pagsasaayos nang paisa-isa, na nag-uudyok sa iyo na magtakda ng ibang halaga para sa bawat isa sa kanila. Hindi inirerekomenda para sa mga walang karanasan na gumagamit.

    oldconfig- ang configuration file ay awtomatikong nilikha batay sa kasalukuyang kernel configuration. Inirerekomenda para sa mga nagsisimula.

    defconfig- ang configuration file ay awtomatikong nilikha, batay sa mga default na halaga.

    menuconfig- pseudo-graphical na interface para sa manu-manong configuration, hindi nangangailangan ng sequential input ng mga value ng parameter. Inirerekomenda para sa paggamit sa terminal.

    xconfig- graphical (X) na interface para sa manu-manong configuration, hindi nangangailangan ng sequential input ng mga value ng parameter.

    gconfig- graphical (GTK+) manual configuration interface, hindi nangangailangan ng sequential input ng mga value ng parameter. Inirerekomenda para sa paggamit sa kapaligiran ng GNOME.

    localmodconfig- isang configuration file na awtomatikong nilikha, na kinabibilangan lamang ng kung ano ang kailangan para sa partikular na device na ito. Kapag tinawag ang utos na ito, ang karamihan sa kernel ay mababago

Kung sakaling gusto mong gamitin config, oldconfig, defconfig, localmodconfig o localyesconfig, hindi mo na kailangan ng anumang karagdagang mga pakete. Sa kaso ng natitirang tatlong mga pagpipilian, ang mga karagdagang pakete ay dapat ding mai-install.

menuconfig patakbuhin ang sumusunod na command:

sudo apt-get install libncurses5-dev

Upang i-install ang mga pakete na kailangang gamitin gconfig patakbuhin ang sumusunod na command:

sudo apt-get install libgtk2.0-dev libglib2.0-dev libglade2-dev

Upang i-install ang mga pakete na kailangang gamitin xconfig patakbuhin ang sumusunod na command:

Bago ang Ubuntu 12.04: sudo apt-get install qt3-dev-tools libqt3-mt-dev

sudo apt-get install libqt4-dev

Hakbang 3. Paglalapat ng mga patch

Ang hakbang na ito ay opsyonal.

Ang mga opisyal na patch ay nailapat na sa mga mapagkukunan kung ang kernel ay nakuha sa pamamagitan ng utos na inilarawan sa itaas:

apt-get source linux-image-`uname -r`

Kung hindi ka pa nag-apply ng mga patch sa source code dati, pagkatapos ay patakbuhin ang sumusunod na command:

sudo apt-get install patch

Ang utos na ito ay mag-i-install ng patch program na kailangan, maaari mong hulaan, maglapat ng mga patch. Ngayon i-download ang patch file sa folder kung saan mo na-unpack ang kernel. Maaaring ito ay isang archive file (hal. Bzip2 o Gzip) o isang hindi naka-compress na patch file.

Sa puntong ito, ipinapalagay na nai-save mo na ang file sa folder kung saan na-unpack mo dati ang kernel at na-install ang patch program.
Kung ang file na iyong na-download ay nasa Gzip (*.gz) na format, pagkatapos ay patakbuhin ang sumusunod na command upang kunin ang mga nilalaman ng archive:

Gunzip patch-2.6.x.y.gz

Kung ang file na na-download mo ay nasa Bzip2 (*.bz2) na format, pagkatapos ay patakbuhin ang sumusunod na command upang kunin ang mga nilalaman ng archive:

Bunzip2 patch-2.6.x.y.bz2

kung saan ang 2.6.x.y ay ang bersyon ng kernel patch. I-unpack ng kaukulang mga command ang patch file sa kernel source folder. Bago ilapat ang patch, kailangan mong tiyakin na gagana ito nang walang mga error. Upang gawin ito, patakbuhin ang command:

Patch -p1 -i patch-2.6.x.y --dry-run

kung saan ang 2.6.x.y ay ang bersyon ng kernel patch. Ang utos na ito ay gayahin ang aplikasyon ng isang patch nang hindi binabago ang mga file mismo.

Kung walang mga error na nangyari sa panahon ng pagpapatupad nito, ang mga pagbabago ay maaaring ligtas na maipatupad sa mga file mismo. Upang gawin ito, patakbuhin ang command:

Patch -p1 -i patch-2.6.x.y

kung saan ang 2.6.x.y ay ang bersyon ng kernel patch. Kung walang mga error, matagumpay na nailapat ang patch sa source code.

Pansin! Bago mag-apply ng patch, gawin ang sumusunod: 1. Mag-download mula sa http://www.kernel.org ng patch ng parehong bersyon ng iyong mga source. 2. Patakbuhin ang sumusunod na command: patch -p1 -R

kung saan ang 2.6.x.y ay ang bersyon ng patch at ang iyong mga source

Hakbang 4. Configuration ng hinaharap na kernel build

Mag-navigate sa folder kung saan mo na-unpack ang kernel sa pamamagitan ng pagpapatakbo ng command

Cd ~/linux-2.6.x.y

kung saan ang 2.6.x.y ay ang bersyon ng kernel na iyong na-download.

Sa puntong ito, dapat ay napagpasyahan mo na ang paraan ng pagsasaayos ng kernel (kung hindi, tingnan ang mga ito sa seksyong Pagkuha ng mga kinakailangang pakete upang mabuo. Depende dito, patakbuhin ang sumusunod na command upang simulan ang paraan ng pagsasaayos na iyong pinili:

    config- ang tradisyonal na paraan ng pag-configure. Ang programa ay nagpapakita ng mga parameter ng pagsasaayos nang paisa-isa, na nag-uudyok sa iyo na magtakda ng ibang halaga para sa bawat isa sa kanila. Tinatawag ng make config command

    oldconfig- ang configuration file ay awtomatikong nilikha batay sa kasalukuyang kernel configuration. Inirerekomenda para sa mga nagsisimula. Tinatawag ng make oldconfig command

    defconfig- ang configuration file ay awtomatikong nilikha, batay sa mga default na halaga para sa partikular na arkitektura. Tinatawag ng make defconfig command

    menuconfig- pseudo-graphical na interface para sa manu-manong configuration, hindi nangangailangan ng sequential input ng mga value ng parameter. Inirerekomenda para sa paggamit sa terminal. Tawag: gumawa ng menuconfig

    gconfig at xconfig- mga graphical na configurator para sa manu-manong pagsasaayos. Tawag: gumawa ng gconfig

    Gumawa ng xconfig

    ayon sa pagkakabanggit

    localmodconfig at localyesconfig- mga awtomatikong configurator. Ang config ay nilikha batay sa kasalukuyang tinatawag na mga module at ang tumatakbong kernel. Ang pagkakaiba sa pagitan ng dalawang configurator na ito ay ang bilang ng mga module. Sa unang kaso, magkakaroon ng hindi bababa sa 50% ng core, at sa pangalawa, hindi hihigit sa 2 module. Tawag: gumawa ng localmodconfig

    Gumawa ng localyesconfig

    ayon sa pagkakabanggit

Pagkatapos ng tawag, ilulunsad ang kaukulang configuration program. Gawin ang mga kinakailangang setting ayon sa iyong mga pangangailangan, i-save ang configuration file at magpatuloy sa susunod na hakbang.

Hakbang 5 Pagbuo ng Kernel

Kaya kumpleto na ang paghahanda. Ngayon ay maaari mong simulan ang proseso ng pagbuo ng kernel. Upang gawin ito, patakbuhin ang command:

Fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers #-j<количество ядер процессора>+1

Ang pagbuo ng kernel ay maaaring tumagal mula 20 minuto hanggang ilang oras, depende sa pagsasaayos ng kernel at sa mga teknikal na parameter ng computer. Ang pagbuo sa isang multi-core na processor ay maaaring ilang beses na mas mabilis

Hakbang 6 Pag-install ng Mga Kernel Images at Header

Kapag natapos na ang kernel build, lalabas ang dalawang deb packages sa iyong home folder. Kailangan nilang mai-install. Upang gawin ito, patakbuhin ang mga utos:

Cd ~/ sudo dpkg -i linux-image-2.6.xy-custom_2.6.xy-custom-10.00.Custom_arc.deb sudo dpkg -i linux-headers-2.6.xy-custom_2.6.xy-custom-10.00. Custom_arc.deb

kung saan ang 2.6.x.y ay ang bersyon ng built kernel, ang arc ay ang processor architecture (i386 - 32-bit, amd64 - 64-bit).
Kung hindi mo alam ang eksaktong pangalan ng package, ilista ang mga file sa iyong home directory gamit ang command

at hanapin ang dalawang paketeng ito.

Hakbang 7 Bumuo ng Initial RAM Disk

Ang Ubuntu ay nangangailangan ng paunang RAM disk image upang gumana nang tama. Upang gawin ito, patakbuhin ang command:

sudo update-initramfs -c -k 2.6.x.y-custom

kung saan ang 2.6.x.y ay ang bersyon ng build kernel.

Hakbang 8 Pag-update ng GRUB Boot Loader Configuration

Upang gawing available ang bagong bersyon ng kernel para sa pagpili kapag nag-boot ang computer, patakbuhin ang sumusunod na command:

sudo update-grub

Ang menu.lst (para sa GRUB bersyon 1) o grub.cfg (para sa GRUB bersyon 2) na file ay ia-update upang ipakita ang mga naka-install na operating system at kernel na mga imahe.

Hakbang 9 Pagsusuri sa Kernel

Ang pagsasama-sama at pag-install ng kernel ay matagumpay na nakumpleto! Ngayon i-restart ang iyong computer at subukang i-boot ang system gamit ang bagong kernel. Upang matiyak na ang system ay nagsimula sa bagong kernel, patakbuhin ang command

Uname-r

Ipapakita nito ang bersyon ng kernel na ginagamit.

Kung nagawa nang tama, maaari mong tanggalin ang mga source archive at ang buong linux-2.6.x.y na direktoryo sa iyong home folder. Ito ay magpapalaya ng humigit-kumulang 5 GB sa iyong hard drive (ang laki ng nabakanteng espasyo ay depende sa mga opsyon sa pagbuo).

Nakumpleto nito ang proseso ng pagpupulong at pag-install, binabati kita!

Bakit may gustong mag-compile ng bagong kernel? Ito ay madalas na hindi kinakailangan dahil ang default na kernel na ipinadala kasama ng Debian ang humahawak sa karamihan ng mga pagsasaayos. Gayundin, madalas na nag-aalok ang Debian ng ilang mga alternatibong kernel. Kaya baka gusto mong suriin muna kung mayroong alternatibong kernel image package na mas tumutugma sa iyong hardware. Gayunpaman, maaaring maging kapaki-pakinabang ang pag-compile ng bagong kernel upang:

Huwag matakot na subukang i-compile ang kernel. Ito ay masaya at kumikita.

Upang mag-compile ng isang kernel sa paraang Debian, kailangan mo ng ilang mga pakete: , at ilang iba pa na malamang na naka-install na (tingnan para sa kumpletong listahan).

Ang pamamaraang ito ay gagawa ng .deb ng iyong kernel source, at, kung mayroon kang hindi karaniwang mga module, gumawa ng naka-synchronize na .deb na umaasa sa mga iyon din. Ito ay isang mas mahusay na paraan upang pamahalaan ang mga kernel na imahe; hahawakan ang kernel, ang System.map, at isang log ng aktibong config file para sa build.

Tandaan na hindi mo ginagawa mayroon upang i-compile ang iyong kernel sa "paraan ng Debian"; ngunit nalaman namin na ang paggamit ng sistema ng packaging upang pamahalaan ang iyong kernel ay talagang mas ligtas at mas madali. Sa katunayan, maaari mong makuha ang iyong mga mapagkukunan ng kernel mula mismo sa Linus sa halip na , ngunit ginagamit pa rin ang paraan ng compilation.

Tandaan na makakahanap ka ng kumpletong dokumentasyon sa paggamit sa ilalim ng . Ang seksyong ito ay naglalaman lamang ng isang maikling tutorial.

Pagkatapos nito, ipagpalagay namin na mayroon kang malayang kontrol sa iyong makina at kukunin ang iyong kernel source sa isang lugar sa iyong home directory. Ipagpalagay din namin na ang iyong kernel na bersyon ay 3.16. Siguraduhin na ikaw ay nasa direktoryo kung saan mo gustong i-unpack ang mga kernel source, i-extract ang mga ito gamit at baguhin sa direktoryo na gagawin.

Ngayon, maaari mong i-configure ang iyong kernel. Patakbuhin kung naka-install, na-configure at pinapatakbo ang X11; tumakbo kung hindi man (kakailanganin mong mai-install). Maglaan ng oras upang basahin ang online na tulong at maingat na pumili. Kapag may pag-aalinlangan, karaniwang mas mainam na isama ang driver ng device (ang software na namamahala sa mga hardware peripheral, gaya ng mga Ethernet card, SCSI controllers, at iba pa) na hindi ka sigurado. Mag-ingat: ang iba pang mga opsyon, na hindi nauugnay sa isang partikular na hardware, ay dapat na iwan sa default na halaga kung hindi mo naiintindihan ang mga ito. Huwag kalimutang piliin ang "Kernel module loader" sa "Loadable module support" (hindi ito pinili bilang default). Kung hindi kasama, ang iyong pag-install ng Debian ay makakaranas ng mga problema.

Linisin ang source tree at i-reset ang mga parameter. Upang gawin iyon, gawin.

Ngayon, i-compile ang kernel: . Ang numero ng bersyon ng "1.0" ay maaaring baguhin sa kalooban; isa lang itong numero ng bersyon na gagamitin mo para subaybayan ang iyong mga kernel build. Gayundin, maaari mong ilagay ang anumang salitang gusto mo bilang kapalit ng "custom" (hal., pangalan ng host). Maaaring magtagal ang pag-compile ng kernel, depende sa kapangyarihan ng iyong makina.

Kapag kumpleto na ang compilation, maaari mong i-install ang iyong custom kernel tulad ng anumang package. Bilang ugat, gawin . Ang bahagi ay isang opsyonal na sub-architecture, depende sa kung anong mga opsyon sa kernel ang iyong itinakda. ay i-install ang kernel, kasama ang ilang iba pang magagandang sumusuporta sa mga file. Halimbawa, ang ay maayos na mai-install (nakakatulong para sa pag-debug ng mga problema sa kernel), at mai-install, na naglalaman ng iyong kasalukuyang set ng configuration. Ang iyong bagong kernel package ay sapat na matalino upang awtomatikong i-update ang iyong boot loader upang magamit ang bagong kernel. Kung nakagawa ka ng modules package, kakailanganin mo ring i-install ang package na iyon.

Oras na para i-reboot ang system: basahin nang mabuti ang anumang babala na maaaring ginawa ng hakbang sa itaas, pagkatapos .

Para sa karagdagang impormasyon sa mga kernel ng Debian at compilation ng kernel, tingnan ang Handbook ng Kernel ng Debian Linux. Para sa higit pang impormasyon sa , basahin ang mainam na dokumentasyon sa .

Kung naaalala mo, hindi pa katagal natutunan namin kung paano bumuo ng FreeBSD kernel mula sa pinagmulan. Ang tanong ay, bakit hindi matutong gawin ang parehong sa Linux kernel? Ang mga dahilan para sa pagbuo ng Linux kernel mula sa pinagmulan ay, sa pangkalahatan, pareho - pagkuha ng pinakabagong bersyon ng kernel, agarang paglalapat ng mga patch ng seguridad, pag-optimize para sa mga partikular na gawain at partikular na hardware, pati na rin ang pagnanais na makilahok sa pagbuo ng kernel, kahit sa papel ng QA.

Mahalaga! Ang pagsunod sa mga tagubilin sa post na ito ay maaaring magresulta sa pagkawala ng iyong data. Gumawa ng mga backup at tandaan na ginagawa mo ang lahat sa iyong sariling peligro at peligro. Lahat ng inilarawan sa ibaba ay nasubok sa Ubuntu 14.04 LTS. Ngunit sa iba pang mga bersyon ng Ubuntu, pati na rin sa iba pang mga pamamahagi ng Linux, ang mga pagkakaiba ay dapat na minimal.

Pagse-set up ng bootloader

I-edit ang /etc/default/grub tulad nito:

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=10
#GRUB_HIDDEN_TIMEOUT_QUIET=totoo
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i-s2>/dev/null ||echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="tahimik na splash"
GRUB_CMDLINE_LINUX=""

Pagkatapos ng pag-edit ay sinasabi namin:

sudo update-grub

Bilang resulta, bago mag-boot ang system, sasabihan ka ng 10 segundo upang piliin ang kernel kung saan mo gustong mag-boot. Napakadaling gamitin kung guluhin mo ang iyong configuration ng kernel at gusto mong mag-boot gamit ang nakaraang bersyon!

Mag-install ng mga dependency

Kakailanganin namin ang hindi bababa sa mga sumusunod na pakete:

sudoapt-get installgitgccmakebc fakeroot dpkg-dev\
libncurses5-dev libssl-dev

Sa maraming mga sistema, lahat ng mga ito, gayunpaman, ay naroroon na.

Pagkuha ng pinagmulan

wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.6.4.tar.xz
tar-xz-xvf linux-4.6.4.tar.xz
cd linux-4.6.4

O, kung gusto mo ang pinakabago, maaari mong kunin ang pinagmulan nang direkta mula sa Git:

# Salamin: https://github.com/torvalds/linux
git clone'git://git.kernel.org/pub/scm/linux/kernel/git/'\
'torvalds/linux.git'
cd linux

Sa paghusga sa katotohanan na hindi ko mahanap ang v4.6.4 tag sa Git, ang mga release ng kernel ng Linux ay ginawang eksklusibo sa anyo ng mga naka-compress na tar archive.

Kung, sa halip na isang vanilla kernel, gusto mong bumuo ng isang kernel na may mga patch mula sa Canonical:

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git
cd ubuntu-trusty
git tag|mas mababa
git checkout Ubuntu-lts-4.4.0-31.50_14.04.1

Mula sa aking sariling karanasan, kung gumagamit ka ng Ubuntu, maaari mong ligtas na gamitin ang vanilla kernel. Hindi malamang na magkakaroon ka ng anumang mga problema dito.

Tandaan: Kapansin-pansin, sa mga umiiral na medyo sikat na pamamahagi ng Linux, tanging ang Gentoo, Slackware, at Arch Linux ang tila gumagamit ng kernel nang walang sariling mga patch.

Anyway, mayroon ka na ngayong source code.

Pag-compile at pag-install ng kernel

Piliin ang mga opsyon kung saan itatayo ang kernel:

Kung kinakailangan, baguhin ang mga setting, i-click ang I-save, pagkatapos ay Lumabas. Bilang resulta, isang file na naglalaman ng mga parameter na napili namin ay gagawin.

Sa update kernel (gumagamit ka na ba ng ilang uri ng kernel?) Maginhawang kunin ang config ng kasalukuyang kernel, at itakda ang mga bagong opsyon sa kanilang mga default na halaga:

zcat/proc/config.gz > ./.config
gumawa ng olddefconfig

Sa wakas, kinokolekta namin:

make-j4 bindeb-pkg LOCALVERSION=-custom

Ang core ay binuo nang medyo mahabang panahon. Sa aking laptop, ang pagpupulong ay tumagal ng 1 oras at 15 minuto. Gayunpaman, mula sa oras na ito O Ang natitira ay ginugol sa pagbuo ng isang higanteng pakete ng kernel na may mga simbolo ng debug.

Manu-manong pagbuo at pagsasaayos ng Linux kernel

Maaaring hindi paganahin ang pagpupulong ng package na ito sa pamamagitan ng pagkomento sa parameter na CONFIG_DEBUG_INFO sa config. Tandaan lamang na ang package na ito ay kinakailangan ng SystemTap at iba pang mga kapaki-pakinabang na tool.

Bilang karagdagan sa kernel mismo, maaari ka ring mangolekta ng dokumentasyon:

# mayroon ding `make pdfdocs` at iba pa, tingnan ang `make help`
gumawa ng htmldocs
chromium-browser Documentation/DocBook/index.html

Sa pagtatapos ng pagpupulong subsidiary direktoryo na nakikita namin ang isang bagay tulad ng:

linux-firmware-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-headers-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom-dbg_4.4.13-custom-1_amd64.deb
linux-libc-dev_4.4.13-custom-1_amd64.deb

Inilalagay namin ang lahat ng mga deb-package maliban sa dbg-bersyon ng kernel na may mga karaniwan at i-reboot. Pagkatapos mag-reboot, tinitingnan namin ang output ng command. Tinitiyak namin na talagang nag-boot kami gamit ang bagong kernel. Kung may mali sa bagong kernel, sa bootloader pipiliin lang namin ang isa kung saan na-boot ang system dati. Pagkatapos mag-boot gamit ang lumang kernel, mabilis naming inalis ang mga pakete ng bagong kernel, at voila - bumalik ang system sa dati nitong estado.

Bukod pa rito, pagkatapos mag-load ng bagong kernel, maaari kang magpatakbo ng mga pagsubok dito:

sudomake kselftest
sudomake kselftest-clean

Binabati kita, alam mo na ngayon kung paano bumuo ng Linux kernel!

Konklusyon

Mga materyales sa internals ng Linux kernel:

  • KernelNewbies.org, isang site para sa mga baguhan sa Linux kernel na may sarili nitong mailing list, IRC channel, forum, wiki, at higit pa;
  • LKML.org, isang site para sa komportableng pagbabasa ng mailing list ng mga developer ng Linux kernel sa pamamagitan ng browser. Mag-ingat, madalas nitong nasisira ang pag-format ng mga titik! Sa ganitong kahulugan, ang archive ng mailing list sa marc.info ay mas mahusay;
  • Linux Cross Reference, isang site para sa kumportableng pagbabasa ng Linux kernel code sa pamamagitan ng browser;
  • Ang aklat na Linux Kernel Development, 3rd Edition ay ang pinakabagong libro sa Linux kernel sa English (2010, kernel 2.6.x), mayroong pagsasalin sa Russian;
  • Ang aklat na Linux-Treiber entwickeln, 4th Edition ay mas bago (2015, kernel 4.x), ngunit nakasulat sa German at walang pagsasalin;
  • Ang libreng Linux Insides na aklat ni Alexander Kuleshov a.k.a @0xAX ay mukhang ang pinakanaa-access at napapanahon, ngunit kasalukuyang nasa proseso ng pagsulat;
  • Minsan may makikita kang kapaki-pakinabang sa Linux Kernel HTML Documentation, ang opisyal na dokumentasyon mula sa Linux kernel sources;
  • Mga halimbawa para sa aklat na Linux Device Drivers, 3rd Edition, na sinusubukang panatilihing napapanahon, kasama ang mga mapagkukunan para sa ika-4 na edisyon, na kasalukuyang isinusulat;

Binubuo mo ba ang kernel mula sa pinagmulan, at kung gayon, bakit? 🙂

Dagdag: Maaari ka ring maging interesado sa artikulong The Scandalous Truth About Debugging Kernel Code on Linux.

Mga Tag: Linux, Ring0.

Pag-compile ng linux kernel


Itinuturing ng marami na ito ay isang walang kabuluhang pag-aaksaya ng oras upang ipakita ang sarili bilang isang matalino at advanced na "Linuxoid". Sa katunayan, ang pag-compile ng kernel ay isang napakahalagang bagay. Sabihin nating bumili ka ng bagong laptop na walang gumaganang webcam. Ang iyong mga aksyon? Tumingin ka sa search engine at maghanap ng solusyon sa problema sa isyung ito. Madalas ay maaaring lumabas na ang iyong webcam ay tumatakbo sa isang mas bagong bersyon ng kernel kaysa sa mayroon ka. Kung hindi mo alam kung anong bersyon ang mayroon ka, i-type ang uname -r sa terminal, bilang resulta ay makukuha mo ang bersyon ng kernel (halimbawa, linux-2.6.31-10). Gayundin, ang kernel compilation ay malawakang ginagamit upang mapataas ang pagganap: ang katotohanan ay ang mga pamamahagi ng kernel ay pinagsama-sama "para sa lahat" bilang default, dahil dito, kabilang dito ang isang malaking bilang ng mga driver na maaaring hindi mo kailangan. Kaya kung alam mo nang mabuti ang iyong hardware, maaari mong i-disable ang mga hindi kinakailangang driver sa yugto ng pagsasaayos. Posible rin na paganahin ang suporta para sa higit sa 4 gigabytes ng RAM nang hindi binabago ang bit depth ng system.

Paano bumuo ng isang linux kernel? Pagbuo ng Linux Kernel

Kaya, kung kailangan mo pa ring magkaroon ng iyong sariling kernel, simulan natin ang pag-compile!


Ang unang bagay na dapat gawin ay kunin ang source code para sa nais na bersyon ng kernel. Kadalasan kailangan mong makuha ang pinakabagong stable na bersyon. Lahat ng opisyal na bersyon ng kernel ay makukuha sa kernel.org.

Kung mayroon ka nang naka-install na X server (home computer), maaari kang pumunta sa site sa iyong paboritong browser at i-download ang gustong bersyon sa isang tar.gz (gzip compressed) archive. Kung nagtatrabaho ka sa console (halimbawa, hindi mo pa na-install ang X server o kino-configure ang server), maaari kang gumamit ng text browser (halimbawa, mga elink).

Maaari mo ring gamitin ang karaniwang wget download manager:


tar -zxvf path_to_archive

Pag-configure ng kernel.

Compilation.
gumawa ng && gumawa ng pag-install
Naghihintay kami mula 20 minuto hanggang ilang oras (depende sa kapangyarihan ng computer). Naka-install ang kernel. Upang ipakita ito sa listahan ng grub(2), i-type (bilang ugat)
update-grub


Archive ng artikulo:
Mayo 2017
Marso 2017
Abril 2016
Marso 2016
Oktubre 2013
Setyembre 2013
Mayo, 2013
Marso 2013
Nobyembre 2012
Hulyo 2012
Hunyo 2012
Abril 2012
Marso 2012
Pebrero 2012
Abril 2011
Marso 2011
Pebrero 2011
Enero 2011
Disyembre 2010
Nobyembre 2010
Oktubre 2010
Setyembre 2010
Agosto 2010
Hulyo 2010
Hunyo 2010
Mayo 2010
Abril 2010
Marso 2010

Random:

Stellarium virtual planetarium: isang pangkalahatang-ideya ng mga bagong feature

BOINC: computing para sa agham

Gambas: Pangunahing pag-unlad sa linux

Mga Serial Diagram ng SSH 2.0

Linuxnow.ru: Mga plano para sa hinaharap

Biglang nauubusan ng libreng espasyo sa disk? Marahil ang problema ay nasa mga log.

Mga kasamahan: lahat
Linux para sa lahat

Ang aming mga banner:


Magtakda ng banner

Linux kernel configuration

Sinusuri ang source packages

Ang pag-recompile ng isang kernel ay nangangailangan ng mga mapagkukunan nito.

Blog tungkol sa system administration. Mga artikulo tungkol sa Linux, Windows, NetApp storage at virtualization.

Inilalagay ng Red Hat ang mga kernel source sa iisang rpm package, ngunit hindi naka-install bilang default. Ang pangalan ng package na ito:

kernel-source-2.4.2-2.1386.rpm

Bilang karagdagan sa source code, upang muling i-compile ang kernel, kailangan mo ng compiler na binubuo ng dalawang bahagi:

gumawa ng utility;

ang compiler ng C language mismo ay gcc o egcs.

Ang paglikha ng isang backup na kopya ng kasalukuyang kernel ay isinasagawa sa tatlong yugto:

1. Paglikha ng isang backup na kopya ng mga mapagkukunan ng kernel, na nagpapahintulot sa iyo na ibalik ito kung ang configuration ay nasira.

2. Paglikha ng backup na kopya ng kernel mismo bilang isang kilalang paraan ng paglulunsad ng system.

3. Paglikha ng bagong entry para sa operating system loader, na maaaring magamit upang mag-boot mula sa kernel backup.

Ang paglikha ng isang mapagkukunang backup ay ginagawa sa pamamagitan ng pagkopya sa direktoryo ng kernel source sa disk. Ang pagbawi ay ginagawa sa pamamagitan ng pagkopya sa kabilang direksyon.

Kapag ang kernel ay muling na-compile, ang lumang kernel ay isinusulat sa isang file na may .old extension. Gayunpaman, ang kopya ng kernel na ito ay hindi pa magagamit para i-boot ang system. Ipinapaliwanag nito ang pangangailangang gawin ang mga operasyon sa itaas.

Ang LILO-type na operating system loader, na karaniwang ginagamit sa pag-boot ng Linux, ay na-configure sa pamamagitan ng pag-link sa isang kernel file sa root file system.

Pagkatapos i-back up ang kernel, kailangan mong magdagdag ng isa pang entry sa /etc/lilo.conf file upang payagan kang simulan ang Linux gamit ang lumang kernel:

buksan ang file /etc/lilo. conf sa isang text editor

lumikha ng isang kopya ng buong partisyon;

baguhin ang dalawang posisyon sa kopya:

palitan ang pangalan ng kernel file ng pangalan ng backup na kopya nito (kasama ang extension);

palitan ang partition label ng isang bagay tulad ng linux. orihinal (orihinal na Linux) o linux-previous (lumang Linux).

Ang mga linyang nagsisimula sa initrd ay dapat mapalitan ng naaangkop na mga fallback, gaya ng initrd-2 .4.2-2. orig. img;

sumulat ng mga pagbabago sa /etc/lilo. conf.

ipasok ang command /sbin/lilo para magpasok ng bagong entry sa bootloader. Kapag pinatakbo mo ang lilo command, ang mga label ng mga larawang ipinasok sa operating system boot loader ay ipapakita sa screen.

Sa susunod na pag-reboot ng system, ang bagong kernel ID ay ipapakita sa LILO boot loader tooltip.

Pag-configure ng Bagong Kernel

Ang pagsasaayos ay nagpapasya kung aling mga tampok ang isasama sa kernel, na hindi isasama, at iba pa. Maaari kang pumili sa pagitan ng pag-configure ng lumang kernel at pag-install/pag-configure ng bago. Halimbawa, gamit ang Red Hat Linux 7.1, maaari mong i-configure muli ang isang umiiral na 2.4.2 kernel na may mga bagong opsyon. Maaari mo ring i-download at i-install ang bagong 2.4.4 kernel. Bagama't magkaiba ang mga detalye ng pagsasaayos sa dalawang kaso, ang mga utility na ginamit at ang mismong pamamaraan ng pagsasaayos ay pareho.

Ang Linux ay may tatlong magkahiwalay na configuration utilities, bawat isa ay may sariling katangian.

Isang utility na may interface ng command line. Patuloy na sinasagot ng user ang mga tanong tungkol sa mga feature na kailangang isama sa kernel. Ang utility na ito ay kapaki-pakinabang para sa mga taong alam kung paano magtrabaho kasama ang kernel, at para sa mga may configuration script para sa utility na ito.

Utility na may menu ng text mode. Ang multi-level na menu ng utility na ito ay nagbibigay-daan sa iyo upang itakda at muling i-install ang mga parameter ng kernel sa anumang pagkakasunud-sunod.

GUI utility. Ito ang pinakakaakit-akit na utility, ngunit ito ay tumatakbo lamang sa graphical na X Window System.

Ang mga nakalistang utility ay gumagawa ng parehong configuration file na ginagamit ng make utility kapag nag-compile ng buo o bahagyang mga kernel.

Mga pagpipilian sa kernel

Kapag sinusuri ang mga setting sa anumang configuration program (command line, text-based o GUI), kailangan mong maging malinaw tungkol sa epekto ng mga setting na ito sa pagpapatakbo ng kernel.

Ang pagkakakilanlan ng mga parameter sa bawat programa ay iba, ngunit sa lahat ng tatlo ang parehong hanay ng mga ito ay ipinakita. Ang mga parameter ay nahahati sa dalawang pangunahing grupo:

modular;

hindi modular.

Kung ang bloke ng programa na naaayon sa parameter na ito ay hindi na-load bilang isang kernel module, maaari itong isa sa dalawang bagay:

[*] isang mahalagang bahagi ng kernel;

Isang mahalagang bahagi ng kernel.

Ang mga character sa mga square bracket (kasama ang mga panaklong) ay tumutugma sa mga label ng opsyon sa menu ng configuration programs (maliban sa command line utility).

Para sa mga modular na parameter, mayroong tatlong mga opsyon para sa pagtatakda (ayon sa kanilang representasyon sa menu ng configuration utilities):

<>ay hindi kasama sa kernel at hindi ginawa bilang isang module na maaaring i-load sa ibang pagkakataon:

<*>ay kasama sa kernel, kaya hindi na kailangang i-load ito sa ibang pagkakataon bilang isang module:

<М>Kasama bilang isang module, ngunit hindi bilang bahagi ng kernel. Maaaring i-install o alisin ang isang bloke sa kernel anumang oras.

Minsan hindi mababago ang value ng isang parameter hangga't hindi nakatakda ang isa pang parameter. Halimbawa, maaari kang mag-install ng suporta para sa isang partikular na SCSI device pagkatapos lang i-enable ang suporta para sa mga device na iyon sa pangkalahatan.

Kapag ang mga kinakailangang tool (ang make utility at ang gcc compiler) at mga source text ay na-install sa system, maaari mong patakbuhin ang isa sa mga configuration utilities at simulan ang pag-configure ng kernel.

Configurator ng GUI

Ang paglulunsad ng configuration utility na may graphical na interface ay isinasagawa sa sumusunod na pagkakasunud-sunod.

Maglunsad ng X Windows system (na may anumang graphical na kapaligiran at desktop).

Magbukas ng terminal emulator window (command line window).

Tulad ng paglulunsad ng nakaraang utility, maraming mga mensahe tungkol sa pagsasama-sama ng utility ay mag-flash sa screen, at pagkatapos ng ilang minuto ay magbubukas ang pangunahing window nito.

kanin. 8. Kernel configuration utility na may graphical na interface: menu-buttons para sa pagtatakda ng mga value ng parameter

Ang graphical na utility ay hindi masyadong naiiba sa menuconf ig utility. Dito, ang mga pagpipilian ay ikinategorya din; Ang pag-click sa isang partikular na kategorya ay magbubukas ng isang dialog box na may listahan ng mga opsyon, ang bawat isa ay maaaring itakda sa isang halaga na tumutukoy kung ang kaukulang tool ay dapat gamitin bilang bahagi ng kernel, bilang isang mai-load na module, o hindi sa lahat.

Ang nasabing isang dialog box ay ipinapakita sa Fig.

kanin. 9. Ang mga dialog box na tulad nito ay nagtakda ng mga opsyon sa pagsasaayos ng kernel

Ang 2.4.2 kernel sa Red Hat Linux ay sumusuporta sa simetriko multiprocessor architecture bilang default. Dapat mong itakda ang kaukulang opsyon sa n kung ang iyong computer ay may isang processor lamang.

Sa kanan ng bawat opsyon ay isang Help button.

Ang isang malaking bentahe ng graphical configuration utility (lalo na para sa mga unang beses na kernel configurator) ay ang menu ay nagpapakita ng mga dependencies sa pagitan ng iba't ibang mga opsyon. Halimbawa, sa seksyong I-block ang Mga Device, hindi mo mai-install ang suporta sa RAID na nakapaloob sa kernel hanggang sa paganahin ang opsyong Suporta sa Pagmamaneho ng Maramihang Device.

Kung sa menuconfig utility ang pag-asa ng mga parameter sa bawat isa ay ipinapakita sa pamamagitan ng indentation ng mga pangalan ng parameter sa menu, pagkatapos ay sa graphical na utility ay imposible lamang na magtakda ng hindi pinapayagan na mga kumbinasyon ng mga parameter. Ang pagtatrabaho sa graphical na utility ay nakakatulong upang maunawaan ang mga dependency sa pagitan ng iba't ibang mga module.

Sa dulo ng pangunahing menu ng graphical na utility ay mga utos na katulad ng kaukulang mga utos ng utility mula sa menu ng text mode.

I-save at Lumabas (Lumabas nang may pag-save). Paglikha ng kernel configuration file at pag-shut down sa utility.

Umalis Nang Hindi Nagtitipid. Isinasara ang utility nang hindi gumagawa ng kernel configuration file.

Nang hindi gumagawa ng kernel configuration file gamit ang isa sa mga nakalistang utility, hindi posible ang muling pag-compile ng kernel.

I-load ang Configuration Mula sa File. Nilo-load ang configuration file na ginawa kanina.

Configuration ng Store Para Mag-file. Pagsusulat ng data ng configuration sa isang file na may tinukoy na pangalan (para sa karagdagang paggamit o paglipat sa isang kasamahan). Hindi nito naaapektuhan ang pangangailangang isagawa ang utos na I-save at Lumabas, na lumilikha ng configuration file para sa muling pag-compile ng kernel.

Pag-compile at pagpapatakbo ng bagong kernel

Matapos makumpleto ang pagsasaayos, kailangan mong tingnan kung may bagong configuration file (.config) na matatagpuan sa /usr/src/linux-2 .4.2 na direktoryo (depende sa numero ng bersyon). Kung ang .config configuration file ay nasa lugar, maaari mong gamitin ang make command upang muling i-compile ang kernel.

Karaniwan, ang kernel recompilation ay tumatagal mula 15 minuto hanggang ilang oras. Depende ito sa bilis ng processor, ang halaga ng RAM at isang bilang ng iba pang mga kadahilanan, kaya maginhawa upang pagsamahin ang lahat ng mga utos na ipinasok sa panahon ng pagsasama-sama sa isa, na pinaghihiwalay ng isang semicolon, upang ang mga ito ay maisakatuparan nang sunud-sunod.

Sinisimulan ang proseso ng recompilation

Ang mga utos sa ibaba ay idinisenyo upang lumikha ng isang bagong kernel sa pamamagitan ng muling pagsasama-sama ng lahat ng mga module nito at pagsusulat ng mga ito sa naaangkop na mga direktoryo ng system. (Doon sila ay magagamit sa mga kernel command.)

Upang muling i-compile ang system, ang mga sumusunod na command ay ipapasok.

# gumawa ng dep; maglinis; gumawa ng bzlmage; gumawa ng mga module; gumawa ng modules_install

Ang bawat make command ay maaaring ipasok nang hiwalay, pagkatapos makumpleto ang nauna.

Pagkatapos ipasok ang mga command na ito, ang mga linya ay mag-flash sa screen na naglalarawan sa mga direktoryo na na-access ng make program, ang paglulunsad ng gcc compiler. para sa pag-compile ng iba't ibang source file at pag-link ng iba't ibang block. Ang bawat isa sa mga utos na ito ay tatagal ng ilang minuto upang makumpleto.

Maaari ka na ngayong lumikha ng boot disk para sa bagong kernel gamit ang command

Bago isagawa ang utos na ito, dapat kang magpasok ng na-format na floppy disk sa drive. Ang tapos na boot disk ay dapat na masuri. I-restart ang iyong computer nang hindi inaalis ang floppy mula sa drive.

Pagkatapos isagawa ang mga command ng kernel compilation at bumalik sa command line, isang bagong kernel ang nilikha. Upang mag-boot ng isang system gamit ang isang bagong kernel, dapat itong ilipat sa karaniwang direktoryo kung saan ito tatakbo. Ginagawa ito sa pamamagitan ng pagpasok ng utos

# cf /usr/src/linux-2.4.2/arch/i386/boot/bzlmage /boot/vmlinuz-2.4.2-2

Panghuli, para i-update ang boot map, patakbuhin ang lilo command:

Maaari kang tumukoy ng numero ng bersyon sa pangalan ng kernel na imahe na kokopyahin. Mahalagang tumugma ang pangalan ng file na ito sa pangalang tinukoy sa /etc/lilo.conf file.

Pagsubok ng bagong kernel

Pagkatapos ilipat ang bagong kernel file sa default na direktoryo (tinukoy sa lilo.conf file), maaaring i-reboot ang system gamit ang kernel na ito.

Kaagad pagkatapos ng pag-reboot, suriin ang pagpapatakbo ng mga bagong tool kung saan sinimulan ang muling pagsasama-sama. Maaari mong gawin ang mga sumusunod.

Paghahambing ng mga volume ng luma at bagong mga core. Dapat mong suriin ang dami ng memorya na inookupahan ng operating system sa pamamagitan ng pagbibigay ng libreng command.

Pag-mount ng file system o pagtatangkang i-access ang isang device nang hindi naglo-load ng kernel module upang suportahan ito (kung ang suporta para sa device na iyon ay binuo sa kernel).

Paggamit ng mga mapagkukunan ng network (tulad ng mga IP alias) na wala sa lumang kernel.

Maaaring kailanganing suriin ang timestamp ng kasalukuyang kernel file. Upang gawin ito, ipasok ang uname command. Binibigyang-daan ka nitong tiyakin na kasalukuyang tumatakbo ang system kasama ang na-recompile na kernel. Ang timestamp at petsa ng kernel ay dapat tumugma sa oras na ito ay muling na-compile.

Kung ang tugon mula sa uname command ay nagpapahiwatig na ang system ay hindi na-boot gamit ang bagong kernel, tingnan ang LILO bootloader. Suriin kung ang pangalan ng bootable kernel ay tama sa /etc/lilo.conf file.

TUMINGIN PA:

Pag-compile at Pag-install ng Linux Kernel mula sa Source sa Debian

Materyal mula sa Bryansk Linux Users Group at www.rm.pp.ru

Ang bawat pamamahagi ay may sariling mga detalye ng pagbuo ng kernel, at ang artikulong ito ay nakatuon sa eksakto kung paano ito gagawin sa Debian Etch. Ibinubunyag din nito ang tanong kung paano ilapat ito o ang patch na iyon sa kernel kapag kinakailangan upang suportahan ang ilang functionality o bagong hardware sa iyong system. Ang artikulo ay pangunahing inilaan para sa mas advanced na mga gumagamit at walang mga garantiya na ang pamamaraang ito ay gagana ayon sa nararapat at lahat ng inilarawan na mga aksyon at responsibilidad ay nasa iyo.

  1. Tandaan
  2. Pamamaraan isa. Pagbuo ng kernel sa mga .deb na pakete
  3. Paglalapat ng mga patch
  4. Pag-configure ng kernel
  5. Pag-compile ng kernel
  6. Pag-install ng bagong kernel
  7. Ikalawang pamamaraan. "tradisyonal" na paraan
  8. Mga problema
  9. Mga link

Tandaan

Dalawang paraan para sa pagbuo ng kernel ay ilalarawan. Ang build na variant ng .deb packages na maaaring i-install sa iyong system o sa ibang system ay unang ilalarawan.

Ang pangalawang paraan ay ang tinatawag na "tradisyonal" na paraan.

Pamamaraan isa. Pagbuo ng kernel sa mga .deb na pakete

Pag-install ng mga kinakailangang pakete para sa pag-compile ng kernel

Una, i-update natin ang mga listahan ng package:

# apt-get update

I-install ang mga package na kailangan namin:

# apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

Pag-download ng mga mapagkukunan ng kernel

Pumunta sa direktoryo ng /usr/src, pumunta sa www.kernel.org at piliin ang gustong bersyon ng kernel. Sa kasong ito, isasaalang-alang ang bersyon na linux-2.6.23.1.tar.bz2. Dina-download:

# cd /usr/src # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.1.tar.bz2

I-unpack ang mga source at lumikha ng simbolikong link:

# tar xjf linux-2.6.23.1.tar.bz2 # rm linux (alisin ang nakaraang symlink) # ln -s linux-2.6.23.1 linux # cd /usr/src/linux

Paglalapat ng mga patch

Opsyonal at hindi kinakailangan huwag gawin ito!

Minsan kinakailangan ang mga driver o feature na hindi sinusuportahan sa kasalukuyang kernel, gaya ng teknolohiya ng virtualization o iba pang mga detalye na wala sa kasalukuyang release. Sa anumang kaso, ito ay naitama sa pamamagitan ng paglalapat ng tinatawag na mga patch (kung mayroon man).

Kaya sabihin nating na-download mo ang kinakailangang patch (tawagin natin itong patch.bz2 halimbawa) sa /usr/src. Ilapat ang na-download na patch sa aming mga mapagkukunan (Dapat ay nasa direktoryo ka pa rin ng /usr/src/linux):

# bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run # bzip2 -dc /usr/src/patch.bz2 | patch-p1

Ang unang utos ay isang pagsubok lamang at walang mga pagbabagong ilalapat sa mga mapagkukunan. Kung walang ibinalik na mga error pagkatapos ng unang command, maaari mong patakbuhin ang pangalawang command para ilapat ang patch. Sa anumang kaso huwag isagawa ang pangalawang utos kung ang mga error ay naibigay pagkatapos ng una!

Sa ganitong paraan maaari kang maglapat ng mga patch sa mga mapagkukunan ng kernel. Halimbawa, may ilang feature na available lang sa 2.6.23.8 kernel, at ang mga source ay hindi naglalaman ng kinakailangang functionality, ngunit ang patch-2.6.23.8.bz2 ay inilabas. Maaari mong ilapat ang patch na ito sa 2.6.23 kernel source, ngunit hindi 2.6.23.1 o 2.6.23.3, atbp. Maaari mong basahin ang higit pa tungkol dito sa:

Prefix (prepatches) - katumbas ng alpha release; dapat ilapat ang mga patch sa mga pinagmumulan ng isang buong nakaraang release na may 3-digit na bersyon (halimbawa, ang patch 2.6.12-rc4 ay maaaring ilapat sa mga pinagmumulan ng bersyon 2.6.11, ngunit hindi sa bersyon 2.6.11.10.)

Nangangahulugan ito na kung gusto naming bumuo ng 2.6.23.8 kernel, kailangan naming i-download ang mga mapagkukunan para sa bersyon 2.6.23 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6. 23.tar.gz) na inilapat sa pangalawang paraan na "traditonal" na paraan!

Ilapat ang patch-2.6.23.8.bz2 sa kernel 2.6.23:

# cd /usr/src # wget http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.22.8.bz2 # cd /usr/src/linux # bzip2 -dc /usr/ src/patch-2.6.23.8.bz2 | patch -p1 --dry-run # bzip2 -dc /usr/src/patch-2.6.23.8.bz2 | patch-p1

Pag-configure ng kernel

Magandang ideya na gamitin ang umiiral nang configuration file ng tumatakbong kernel para din sa bago. Samakatuwid, kinopya namin ang umiiral na configuration sa /usr/src/linux:

# maglinis && gumawa ng mrproper # cp /boot/config-`uname -r` ./.config

# gumawa ng menuconfig

pagkatapos nito ay ilo-load ang graphical kernel configuration menu. Piliin ang "Mag-load ng Alternate Configuration File" sa menu ng configurator at i-click ang "OK". Pagkatapos (kung kinakailangan) gawin ang mga kinakailangang pagbabago sa configuration ng kernel sa pamamagitan ng pag-navigate sa mga menu (makikita ang mga detalye ng configuration ng kernel sa www.google.com ). Kapag tapos ka na at pindutin ang "Lumabas", ang tanong na "Nais mo bang i-save ang iyong bagong configuration ng kernel?" ay tatanungin, sasagutin namin sa afirmative na "Oo".

Pagbuo ng Linux Kernel

Pag-compile ng kernel

Ang pagbuo ng kernel ay ginagawa sa dalawang utos lamang:

# make-kpkg clean # fakeroot make-kpkg --initrd --append-to-version=-cybermind kernel_image kernel_headers

Pagkatapos --append-to-version=, maaari mong isulat ang anumang pangalan na gusto mo, ngunit dapat itong magsimula sa isang minus sign (-) at walang mga puwang.

Ang proseso ng pag-compile at pagbuo ng mga .deb na pakete ay maaaring tumagal nang medyo matagal. Ang lahat ay depende sa pagsasaayos ng kernel at sa mga kakayahan ng iyong processor.

Paglutas ng problema sa paggawa ng initrd.img

Kamakailan lamang, lumitaw ang isang bug sa Debian, na binubuo sa katotohanan na pagkatapos mag-install ng mga pakete na may mga kernel na binuo sa paraang inilarawan dito, ang /boot/initrd.img file na naaayon sa kanila ay hindi nilikha. Upang ayusin ang isang naka-install na kernel, kakailanganin mong lumikha ng initrd.img nang manu-mano:

update-initramfs -c -k<полная-версия-ядра>

Upang malutas ang problema "para sa hinaharap" - magkomento, tulad ng ipinapakita, ang pangalawa sa mga linyang sinipi sa ibaba sa /etc/kernel/postinst.d/initramfs-tools file:

Ang # kernel-package ay nagpapasa ng dagdag na arg; hack para hindi tumakbo sa ilalim ng kernel-package #[ -z "$2" ] || labasan 0

Pag-install ng bagong kernel

Kapag matagumpay na nakumpleto ang kernel build, dalawang .deb package ang gagawin sa /usr/src na direktoryo:

# cd /usr/src # ls -l

linux-image-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb - aktwal na kernel mismo at linux-headers-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Customde_i3.Customde_i3. kailangan upang bumuo ng iba pang mga module (halimbawa, kapag gumagawa ng mga module ng driver ng nVidia). Pag-install ng mga ito:

# dpkg -i linux-image-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb # dpkg -i linux-headers-2.6.23.1-cybermind_2.6.23.1-cybermind_2.6.23.1-cybermind-10.0.

(Maaari na ngayong i-install ang mga package na ito sa isa pang system nang hindi na kailangang buuin muli ang mga ito.)

Lahat, kumpleto na ang pag-install, ang bootloader menu, ang pag-install ng bagong RAM disk at ang kernel ay awtomatikong gagawin. Ito ay nananatiling lamang upang i-reboot:

Ikalawang pamamaraan. "tradisyonal" na paraan

Isinasagawa namin ang lahat ng mga puntong inilarawan sa itaas BAGO ang puntong "Pag-compile ng kernel".

# gawin lahat # gumawa ng modules_install # gumawa ng pag-install

Gaya ng dati, maaaring tumagal ang build, depende sa configuration ng kernel at mga kakayahan ng processor.

Ang pangunahing kawalan ng pamamaraang ito ay kung madalas mong i-update ang mga kernel, pagkatapos ng ilang sandali ay maipon ang isang malaking bilang ng mga ito at gugustuhin mong alisin ang mga hindi nagamit. Upang gawing mas madali ito, maaari kang bumuo ng kernel at iba pang mga file na naka-install sa system gamit ang "make modules_install" at "make install" na mga command sa isang deb package (o sa halip, dalawa simula sa kernel 2.6.27) tulad ng una paraan, ngunit gagamitin namin dito ang mga kernel script:

# gawin lahat # gawing deb-pkg

Dalawang .deb file ang lalabas sa direktoryo isang antas sa itaas ng source na direktoryo. Inipon ko ang kernel sa /usr/src/linux-2.6.27.10 na direktoryo at nakakuha ako ng mga file sa /usr/src/ direktoryo

# linux-2.6.27.10_2.6.27.10-1_amd64.deb # linux-firmware-image_2.6.27.10-1_all.deb

Naka-install ang kernel gamit ang command

# dpkg -i linux-2.6.27.10_2.6.27.10-1_amd64.deb

Maaaring alisin ang mga lumang kernel, halimbawa, mula sa synaptic

Mga susunod na hakbang

Ang kernel ay binuo at naka-install, ngunit ngayon ay kailangan mong lumikha ng isang RAM disk (kung wala ang kernel ay hindi mag-boot) at kailangan mong i-update ang GRUB bootloader. Upang gawin ito, gawin ang sumusunod:

# depmod 2.6.23.1 # apt-get install yard

I-install ang RAM disk:

# mkinitrd.yaird -o /boot/initrd.img-2.6.23.1 2.6.23.1

I-update natin ang bootloader nang madali at walang sakit:

Ang lahat, ang bootloader at ang bagong kernel ay handa na, nananatili lamang ito upang mag-reboot:

Mga problema

Kung pagkatapos ng reboot ang iyong napiling bagong kernel ay hindi nag-boot, i-reboot at piliin ang iyong nakaraang kernel at maaari mong subukang dumaan muli sa buong proseso upang bumuo ng gumaganang kernel. Sa kasong ito, huwag kalimutang tanggalin ang mga linya ng hindi gumaganang kernel sa /boot/grub/menu.lst.

Pag-compile ng linux kernel

Bakit i-compile ang kernel sa iyong sarili?
Marahil ang pangunahing tanong na itinanong tungkol sa pag-compile ng kernel ay: "Bakit ko dapat gawin ito?".
Itinuturing ng marami na ito ay isang walang kabuluhang pag-aaksaya ng oras upang ipakita ang sarili bilang isang matalino at advanced na "Linuxoid". Sa katunayan, ang pag-compile ng kernel ay isang napakahalagang bagay. Sabihin nating bumili ka ng bagong laptop na walang gumaganang webcam. Ang iyong mga aksyon? Tumingin ka sa search engine at maghanap ng solusyon sa problema sa isyung ito. Madalas ay maaaring lumabas na ang iyong webcam ay tumatakbo sa isang mas bagong bersyon ng kernel kaysa sa mayroon ka. Kung hindi mo alam kung anong bersyon ang mayroon ka, i-type ang uname -r sa terminal, bilang resulta ay makukuha mo ang bersyon ng kernel (halimbawa, linux-2.6.31-10). Gayundin, ang kernel compilation ay malawakang ginagamit upang mapataas ang pagganap: ang katotohanan ay ang mga pamamahagi ng kernel ay pinagsama-sama "para sa lahat" bilang default, dahil dito, kabilang dito ang isang malaking bilang ng mga driver na maaaring hindi mo kailangan. Kaya kung alam mo nang mabuti ang iyong hardware, maaari mong i-disable ang mga hindi kinakailangang driver sa yugto ng pagsasaayos.

Posible rin na paganahin ang suporta para sa higit sa 4 gigabytes ng RAM nang hindi binabago ang bit depth ng system. Kaya, kung kailangan mo pa ring magkaroon ng iyong sariling kernel, simulan natin ang pag-compile!

Pagkuha ng kernel source code.
Ang unang bagay na dapat gawin ay kunin ang source code para sa nais na bersyon ng kernel. Kadalasan kailangan mong makuha ang pinakabagong stable na bersyon. Lahat ng opisyal na bersyon ng kernel ay makukuha sa kernel.org. Kung mayroon ka nang naka-install na X server (home computer), maaari kang pumunta sa site sa iyong paboritong browser at i-download ang gustong bersyon sa isang tar.gz (gzip compressed) archive. Kung nagtatrabaho ka sa console (halimbawa, hindi mo pa na-install ang X server o kino-configure ang server), maaari kang gumamit ng text browser (halimbawa, mga elink). Maaari mo ring gamitin ang karaniwang wget download manager:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.gz
Ngunit tandaan na dapat mong malaman ang eksaktong numero ng bersyon na kailangan mo.

Pag-unpack ng source code archive.
Pagkatapos mong matanggap ang archive na may source code, kailangan mong i-unpack ang archive sa isang folder. Magagawa ito mula sa mga graphical na file manager (dolphin, nautilus, atbp.) o sa pamamagitan ng mc. O gamitin ang tradisyonal na utos ng tar:
tar -zxvf path_to_archive
Ngayon ay mayroon ka nang source folder, mag-navigate dito gamit ang cd kernel_source_code_dir (upang maglista ng mga direktoryo sa isang folder, gamitin ang ls command).

Pag-configure ng kernel.
Sa sandaling lumipat ka sa direktoryo ng kernel source, kailangan mong gumawa ng "20 minuto" na pagsasaayos ng kernel. Ang layunin nito ay iwanan lamang ang mga kinakailangang driver at function. Ang lahat ng mga utos ay kailangan nang isagawa sa ngalan ng superuser.

gumawa ng config - console mode ng configurator.

gumawa ng menuconfig - console mode bilang isang listahan.

gumawa ng xconfig - graphical mode.

Pagkatapos gawin ang mga kinakailangang pagbabago, i-save ang mga setting at lumabas sa configurator.

Compilation.
Oras na para sa huling yugto ng pagpupulong - compilation. Ginagawa ito gamit ang dalawang utos:
gumawa ng && gumawa ng pag-install
Ang unang command ay mag-compile ng lahat ng mga file sa machine code, at ang pangalawa ay mag-i-install ng bagong kernel sa iyong system.
Naghihintay kami mula 20 minuto hanggang ilang oras (depende sa kapangyarihan ng computer).

Pag-configure at Pag-compile ng Linux Kernel

Naka-install ang kernel. Upang ipakita ito sa listahan ng grub(2), i-type (bilang ugat)
update-grub
Ngayon pagkatapos ng reboot pindutin ang "Escape" at makikita mo ang bagong kernel sa listahan. Kung ang kernel ay hindi naka-on, pagkatapos ay mag-boot lamang gamit ang lumang kernel at i-configure nang mas maingat.

KernelCheck - compilation ng kernel nang hindi pumapasok sa console.
Binibigyang-daan ka ng KernelCheck na buuin ang kernel sa isang ganap na graphical na mode para sa Debian at sa mga nakabatay nitong distribusyon. Sa paglunsad, ang KernelCheck ay mag-aalok ng pinakabagong mga bersyon ng kernel at mga patch, at pagkatapos ng iyong pahintulot, i-download ang source code, ilunsad ang graphical configurator. Bubuo ng program ang kernel sa mga .deb na pakete at i-install ang mga ito. Kailangan mo lang i-reboot.

Archive ng artikulo:
Mayo 2017
Marso 2017
Abril 2016
Marso 2016
Oktubre 2013
Setyembre 2013
Mayo, 2013
Marso 2013
Nobyembre 2012
Hulyo 2012
Hunyo 2012
Abril 2012
Marso 2012
Pebrero 2012
Abril 2011
Marso 2011
Pebrero 2011
Enero 2011
Disyembre 2010
Nobyembre 2010
Oktubre 2010
Setyembre 2010
Agosto 2010
Hulyo 2010
Hunyo 2010
Mayo 2010
Abril 2010
Marso 2010

Random:

Aurorae: makinang pampalamuti sa bintana para sa KDE

Ang Sblog ay muling isusulat sa .NET

Linuxnow.ru: Mga plano para sa hinaharap

Bolgenos. Pagtanggi ng Telecon

GRUB 2 Mabilis na Pagbawi

Libreng Software Foundation at copyleft.

Mga kasamahan: lahat
Linux para sa lahat

Ang aming mga banner:


Magtakda ng banner

Minsan maaaring kailanganin mong mag-assemble ng iyong sarili Linux kernel. Ang mga dahilan para dito ay maaaring ang mga sumusunod:

  • kailangan mo ng malinis na kernel, walang mga patch sa pamamahagi;
  • gusto mong ilapat ang iyong sariling mga patch (kung saan marami);
  • gusto mong tipunin ang kernel para sa iyong pagsasaayos ng hardware, itapon ang labis mula dito at / o patalasin ito para sa ilang mga gawain;
  • gusto mong magsama ng experimental driver o file system sa kernel na wala sa kernel "vanilla" core (hal. ZFS o Tagataas 4);
Walang mahirap sa pag-assemble ng kernel. Mahalaga lamang na maunawaan kung bakit ito ginagawa, at huwag ding hawakan ang mga parameter na hindi mo naiintindihan. Sa tala na ito, ilalarawan ko ang dalawang halimbawa ng pagbuo ng kernel sa Batay sa Debian mga pamamahagi. Sa unang halimbawa, ipapakita ko kung gaano kadali ang paggawa ng malinis, ang tinatawag na "vanilla" kernel (tulad ng inilabas ng Linus Torvalds), at sa pangalawa - kung paano ilapat ang iyong sariling mga patch at i-optimize ang kernel. Magsusulat ako kaagad ng dalawang babala:
  • kakailanganin mong buuin muli ang kernel sa tuwing ina-update mo ito (mag-download ng "update patch", ilapat ito at buuin ang kernel);
  • ang muling itinayong kernel ay maaaring hindi gumana kung ang ilang mga hack ay ginagamit sa iyong system upang matiyak ang operability ng isa o ibang kagamitan;
  • kung ang kernel ay hindi na-configure nang tama, lalo na sa kaso ng hindi marunong magbasa o walang pag-iisip na pag-patch, maaari kang makakuha ng isang sistema na bumabagal sa horror, o mawala ito nang buo.
LAHAT NG PAGKILOS NA GINAGAWA MO SA IYONG SARILING PANGANIB!

Madaling pagbuo ng kernel nang walang patch.

Ang source code para sa Linux kernel ay matatagpuan sa kernel.org. Meron din "i-update ang mga patch". Ang kailangan natin? Nagda-download mula sa site tarball(archive) na may pinakabagong stable na bersyon ng kernel (sa oras ng pagsulat, ito ang bersyon 4.3 ). Nagda-download kami sa anumang maginhawang paraan. Susunod, kailangan namin ng mga tool para sa pagpupulong:

sudo apt install build-essential gcc kernel-package patch
sudo apt-get build-dep linux

Matapos mai-install ang lahat ng kinakailangang tool, i-unpack ang archive kasama ang kernel code sa anumang maginhawang direktoryo. Hayaan na /home/user/KERNEL, saan "gumagamit"- pangalan ng gumagamit ng system. Susunod, magbukas ng terminal at pumunta doon:

cd /home/user/KERNEL

Ito ay nananatiling bumuo ng kernel:

fakeroot make-kpkg -j 3 --initrd --append-to-version=-custom kernel_image kernel_headers #-j 3

Number 3 pagkatapos j- ito ang bilang ng mga core ng iyong processor + 1. Ibig sabihin, para sa isang dual-core ito ay 3, para sa isang 4-core ito ay 5, at iba pa.
-pasadya- dito maaari mong tukuyin ang isang maginhawang pangalan para sa kernel upang gawing mas madaling makilala ito mula sa pamamahagi.
kernel_image at kernel_headers ay ang kernel mismo at ang mga header file nito, ayon sa pagkakabanggit. mga header kinakailangan para sa pagbuo ng mga driver at kernel module, pati na rin para sa ilang iba pang layunin. Pagkatapos isagawa ang utos na ito, magsisimulang lumitaw ang ilang mga katanungan sa pagsasaayos ng kernel. Dahil iniiwan namin ang lahat sa default, pindutin lang ang Enter hanggang magsimula ang build. Depende sa kapangyarihan ng iyong computer, ang pagpupulong ay maaaring tumagal mula 15-20 minuto hanggang ilang oras. Pagkatapos ng pagpupulong, sa direktoryo /home/user magkakaroon ng dalawa deb package: core at mga header. I-install ang mga ito gamit ang command:

sudo dpkg -i linux-image-4.3*deb linux-headers-4.3*deb
sudo update-grub

At i-reboot. Sa GRUB menu, posible na ngayong pumili ng ibang kernel para i-boot ang system.

Pagbuo ng kernel gamit ang mga patch at karagdagang configuration.

Sa pagkakataong ito, bubuo kami ng isang naka-optimize na core para sa pagtatrabaho sa tunog at video, pati na rin para sa mas mahusay na pagtugon sa system. Upang gawin ito, maglalapat kami ng dalawang patch: ang tinatawag na real-time na patch ( PREEMPT RT) at isang compiler patch GCC upang magdagdag ng mga karagdagang opsyon para sa mga pag-optimize ng CPU. Una, ano ang patch? Ang patch ay isang text file na nilikha ng isang programa diff, na naglalaman ng mga pagbabago sa code sa ilang partikular na bahagi, na, kapag inilalapat ang patch, ay ipinasok sa mga tamang lugar. kasi RT patch lumalabas na may malaking pagkaantala, ang pinakabagong bersyon nito ay para sa kernel 4.1. Gayunpaman, hindi ito napakahalaga. Sa parehong paraan, dina-download namin ang kernel 4.1 mula sa kernel.org at i-unpack ito sa direktoryo /home/user/KERNEL-CUSTOM. Ngayon mag-download ng mga patch. PREEMPT_RT at GCC Patch . Mula sa mga na-download na archive, kailangan namin ng mga file na may extension na .patch, na dapat ilagay sa direktoryo ng kernel source. Ibig sabihin, sa /home/user/KERNEL-CUSTOM. Bago mag-apply ng mga patch, kailangan mong tiyakin na walang mga error. Buksan ang terminal:

cd /home/user/KERNEL-CUSTOM
patch -p1 -i patch-4.1.13-rt15.patch --dry-run


Pagpipilian --dry-run nagbibigay-daan sa iyo na gayahin ang aplikasyon ng patch, nang hindi gumagawa ng mga pagbabago sa mga file. Kung walang nakitang mga error (tingnan ang screenshot) - ilapat ang patch nang walang opsyon --dry-run. Gawin ang parehong sa pangalawang patch. Huwag mag-apply ng higit sa isang patch sa parehong oras! Ngayon kailangan naming i-configure ang aming kernel. Mayroon kaming mga sumusunod na pagpipilian upang pumili mula sa:

makeconfig- Ang mga tanong tungkol sa pagsasaayos ng isa o isa pang kernel subsystem ay isa-isang ipapakita sa terminal. Napakahaba at nakakapagod na proseso. Kalimutan na natin to :)
gumawa ng oldconfig- gagamitin ang configuration ng kasalukuyang tumatakbong kernel. Dahil tayo ay nagtatayo ng ating sarili mula sa simula, ang pamamaraang ito ay wala ring silbi.
gumawa ng defconfig- katulad ng nauna, ang mga value lang ang magiging default. Ang paraan na ito ay itinakda ng mga developer ng kernel. Isang analogue ng unang paraan ng pagpupulong.
gumawa ng menuconfig- pseudo-graphical na interface batay sa library Ncurses. Ang isang interface na may isang maginhawang hierarchical menu ay ipapakita sa screen. Mga kontrol gamit ang mga direction key, space bar at TAB key. Inirerekomenda kung kino-compile mo ang kernel sa isang system na walang graphical na shell.
gumawa ng gconfig GTK, inirerekomenda sa GNOME, Mate, Xfce, Cinnamon, Unity, at iba pang environment na gumagamit ng GTK.
gumawa ng xconfig- Batay sa GUI Qt. Inirerekomenda sa KDE. Dahil gumagamit ang aking system ng KDE, gagamitin ko ang pamamaraang ito. Bilang karagdagan, mayroong ilang iba pang mga pamamaraan, ngunit ang kanilang aplikasyon ay hindi naiiba. Kaya, pagkatapos ilapat ang mga patch, tumakbo gumawa ng xconfig at ito ang nasa harapan natin:


I-off muna dynticks. Para dito tayo pupunta Subsystem ng timer at pumili Pana-panahong ticks ng timer


Ngayon ang pinaka masarap. Pumunta tayo sa Uri at tampok ng mga processor, naghahanap ng item Pamilya ng processor at tukuyin ang iyong serye ng processor. Halimbawa, kung mayroon ka Intel Core i5-4xxx, tukuyin Hasswell(ika-4 na henerasyon ng processor). Kung hindi ka sigurado nang eksakto, maaari mong piliin ang item Na-autodetected ng GCC ang mga katutubong pag-optimize. Sa kasong ito, kapag nagtatayo, tutukuyin ng compiler kung ano ang sinusuportahan ng iyong processor, at isasama ang lahat ng mga tampok nito.


Pumunta sa ibaba at i-on ang opsyon Full preemptible kernel (RT). Mahirap real time mode.


Mag-scroll sa ibaba at sa talata Dalas ng timer itakda ang dalas ng pagkagambala ng system sa 1000 Hz


Ganap na patayin ang anumang power saving. Ito ay mahalaga! Sa kaliwa ay naghahanap kami ng isang item Power management at mga opsyon sa ACPI at alisan ng check ang ACPI. I-off din ang CPU power saving.

Iyon lang. Kung nais mo (at maingat na pag-aralan ang dokumentasyon), maaari kang gumawa ng mga karagdagang pagbabago sa pagsasaayos (huwag paganahin ang mga hindi kinakailangang driver, paganahin ang mga karagdagang subsystem, at iba pa). Ngayon i-save ang config sa pamamagitan ng File-Save, isara ang configurator at buuin ang kernel:

fakeroot make-kpkg -j 3 --initrd --append-to-version=-rt-custom kernel_image kernel_headers #-j 3
sudo update-grub

Sa aking computer na may Intel Core i3-550 (3.2 GHz) na processor, medyo kapansin-pansin ang performance gain. Ngunit ang pinakamahalaga, kapag nagtatrabaho LMMS at Kdenlive, panaka-nakang pag-utal, pag-desynchronize ng mga audio at video track, pati na rin ang mga pag-freeze sa ilalim ng mabigat na pagkarga sa hard drive ay nawala. Konklusyon - ito ay gumagana! Sa wakas, ilalarawan ko ang dalawang binagong kernel na napakasikat sa mga lupon ng Linux:

PF-kernel- ang pinakasikat na hanay ng mga patch mula sa Ukrainian Alexander Natalenko (aka post-factum) . Ito ay isang hanay ng mga patch na hindi kasama sa pangunahing kernel, ngunit nagbibigay ng mas mataas na pagtugon ng system, nagbibigay ng alternatibong hibernation subsystem na mas mabilis kaysa sa pangunahing isa, at binabawasan din ang paggamit ng memorya gamit ang parehong pamamaraan ng pagsasama ng pahina. Kasama sa set ang:

  • BFS process scheduler ni Con Kolivas na may mga karagdagang pag-aayos ni Alfred Chen;
  • BFQ I/O Scheduler nina Paolo Valente, Arianna Avanzini at Mauro Marinoni;
  • ang TuxOnIce hibernation subsystem ni Nigel Cunningham;
  • pagpapatupad ng parehong page merging technique sa UKSM ni Nai Xia;
  • isang patch mula sa Graysky na nagpapalawak ng listahan ng mga processor para sa kernel optimization ng compiler (ang inilapat namin sa itaas)
Binagong kernel repository. Opisyal na site.

zen-kernel- ang pangalawang pinakasikat, ngunit ang unang set sa mga tuntunin ng bilang ng mga patch. Gumagamit ang Zen Kernel ng kumbinasyon ng maraming proyekto, nag-a-update ng code sa pamamagitan ng git repository, at may ilang bagay na partikular sa Zen na naglalayong matugunan ang karamihan sa mga pangangailangan ng user sa isang core. Ilang patch feature: drm-next, wireless-testing, CPU scheduler selection (CFS/BFS), BFQ I/O scheduler, aufs, unionfs, reiser4, tuxonice, PHC at marami pang ibang bagay na mahusay para sa desktop optimization o laptop. Ang lahat ng ito ay magagamit bilang isang solong patch sa vanilla core. Opisyal na site. Imbakan ng GIT. Mga Package para sa Debian/Ubuntu .

Para sa ngayon, marahil, lahat. Higit pang impormasyon ay matatagpuan sa mga link sa artikulo. Lahat ng inilarawan sa artikulo ay sinubukan ko sa maraming mga pagsasaayos.

Kapag sinabi sa akin ng mga tao ang tungkol sa matinding preno ng Linux kumpara sa Windows na naka-install sa parehong makina, nagtatanong ako ng isang tanong: "Mayroon ka bang self-assembled na kernel o namumula sa imposibilidad na kasama ng pamamahagi bilang default?" Kadalasan ang sagot ay: "Siyempre, ano ang nasa pamamahagi!"

Bilang karagdagan, sa parehong oras, napapansin na may malaking sorpresa na upang mapabuti ang pagpapatakbo ng system, hindi masasaktan na muling itayo ang kernel para sa iyong partikular na computer upang hindi paganahin ang isang malaking halaga ng kung ano ang ganap na hindi kinakailangan. para sa iyong hardware, ngunit pinapabagal lamang ang trabaho nito ... Kaagad mayroong isang makatwirang tanong ay, bakit ang mga nag-develop ng distribution kit ay nagsama ng isang mabagal na core sa loob nito na ang isang ordinaryong gumagamit na nag-install ng distribution kit na ito mismo ay dapat na muling i-compile ito kanyang sarili? .. At ang tanong ay tila lohikal, ngunit hindi lubos ...

Karaniwang isinasama ng mga developer ng pamamahagi dito ang isang kernel na madaling makilala ang maximum na posibleng hardware, parehong sa computer na binili ng iyong lolo upang i-cut ang kanyang sarili sa "Tawag ng tungkulin" sa kanyang libreng oras mula sa panonood ng mga balita sa TV, at ang pinakabagong system, binili para masulit ang iyong computer. Naturally, sa kasong ito, ang kernel ay lumalabas na lubos na namamaga, at lubhang bumagal sa panahon ng operasyon, dahil sa bawat oras na ang system ay kailangang "pag-ikot" sa isang malaking tumpok ng mga entry at mga driver sa loob ng kernel, na hindi maaaring mapasaya sa iyo. o ang iyong computer ... At ang pag-compile ng iyong sariling kernel ay nagpapahintulot sa iyo na i-off ang lahat ng hindi kailangan, na iniiwan lamang ang kinakailangang pag-andar ... Ang katotohanan ay kapag ang Linux operating system ay tumatakbo, ang kernel ay ang tanging lugar ng memorya na hindi pinapalitan , kaya medyo lohikal na gawin itong maliit hangga't maaari. Umaasa ako na ipinaliwanag ko sa isang sikat na siyentipikong paraan ang ganap na pangangailangan na muling itayo ang kernel? ..

Karaniwan, sa unang pagkakataon na napagtanto ang kahalagahan ng pag-compile ng kernel, ang mga baguhan na grower ng penguin ay sumuko, na naniniwala na nangangailangan ito ng maraming kaalaman at oras, at sa pangkalahatan ito ay isang trabaho para sa mga administrador na may pulang mata na natutulog lamang para sa isang mag-asawa. ng mga oras na may isang laptop sa ilalim ng kanilang braso, at tiyak na hindi para sa isang tao, hindi sapat na naiintindihan pa rin ang Linux ... Gayunpaman, nagmamadali akong tiyakin sa iyo na ang lahat ay napaka-simple at hindi ka dapat matakot sa hindi ang pinaka-komplikadong pamamaraan. Kailangan mo lang malaman ang kumpletong configuration ng iyong computer at maglaan ng isang oras para maingat na i-configure ang kernel. Isasama ng installer ang kernel, at kailangan mo lamang ibigay ang makina sa buong pagtatapon nito sa loob ng kalahating oras. 🙂

Kaya, tulad ng ipinangako ko kanina, sasabihin ko sa iyo ang tungkol sa proseso ng pag-set up at pag-compile ng sarili kong kernel ... Tara na!

Ang unang bagay na kailangan namin ay ang aktwal na source code para sa bagong kernel na malapit nang magpatakbo ng iyong Linux. Maaari mo itong i-download nang libre sa http://www.kernel.org. Kailangan mong i-download ang pinakabagong stable kernel (ito ay karaniwang ang una sa listahan, kung saan ito ay nagsasabing "Ang pinakabagong stable na bersyon ng Linux kernel ay ..."). Ipinapayo ko sa iyo na kunin ang archive ng tar.bz2, ngunit dahil lamang sa mas maliit ito sa laki. Kung naipon mo na ang kernel, maaari mo lamang i-download ang mga patch, iyon ay, ang mga patch, upang hindi ma-download ang buong kernel, na medyo malaki sa dami ... Sa katunayan, inirerekumenda ko ang paggamit ng buong kernel, dahil nabasa ko na ang iba't ibang mga problema ay maaaring mangyari kapag kino-compile ang kernel na may mga patch , kadalasang direktang nauugnay sa simpleng kurbada ng mga kamay, gayunpaman, nang walang naaangkop na kaalaman mas mahusay na huwag makipagsapalaran ...

Kaya, na-download na ang kernel ... Itinakda namin ang utos:

sudo chmod 777 /usr/src

Pagkatapos nito, i-drop ito (ang na-download na archive) sa /usr/src folder. I-unpack ang archive gamit ang command:

tar -jxvf xxxxx.tar.bz2

Sa command na ito, ang xxxxx.tar.bz2 ay ang pangalan ng kernel archive file... Kapag kumpleto na ang pag-unpack, ang iyong mga source ay nasa /usr/src/xxxxx na direktoryo.

Bago mo simulan ang pag-tune ng kernel, alamin nang eksakto ang mga detalye ng iyong computer:
1) uri ng processor,
2) motherboard chipset,
3) uri ng video card,
4) uri ng network board,
5) uri ng sound card,
6) uri ng mga hard drive,
7) Mga USB device at higit pa…

Kapag ang lahat ay na-install at pinag-aralan, maaari kang magpatuloy sa aktwal na pagsasaayos ng kernel.

Pumunta kami sa direktoryo ng /boot, at nakakita kami ng isang file doon na may katulad nitong pangalan na config-2.6.24-19-generic. Siya ang kailangan natin. Kopyahin ito sa source directory /usr/src/xxxxx at palitan ang pangalan nito sa .config.

Binuksan din muna namin ang Makefile file, at sa linyang "EXTRAVERSION=" idinagdag namin ang aming pangalan para sa kernel, halimbawa, EXTRAVERSION=-mykernel. Ang linyang ito ay hindi nagdadala ng anumang iba pang function, maliban sa kaginhawahan sa pagtukoy ng sarili nitong kernel.

Inilunsad ng command na ito ang interface ng configuration console. Kung mas gusto mo ang graphical configurator, pagkatapos ay upang ilunsad ito kailangan mong gamitin ang command:

May isa pang opsyon para sa mga setting ng console:

Ang opsyon na ito ay lubhang kapaki-pakinabang lamang kapag mayroon nang nabuong configuration file.config (maaari mong gamitin ang settings file mula sa lumang kernel). Sa opsyong ito, itatanong lamang ang tungkol sa mga feature na lumitaw mula noong bersyon ng kernel kung saan ginawa ang configuration file.

Kung gusto mo ang kernel na gumana nang matatag at sa lalong madaling panahon, lapitan ang isyu ng pagsasaayos nang responsable. Basahing mabuti ang bawat aytem. Kung hindi mo maintindihan ang isang bagay, pagkatapos ay maghanap ng mga sagot sa Internet. Halimbawa, makakahanap ka ng mga paglalarawan ng maraming setting at tip sa kung paano pinakamahusay na gamitin ang mga ito. Sa pamamagitan ng paraan, sa parehong seksyon na "3.4 Kernel Tuning Example" mayroong ilang mga tip sa pag-optimize ng kernel.

Pagkatapos ng configuration, piliin ang item na "I-save ang configuration sa isang bagong file", kung saan tinukoy namin ang pangalan ng isang file maliban sa .config, halimbawa.config_mykernel. Pagkatapos ay palitan namin ang pangalan ng .config sa .config_old. At makakakuha ka ng dalawang file - .config_old at .config_mykernel. Sa pamamagitan ng paraan, posibleng makita ang mga pagkakaiba sa pagitan ng pamantayan at ng iyong configuration tulad nito:

diff .config .config_mykernel

Ngayon, kopyahin ang iyong configuration.config_mykernel bilang .config. Yung. magkakaroon ka ng tatlong configuration file. Kapag nag-compile, gagamitin ang .config file. Ang .config_ubuntu at .config_mykernel file ay makakatulong sa amin sa hinaharap para sa isang bagong compilation. Ito ay kung sakaling ang bagong kernel ay lumabas na hindi maoperahan.

Dapat gawin ang kernel compilation sa ilalim ng superuser. Bakit maging ugat at simulan ang proseso ng pagbuo ng kernel:

sudo -s -H
make-kpkg --initrd --revision=mykernel.1 kernel_image kernel_headers

sa linyang ito, mykernel.1 ang pangalan ng kernel. Maaari kang magsulat ng kahit anong gusto mo.

Ang operasyon ng compilation ay tumatagal ng medyo mahabang panahon, depende sa kapangyarihan ng computer, kadalasan ay tumagal ako ng halos kalahating oras ...

Sa pagtatapos ng proseso, dalawang deb file ang gagawin gamit ang isang kernel na partikular na na-configure para sa iyong mga pangangailangan. Binabati kita, handa na ang core.

Ngayon ay kailangan mong i-install ang naka-assemble na kernel sa system:

sudo dpkg -i linux-image-xxxxx.deb
sudo dpkg -i linux-headers-xxxxx.deb

Palitan ng eksaktong mga pangalan ng mga deb file na iyong ginawa. Susunod, nag-reboot kami at nakikita ang aming kernel sa menu. Kung na-load mo ang lahat gaya ng inaasahan, sa palagay ko ay madarama mo kaagad ang pagpapalakas ng pagganap. Gayunpaman, kung mayroon kang, halimbawa, isang card mula sa nVidia na naka-install, malamang na magtatapos ito doon... Halimbawa, pagkatapos ilunsad ang aking bersyon ng kernel, nagkaroon ako ng itim na screen at walang emosyon...

Naayos ito sa pamamagitan ng pag-install ng mga pagmamay-ari na driver mula sa nVidia. Mayroong dalawang mga pagpipilian para sa pag-install ng mga ito: sa ilalim ng isang bagong kernel (sa kasong ito, ang graphic server ay gagana lamang sa ilalim ng iyong kernel (inirerekomenda kung hindi mo planong magtrabaho sa anumang kernel maliban sa iyong sarili) at sa ilalim ng ilan sa iyong mga umiiral na kernel (sa kasong ito, ang system ay magbo-boot pareho sa bagong kernel na iyong nilikha, at sa nauna) Ngunit iyon ay isang ganap na naiibang kuwento ...



error: Ang nilalaman ay protektado!!