Защо ядрото на Linux се нарича "образ"? Linux изходни кодове.

Понякога може да се наложи да изградите свой собствен Linux ядро . Причините за това могат да бъдат следните:

  • имате нужда от чисто ядро, без пачове за разпространение;
  • искате да приложите свои собствени пачове (които има много);
  • искате да сглобите ядро, което да отговаря на вашата хардуерна конфигурация, да изхвърлите ненужните неща от него и/или да го пригодите за конкретни задачи;
  • искате да включите експериментален драйвер или файлова система в ядрото, което не е включено в "ванилия"ядрото (напр ZFSили Рейзър 4);
Няма нищо сложно в сглобяването на ядрото. Важно е само да разберете защо се прави това, а също и да не докосвате тези параметри, които не разбирате. В тази бележка ще опиша два примера за изграждане на ядро Базиран на Debianразпределения. В първия пример ще покажа колко лесно е да се сглоби чисто, така нареченото „ванилово“ ядро ​​(тъй като е издадено от Линус Торвалдс), а във втория - как да приложите свои собствени пачове и да оптимизирате ядрото. Веднага ще напиша две предупреждения:
  • ще трябва да възстановявате ядрото всеки път, когато се актуализира (изтеглете „корекцията за актуализиране“, приложете я и сглобете ядрото);
  • възстановеното ядро ​​може да не работи, ако системата ви използва някои хакове, за да осигури функционалността на това или онова оборудване;
  • Ако ядрото е конфигурирано неправилно, особено в случай на неграмотно или необмислено прилагане на пачове, можете или да получите система, която е ужасно бавна, или да я загубите напълно.
ИЗВЪРШВАТЕ ВСИЧКИ ДЕЙСТВИЯ НА СОБСТВЕН РИСК!

Просто сглобяване на ядрото без пачове.

Изходни кодове Linux ядрата са на kernel.org. Има също "актуализиране на корекции". какво ни трябва Изтеглете от сайта tarball(архив) с най-новата стабилна версия на ядрото (към момента на писане това е версията 4.3 ). Изтеглете с всеки по удобен начин. След това се нуждаем от инструменти за сглобяване:

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

След като всички необходими инструменти са инсталирани, разопаковайте архива с кода на ядрото във всяка удобна директория. Нека бъде /home/user/KERNEL, Къде "потребител"- системно потребителско име. След това отворете терминал и отидете там:

cd /home/user/KERNEL

Всичко, което остава, е да сглобим ядрото:

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

Номер 3 след й- това е броят на ядрата на вашия процесор + 1. Тоест за двуядрен процесор е 3, за 4-ядрен процесор е 5 и т.н.
- по поръчка- тук можете да посочите удобно име за ядрото, за да го разграничите по-лесно от това за разпространение.
kernel_imageИ kernel_headers- това е самото ядро ​​и съответно неговите заглавни файлове. Заглавкинеобходими за сглобяване на драйвери и модули на ядрото, както и за някои други цели. След изпълнение на тази команда ще започнат да се появяват няколко въпроса за конфигурация на ядрото. Тъй като оставяме всичко по подразбиране, просто натискайте Enter, докато изграждането започне. В зависимост от мощността на вашия компютър сглобяването може да отнеме от 15-20 минути до няколко часа. След сглобяване, в указателя /начало/потребителще се появят две deb пакет: ядро ​​и заглавки. Инсталирайте ги с командата:

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

И рестартирайте. IN GRUB менюСега можете да изберете различно ядро ​​за зареждане на системата.

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

Този път ще сглобим оптимизирано ядро ​​за работа със звук и видео, както и за по-голяма отзивчивост на системата. За да направим това, ще приложим две корекции: така наречената корекция в реално време ( PREEMPT RT) и корекция за компилатора GCCза добавяне на допълнителни опции за оптимизация на процесора. Първо, какво е кръпка? Кръпката е текстов файл, който се създава от програмата диф, съдържащ промени в кода в определени части, които при прилагане на корекция се въвеждат правилните места. защото RT пластиризлиза с голямо закъснение, последната му версия е за ядрото 4.1. Това обаче не е толкова важно. Използвайки същата схема, изтеглете ядро ​​4.1 от kernel.org и го разархивирайте в директория /home/user/KERNEL-CUSTOM. Сега изтеглете корекциите. PREEMPT_RT и GCC корекция. От изтеглените архиви се нуждаем от файлове с разширение .patch, които трябва да бъдат поставени в директорията с изходния код на ядрото. Тоест в /home/user/KERNEL-CUSTOM. Преди да приложите кръпки, трябва да се уверите, че няма грешки. Отворете терминала:

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


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

направи конфигурация- въпроси относно конфигурацията на една или друга подсистема на ядрото ще се показват в терминала един по един. Изключително дълъг и досаден процес. Да забравим за това :)
направи oldconfig- конфигурацията на изпълняваната в моментаядки. Тъй като ние сглобяваме нашите от нулата, този метод също е безполезен.
направи defconfig- подобно на предишния, само стойностите ще бъдат по подразбиране. Начинът, по който разработчиците на ядрото го задават. Подобно на първия метод на сглобяване.
направи menuconfig- псевдо GUIбазирана на библиотека Ncurses. На екрана ще се покаже интерфейс с удобно йерархично меню. Управлява с помощта на клавишите за насочване, интервала и клавиша TAB. Препоръчва се, ако изграждате ядрото на система, която няма графична обвивка.
направи gconfig GTK, препоръчва се в GNOME, Mate, Xfce, Cinnamon, Unity и други, които използват GTK.
направи xconfig- Базиран на GUI Qt. Препоръчва се в KDE. Тъй като моята система използва KDE, ще използвам този метод. В допълнение към това има още няколко метода, но тяхното приложение не е по-различно. И така, след прилагане на пачовете, стартираме направи xconfigи ето какво се появява пред нас:


Преди всичко изключете dynticks. За да направим това, отиваме на Подсистема за таймерии изберете Периодични отметки на таймера


Сега идва най-добрата част. Да отидем на Тип процесори и характеристики, търси артикул Семейство процесории посочете вашата серия процесор. Например, ако имате Intel Core i5-4xxx, посочете Хасуел(4-то поколение процесор). Ако не сте сигурни точно, можете да изберете артикула Нативни оптимизации, автоматично открити от GCC. В този случай, по време на асемблирането, компилаторът сам ще определи какво поддържа вашия процесор и ще включи всичките му функции.


Отидете по-долу и активирайте параметъра Пълно изместваемо ядро ​​(RT). Твърд режим в реално време.


Превъртете по-долу и в параграфа Честота на таймеразадайте честотата системни прекъсванияна 1000 Hz


Ние напълно изключваме всякакво пестене на енергия. Това е важно! Отляво търсим артикулОпции за управление на захранването и ACPI

и премахнете отметката от ACPI. Също така изключете пестенето на енергия на процесора Това е. Ако желаете (и внимателно проучете документацията), можете да направите допълнителни промени в конфигурацията (деактивирайте ненужните драйвери, използвайте допълнителни подсистеми и т.н.). Сега запазваме конфигурацията чрезФайл - Запазване

, затворете конфигуратора и сглобете ядрото:
sudo update-grub

fakeroot make-kpkg -j 3 --initrd --append-to-version=-rt-custom kernel_image kernel_headers #-j 3 На моя компютър с Core i3-550 (3,2 GHz), увеличението на производителността беше доста забележимо. Но най-важното е, когато работите в LMMSИ Kdenlive, периодично заекване, десинхронизация на аудио и видео записи, както и замръзване при голямо натоварване на твърдия диск са изчезнали. Заключение - работи! Накрая ще опиша две модифицирани ядра, които са много популярни в кръговете на Linux:

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

  • Планировчик на BFS процеси от Con Kolivas с допълнителни корекции от Alfred Chen;
  • BFQ I/O Scheduler от Паоло Валенте, Ариана Аванзини и Мауро Маринони;
  • подсистема за хибернация TuxOnIce от Nigel Cunningham;
  • внедряване на техниката за сливане на идентични страници в паметта на UKSM от Nai Xia;
  • кръпка от Graysky, разширяваща списъка с процесори за оптимизация на ядрото от компилатора (този, който приложихме по-горе)
Модифицирано хранилище на ядрото. Официален сайт.

Дзен-ядро- вторият най-популярен комплект, но първи по отношение на броя на пачовете. Zen Kernel използва комбинация от няколко проекта, актуализира кода чрез git хранилище и също така има няколко специфични за Zen неща, които имат за цел да отговорят на повечето потребителски нужди в едно ядро. Някои характеристики на корекцията: drm-next, безжично тестване, избор на CPU планировчици (CFS/BFS), BFQ I/O Scheduler, aufs, unionfs, reiser4, tuxonice, PHC и много други неща, които са чудесни за оптимизиране на настолни системи или лаптопи. Всичко това се предлага под формата на един пластир към ваниловото ядро. Официален сайт. GIT хранилище. Пакети за Debian/Ubuntu.

Това вероятно е всичко за днес. Повече информация можете да намерите в линковете към статията. Всичко описано в статията е тествано от мен на много конфигурации.

История и архитектурна организация

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

Кратка история на Linux

Въпреки че Linux изглежда най-популярната операционна система с отворен код, нейната история всъщност е относително кратка в сравнение с други операционни системи. В зората на компютърната ера програмистите разработиха своите програми за чист хардуер, използвайки езици, които хардуерът можеше да разбере. Без операционна система само едно приложение (и един потребител) може да използва цялата голяма, скъпа изчислителна машина във всеки един момент. Първите операционни системи са разработени през 50-те години на миналия век, за да улеснят живота на разработчиците. Примерите включват операционната система на General Motors (GMOS), разработена за IBM 701, и FORTRAN Monitor System (FMS), създадена от North American Aviation за IBM 709.

През 60-те години на миналия век Масачузетският технологичен институт (MIT) и редица компании разработиха експериментална операционна система Multics (Multiplexed Information and Computing Service) за машината GE-645. Един от разработчиците на тази операционна система, AT&T, се отдалечи от Multics и разработи своя собствена през 1970 г. собствена системаУникс. Езикът C, доставен с тази операционна система, е проектиран и написан, за да направи разработката на операционната система преносима.

Двадесет години по-късно Андрю Таненбаум създава микроядро UNIX версия®, наречен MINIX (минимален UNIX), който може да работи на малки персонални компютри. Тази операционна система с отворен код вдъхнови Линус Торвалдс да разработи първата Linux версиив началото на 1990 г. (виж Фигура 1).

ориз. 1. Кратка историяосновни версии на ядрото на Linux

Linux бързо се разрасна от инициатива на един ентусиаст до световен проект, включващ хиляди разработчици. Един от основни решенияСъдбата на Linux беше приемането на GNU General Public License (GPL). GPL защити ядрото на Linux от комерсиална експлоатация и в същото време отвори пътя за използване от общността на потребителите на проекта GNU, основан от Ричард Столман, чийто обем код далеч надхвърля дори ядрото на Linux. Това направи възможно използването на такива полезни приложения, като компилаторния комплекс GNU Compiler Collection (GCC) и различни командни обвивки.

Въведение в ядрото на Linux

Нека да преминем към общ преглед на архитектурата на операционната система GNU/Linux. Операционната система може да бъде разделена на две нива, както е показано на фиг. 2.

ориз. 2. Фундаментална архитектура на операционната система GNU/Linux

На най-горното ниво е потребителското пространство (пространство за приложения). Това е мястото, където се изпълняват потребителските приложения. Под потребителското пространство е пространството на ядрото. Това е мястото, където работи ядрото на Linux.

Има и GNU C библиотека (glibc). Той осигурява интерфейс за системни повиквания, който комуникира с ядрото и осигурява механизъм за преминаване от приложение в потребителското пространство към ядрото. Това е важно, защото ядрото и потребителското приложение се намират в различни защитени адресни пространства. Освен това, докато всеки процес в потребителското пространство има собствено виртуално адресно пространство, ядрото заема едно споделено адресно пространство. повече подробна информациямогат да бъдат намерени в литературата, препратките към които са дадени в раздела "".

Ядрото на Linux може от своя страна да бъде разделено на три големи слоя. Най-отгоре е интерфейсът за системни повиквания, който реализира основни функции, като четене и писане. Под интерфейса на системното извикване е кодът на ядрото или по-точно независимият от архитектурата код на ядрото. Този код е общ за всички процесорни архитектури, поддържани от Linux. Още по-ниско е зависимият от архитектурата код, образуващ т.нар. BSP (Board Support Package - пакет за поддръжка на хардуерна платформа). Този код е специфичен за процесор и платформа за определена архитектура.

Свойства на ядрото на Linux

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

Внедрено в ядрото на Linux цяла поредицаважни архитектурни елементи. Както на най-общо, така и на по-подробно ниво, ядрото може да бъде разделено на много различни подсистеми. От друга страна, Linux може да се разглежда като монолитно цяло, тъй като всичко основни услугисъбрани в ядрото на системата. Този подход се различава от микроядрената архитектура, където ядрото предоставя само най-доброто общи услуги, като обмен на информация. управление на вход/изход, памет и процеси, както и по-специфични услуги са реализирани в модули, свързани към ниво микроядро. Всяка от тези гледни точки има своите предимства, но няма да навлизам в тази дискусия тук.

С течение на времето ядрото на Linux стана по-ефективно по отношение на използването на паметта и процесора и стана изключително стабилно. Но най-интересният аспект на Linux, предвид размера и сложността на системата, е нейната преносимост. Linux може да бъде компилиран за огромен брой различни процесории платформи с различни архитектурни ограничения и нужди. Например, Linux може да работи на процесор с модул за управление на паметта (MMU) или без MMU. Поддръжката за процесори без MMU е внедрена във версията на ядрото на uClinux. За повече информация вижте раздела „ “.

Основни подсистеми на ядрото на Linux

Нека да разгледаме някои от основните компоненти на ядрото на Linux, следвайки структурата, показана на фиг. 3.

ориз. 3. Един възможен изглед на архитектурата на ядрото на Linux

Интерфейс за системни повиквания

SCI е тънък слой, който предоставя средство за извикване на функции на ядрото от потребителското пространство. Както вече споменахме, този интерфейс може да зависи от архитектурата, дори в рамките на едно и също семейство процесори. SCI всъщност е услуга за мултиплексиране и демултиплексиране на извикване на функция. Реализацията на SCI се намира в ./linux/kernel, а специфичната за архитектурата част е в ./linux/arch. По-подробна информация за този компонент можете да намерите в раздела.

Управление на процеси

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

Друга задача на управлението на процесите е споделянето на процесора между активните нишки. Ядрото прилага иновативен алгоритъм за планиране, чието време на работа не зависи от броя на нишките, борещи се за ресурсите на процесора. Името на този планировчик - O(1) - подчертава, че отнема същото време за планиране на една нишка, както и за планиране на множество нишки. Планировчикът O(1) също поддържа симетрични мултипроцесорни (SMP) конфигурации. Изходните кодове на системата за контрол на процесите се намират в /linux/kernel, а кодовете на зависещата от архитектурата част са в /linux/arch). За повече информация относно този алгоритъм вижте раздела.

Управление на паметта

Друг важен ресурс, който управлява ядрото, е паметта. За подобряване на ефективността, като се има предвид хардуерният оперативен механизъм с виртуална памет, паметта е организирана под формата на т.нар. страници(4 KB в размер на повечето архитектури). Linux има инструменти за управление на наличната памет, както и хардуерни механизми за картографиране на физическа и виртуална памет.

Управлението на паметта обаче е много повече от просто управление на 4KB буфери. Linux предоставя абстракции над тези 4 KB буфери, като разпределителя на плочи. Този контролен механизъм се основава на 4 KB буфери, но след това поставя структури в тях, следейки кои страници са пълни, кои са частично пълни и кои са празни. Това позволява веригата да бъде динамично разширявана и свивана в зависимост от нуждите на основната система.

В зависимост от наличността голям бройпотребители на паметта са възможни ситуации, когато цялата налична памет е изчерпана. В тази връзка страниците могат да бъдат премахнати от паметта и прехвърлени на диск. Този процес на обмен на страници между RAM паметИ твърд дискнаречен размяна. Изходните кодове за управление на паметта се намират в ./linux/mm.

Виртуална файлова система

Друг интересен аспект на ядрото на Linux е виртуалната файлова система (VFS), която предоставя обща абстракция на интерфейса към файловите системи. VFS осигурява превключващ слой между SCI и файловите системи, поддържани от ядрото (вижте Фигура 4).

ориз. 4. VFS осигурява превключваща тъкан между потребители и файлови системи

На най-високото ниво на VFS има единична API абстракция за функции като отваряне, затваряне, четене и писане на файлове. На най-ниското ниво на VFS са абстракциите файлови системи, които определят как се изпълняват функциите най-високо ниво. Те са плъгини за специфични файлови системи (от които има повече от 50). Изходните кодове за файловите системи се намират в ./linux/fs.

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

Мрежов стек

Мрежовият стек по своя дизайн има многослойна архитектура, повтаряйки структурата на самите протоколи. Помните ли това Интернет протоколПротоколът (IP) е основният протокол мрежов слой, разположени по-долу транспортен протоколПротокол за контрол на предаването (TCP). Над TCP е сокетният слой, извикан чрез SCI.

Слоят на гнездата е стандартен API за мрежовата подсистема. Той осигурява потребителски интерфейскъм различни мрежови протоколи. Слоят на гнездото прилага стандартизиран начин за управление на връзки и прехвърляне на данни между крайни точки, от достъп до ясни рамки с данни и IP протоколни единици данни (PDU) до TCP протоколии протокол за потребителска дейтаграма (UDP). Изходният код за мрежовата подсистема на ядрото се намира в директорията ./linux/net.

Драйвери на устройства

По-голямата част от изходния код на ядрото на Linux се състои от драйвери на устройства, които предоставят възможност за работа със специфични хардуерни устройства. Дървото на източника на Linux има поддиректория на драйвера, която от своя страна има поддиректории за различните видове поддържани устройства, като Bluetooth, I2C, серийни портове и т.н. Изходните кодове за драйвери на устройства се намират в ./linux/drivers.

Код, специфичен за архитектурата

Въпреки че по-голямата част от Linux е независима от архитектурата, върху която работи операционната система, има някои елементи, които трябва да вземат предвид архитектурата, за да осигурят правилна работа и ефективност. Поддиректорията ./linux/arch съдържа специфичната за архитектурата част от изходния код на ядрото, разделена на няколко поддиректории, съответстващи на специфични архитектури. Всички тези директории заедно образуват БСП. В случай на обикновен настолен компютър се използва директорията i386. Поддиректорията за всяка архитектура съдържа редица поддиректории, свързани със специфични аспекти на ядрото, като зареждане, ядро, управление на паметта и т.н. Изходният код за специфичната за архитектурата част се намира в ./linux/arch.

Освен преносимост и ефективност, ядрото на Linux има редица други интересни характеристики, които не бяха разгледани в дискусията по-горе.

Linux, като широко използвана на практика операционна система с отворен код, е отлична тестова площадка за нови протоколи и техните подобрения. Linux поддържа голям брой мрежови протоколи, включително традиционния TCP/IP и неговите високоскоростни разширения (за мрежи, по-бързи от Gigabit Ethernet и 10 GbE). Linux също поддържа протоколи като Stream Control Transmission Protocol (SCTP), който имплементира много допълнителни функции, липсва в TCP (използван като алтернативен протокол на транспортния слой).

Трябва да се отбележи, че ядрото на Linux е динамично (поддържа добавяне и премахване софтуерни компонентибез спиране на системата). Тези компоненти се наричат ​​динамично заредени модули на ядрото. Те могат да бъдат въведени в системата при необходимост, например по време на зареждане (ако бъдат открити конкретно устройство, което изисква такъв модул), както и по всяко време по желание на потребителя.

Друго скорошно подобрение в Linux е възможността да се използва като операционна система за други операционни системи (наречена хипервизор). Наскоро беше направено подобрение на ядрото, наречено Виртуална машина, базирана на ядрото (KVM, виртуална машинабазиран на ядрото). В резултат на тази модификация тя беше внедрена в потребителското пространство нов интерфейс, което ви позволява да стартирате други операционни системи върху ядро ​​с активиран KVM. В този режим можете не само да стартирате други копия на Linux, но и да виртуализирате Microsoft® Windows®. Единственото ограничение е, че използвания процесор трябва да поддържа новите инструкции за виртуализация. За повече информация вижте раздела.

Допълнително проучване

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

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

Инсталиране на помощни програми

За да конфигурирате и изградите ядрото на Linux, ще трябва да инсталирате няколко пакета, които ще са необходими за изграждане и конфигуриране на ядрото: kernel-package, build-essential, libncurses-dev. Можете да направите това с командата:

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

Изтеглете изходния код на ядрото

Сега трябва да изтеглите изходния код на ядрото. Ще изтеглим ядрото за Ubuntu. Можете да изтеглите конкретна версия на ядрото, като тази, която използвате в момента, или можете да изтеглите най-новата версия. За да определите версията на ядрото на Linux, което използвате, изпълнете командата uname с опцията -r:

Uname -r

Резултатът от командата ще бъде нещо подобно:

$uname -r 2.6.27-11-generic

Името на пакета, съдържащ изходния код на ядрото, обикновено изглежда така: linux-source-Version. Например за версия на ядрото 2.6.24: linux-source-2.6.24. Най-много най-новата версияядрото в хранилищата на Ubuntu се нарича просто linux-source, без да се посочва версията в края. За да инсталирате най-новите източници на ядрото на Ubuntu Linux, изпълнете командата:

sudo apt-get инсталирате linux-source

Тази команда изтегля изходните кодове на ядрото и ги поставя в директорията /usr/src. Към момента на писане последната версия на ядрото, която беше изтеглена, е 2.6.27, която ще използваме. Ако сега отидем в директорията /usr/src и изпълним командата ls, ще видим, че сред файловете има файл linux-source-2.6.27.tar.bz2. Това са изходните кодове на Linux ядрото (Ubuntu kernel).

Разопаковане на изходния код на ядрото

Нека отидем в директорията /usr/src и разархивираме ядрото. За да направите това, изпълнете следните команди:

Cd /usr/src sudo tar xjf linux-source-2.6.27.tar.bz2 sudo ln -s linux-source-2.6.27 linux

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

Сега нека да преминем към конфигуриране на ядрото. За да не създаваме конфигурация от нулата, ще вземем за основа конфигурацията на ядрото, която се използва в момента. Можете да получите текущата конфигурация, като изпълните командата make oldconfig. Стартирайте в терминала:

Cd /usr/src/linux sudo make oldconfig

Изпълнението на make oldconfig ще създаде .config файл, съдържащ опции за конфигурация на ядрото.

Можете да получите помощ за всички опции за създаване на ядрото на Linux, като изпълните командата make help.

За да променим конфигурацията на ядрото, ще използваме конзолната програма menuconfig. За да го стартирате, стартирайте:

Sudo make menuconfig

Ще видите интерфейс, в който можете да активирате или деактивирате определени опции на ядрото:

Например, ще активирам опцията „NTFS write support“. За да направите това, като натиснете бутона надолу, намерете елемента „Файлови системи“ и натиснете Enter.

Ще се озовете в менюто с настройки на файловата система. Намерете елемента „DOS/FAT/NT файлови системи“ в този списък и натиснете Enter.

Отидете на „NTFS write support“ и натиснете Space, до елемента ще се появи звездичка, което показва, че тази опцияще бъдат включени в ядрото.

Сега изберете „Изход“ (като натиснете бутона надясно и след това Enter) и излезте от помощната програма. Преди да излезете от помощната програма, ще се появи съобщение с молба да запазите направените промени, изберете Да.

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

Време е да компилираме ядрото с промените, които направихме в предишната стъпка. Първо, нека изпълним команда, която ще изтрие файловете (ако има такива), останали от предишната компилация:

Sudo make-kpkg clean

И накрая, за да започнете да компилирате ядрото, изпълнете командата:

Sudo make-kpkg --initrd --append-to-version=-mykernel kernel_image kernel_headers

Ключът -append-to-version се използва за добавяне на низ -mykernel към името на файла с изображение на ядрото, което ще получим след компилация, така че да е по-лесно да идентифицираме нашето ядро. Вместо -mykernel можете да използвате произволен префикс.

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

Инсталиране на ядрото

След компилирането на ядрото получихте два изходни файла: linux-image-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb, linux-headers-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00 .Custom_i386.deb. Ще използваме командата dpkg -i, която автоматично ще инсталира ядрото и ще го запише във вашия GRUB boot loader (във файла  /boot/grub/menu.lst). Обърнете внимание, че ядрото ще бъде инсталирано като ядро ​​по подразбиране, така че ако не се стартира вместо вас, ще трябва да стартирате с предишното си ядро ​​(то трябва да е в списъка с менюта на GRUB, когато стартирате компютъра) и ръчно да промените менюто .lst файл. И така, за да инсталирате ядрото, изпълнете командите:

Dpkg -i linux-image-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb dpkg -i linux-headers-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb

Стартиране на система с ново ядро

Нека проверим функционалността на системата с новото ядро. Рестартирайте компютъра си. В менюто GRUB буутлоудъртрябва да видите нов запис, съответстващ на вашето ново ядро, което трябва да се зареди по подразбиране. Ако всичко върви добре, системата ще стартира с новото ядро.

В голямо семейство от операционни системи, базирани на GNU/Linux. Със сигурност сте чували, че тези кодове са отворени, свободно разпространявани и безплатни. Казват, вземете когото искате, но само условията GPL лицензинаблюдавайте, което не е никак трудно. Малцина обаче обясняват достатъчно ясно каква е същността на това явление, какъв е неговият смисъл. Затова ще се опитаме да дадем такова обяснение.

Същността накратко

Всичко започва през 1991 г., когато финландският студент Линус Торвалдс прави публично достъпни кодовете на ядрото на новата операционна система Linux. Защо на открито? Защото той подкрепи. Но вероятно вече знаете това (или лесно го разбирате). Ще обърнем внимание на точки, които изискват ясна класификация.

Linux

Linux не е операционна система, а просто ядро. Набор от софтуерни решения, необходими за стартиране на компютър и функционирането на неговите компоненти („хардуер“), основата за функционирането на други програми.

GNU

GNU - комплект прости приложения, който съществува още преди появата на горното ядро. Тези програми позволяват на човек да осъществява поне някакво взаимодействие с компютъра, а не просто да се взира в екрана. Изходният код също е отворен, разбира се.

GNU/Linux е операционна система, а не просто ядро. Вместо GNU може да има нещо друго, например Dalvik в Android.

Шофьори

Технологиите се развиват, броят на компютърния хардуер расте, оборудването се развива. И всеки продукт се нуждае от драйвер, за да работи. Така че, някои драйвери са завинтени директно до ядрото. Ако са безплатни (свободен софтуер), като GNU и Linux, тогава кодовете със сигурност са отворени.

Е, когато няма подходящи безплатни драйвери, тогава нищо не може да се направи, трябва да инсталирате патентовани. Дали кодовете им са отворени зависи само от производителите на хардуера.

Приложения

Персонализираните приложения, класифицирани като Open Source, често се произвеждат във версии за различни операционни системи. Те не са част от Linux. Вярно е, че някои са стандартни за определена дистрибуция или графична обвивка, но не са част от ядрото.

Естествено, кодовете за всички опции са отворени - за всички поддържани операционни системи. Същата ситуация важи и за различни комунални услуги.

Кой го прави

Ядрото на Linux се подобрява от група ентусиасти. Понякога участва и самият Линус Торвалдс. Кодът на ядрото, опакован в архив, може да бъде изтеглен от kernel.org за последваща независима компилация.

Драйверите, ако са безплатни, също често се създават от общности. За принтер, скенер, видео карта, Wi-Fi адаптер... Като цяло има много за какво.

Например пакетът Gutenprint, който е цял набор от драйвери за много модели принтери. Освен това качеството на печат често е сравнимо с показателите, произведени при използване на „родни“ драйвери от производителите.

Понякога самите производители на хардуер отварят кода под някакъв подходящ лиценз, като GPL или BSD. Такива събития обикновено предизвикват неописуема радост сред поддръжниците на Open Source.

Както може би се досещате, персонализираните приложения също се създават от общности или от отделни ентусиасти. Въпреки това търговските компании също обичат да се рекламират, като предоставят на населението част от своите продукти под формата на безплатен софтуер. Ярък пример: офис пакет OpenOffice.org беше публикуван от Oracle дълго време.

Освен това някои компании дори правят цели комплекти за разпространение. Red Hat, SuSE, Xandros взимат пари за готови за използване двоични сборки, но нямат право да скриват кодовете. Тоест тези кодове, както и да се обработват, трябва да останат отворени. Това е изискване на GPL лиценза.

Който го използва

Програмист гледа софтуера и си мисли: „Хубаво е, но може да се направи по-добре!“ Изтегля архив с код от уебсайта на разработчика и го подобрява. Към него се присъединява група специалисти, които желаят да участват, и се ражда нов проект.

Така се появяват „вилиците“ (от английското „fork“, което в в този случайпреведено като „клон“). Нови програми, базирани на кодовата база на съществуващите.

Например от добър аудио плейър Amarok е още по-добър - Clementine. И от пакета офис приложения на OpenOffice.org - LibreOffice, който се развива бързо и е много обещаващ.

И така, цели операционни системи се клонират на този принцип. Безплатната операционна система CentOS е компилирана от изходните кодове на платения Red Hat Enterprise Linux. Разбира се, шефовете на Red Hat вероятно хапят лактите си от разочарование, но не могат да направят нищо, тъй като не притежават изходния код.

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

Заключение

Отвореният код е основна концепция за Linux в частност и за целия свободен софтуер като цяло. Кодовете могат да се използват за ваши собствени проекти, да се тестват за безвредност чрез усилията на общността, да се изучават, да се подобряват уменията ви чрез участие в разработката, да се подобряват и помагат на хората в тяхната благородна кауза.

Няма бинарен комплект на софтуер, който да е важен за вас за конкретна дистрибуция на GNU/Linux? Драйверът не е ли включен в ядрото? Взехме архива с изходния код, разопаковахме го, прочетохме инструкциите за сглобяване, компилирахме го, инсталирахме го - и го използваме. Не зависиш от производителя, не си обвързан с конкретно операционна система- това е истинската свобода.

Предишни публикации:

Изграждане на Linux ядрото
Здравейте, скъпи читатели. Днес ще ви разкажа за такова интересно занимание Как да изградя Linux ядро. Защо може да се наложи да сглобите ядрото сами? Всъщност може да има много причини: необходимостта от използване допълнителни функцииядра, оптимизирайте ядрото за вашия компютър, актуализирайте ядрото до най-новата версия. В тази статия ще демонстрирам процеса на получаване на изходни кодове, конфигуриране, компилиране и инсталиране на ядрото на Linux в системата, като част от решаването на проблема с включването на поддръжка на cryptoloop (устройства за криптиране с обратна връзка) в ядрото.

Получаване на изходния код
Първо трябва да вземем изходния код, това може да стане по различни начинии от различни източници. Предлагам да разгледаме само две: системни хранилища, официалния уебсайт на ядрото. Хранилищата най-вероятно ще съдържат версии на ядрото, които са по-стари от тези на официалния уебсайт, но тези източници трябва да включват корекции и корекции от производителя на вашия Linux дистрибуция. Този подход е за предпочитане, ако нямате нужда от такива нова технологияили функция, която се поддържа само от по-нови ядра. Можете да видите всички версии на източниците на ядрото, които се съдържат в хранилищата на вашата система, като въведете в терминала (вярно за Ubuntu Linux, името на пакета може да се различава в други дистрибуции):

Apt-кеш търсене linux-source

Командата ще изброи наличните пакети:


Както можете да видите, имам само пакета с текущата версия и пакета с версия 3.5 (всъщност текуща версияядрата също са 3.5). За да разширите списъка с налични ядра по този начин, струва си да свържете допълнителни хранилища. Можем да получим ядрото с командата: sudo apt-get install linux-source

linux-source - името на изходния пакет, може да е различно във вашия случай.
След като командата приключи, ще се появи файл в директорията /usr/src, в моя случай - linux-source-3.5.0.tar.bz2. Нека да отидем в папката, да разопаковаме архива и за удобство да създадем символна връзка:

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

Ако имате нужда от най-новата версия на ядрото, винаги можете да го изтеглите от уебсайта kernel.org. Струва си да се отбележи, че уебсайтът е представен като стабилни версииядра и версии, предназначени за тестване и модификация (обикновено името им съдържа съкращението “RC” - Release kandidat). Ако не искате ненужни проблеми със системата, съветвам ви да изтеглите стабилната версия:

Нека запазим архива с източниците в папката /usr/src. За да разопаковате получения архив, може да се наложи да инсталирате допълнителни помощни програми:

Sudo apt-get инсталирате xz-utils

Сега, както в случая на изтегляне на ядрото от хранилищата, трябва да разопаковаме изходния архив и да създадем връзка:

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

Конфигурация и компилация.
Сега стигаме до най-интересната част. Преди да започнем, нека инсталираме няколко допълнителни пакета:

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

Ние ще създадем нова конфигурация, въз основа на ядрото, използвано в момента от системата:

Cd /usr/src/linux sudo make oldconfig

Ако конфигурирате по-нова версия на ядрото от съществуващата в системата, тогава е вероятно тя да съдържа параметри, които не са в конфигурацията на текущото ядро. В този случай програмата ще ви помоли да направите избор; можете да оставите стойностите по подразбиране, като просто натиснете клавиша Enter. Във всеки случай конфигурацията все още не е завършена. Сега можем да направим необходимите настройки чрез менюто за създаване на конфигурация:

Sudo make menuconfig

Конфигурационната програма ще стартира в терминала:

Тук опциите за конфигуриране са разделени на секции, за да улеснят навигацията в тях. Както казах по-горе, трябва да включа поддръжка на cryptoloop в ядрото. За да направите това, отидете в раздела „Драйвери на устройства“ и оттам в подраздела „Блокиране на устройства“:

Намираме параметъра „Cryptoloop Support“, до него има буквата „M“, което означава, че поддръжката на устройства за криптиране ще бъде добавена като модул на ядрото, който може да бъде активиран с командата modprobe. Трябва да включим поддръжка за тази технология директно в ядрото, така че да се поддържа винаги. Преместваме фокуса върху параметъра „Cryptoloop Support“ и натискаме интервала. Буквата „M“ трябва да бъде заменена със символа „*“, това означава, че поддръжката за тази технология ще бъде „вградена“ в ядрото. Внимавайте, интервал означава, че технологията изобщо няма да се поддържа.

Натиснете клавиша „Tab“ и щракнете върху бутона „Изход“, докато бъдете подканени да запазите промените:

Отговаряме с „Да“. Успешно завършихме конфигурацията!
Да започнем да компилираме. Първо, изтриваме файловете, останали от предишни сборки, ако стартирате сборката за първи път, не е необходимо да изпълнявате тази команда: sudo make-kpkg clean;

Да започнем компилацията:

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

J4 - флаг показва колко нишки да се използват за компилация. Ще ускори значително компилацията многоядрени процесори. Числото 4 тук означава 4 нишки. Инсталирайте толкова нишки, колкото е броят на ядрата на вашия процесор, които системата „вижда“.
-mykernel - префикс, показващ, че ядрото е компилирано ръчно, можете да го промените, всъщност не засяга нищо.

Сега процесът на компилиране е започнал. Може да отнеме от 10 минути до няколко часа в зависимост от това колко мощен е вашият компютър:

Инсталиране на ядрото в системата

След като компилацията приключи, два файла с разширение „deb“ трябва да се появят в директорията /usr/src. Те са инсталационни пакети на нашето ново ядро ​​и могат да бъдат инсталирани с помощта на помощната програма dpkg:

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

честито! Ядрото е инсталирано, сега системата ще стартира с това ядро ​​по подразбиране, но ако имате проблеми с новото ядро, винаги можете да стартирате със старото, като го изберете на екрана за зареждане - Grub. С това завършвам днешната статия и ви желая успех, скъпи читатели!