Выбор ядра linux по умолчанию

Развлекаемся с git и repo

Во время работы с исходниками я осознал необходимость познакомиться с git и даже создал свой собственный репозиторий на GitHub. Там я публикую свою работу над деревом устройства (device tree) для Alcatel OT-986. Для начала git нужно установить:

sudo apt-get install git

Теперь пришло время воспользоваться утилитой repo и выкачать исходный код CyanogenMod из GitHub к себе на компьютер. Я всё ещё работаю с веткой ICS 4.0.4 (CyanogenMod 9.1.0):

repo init -u git://github.com/CyanogenMod/android.git -b cm-9.1.0

Также существуют ветки cm-10.1, cm-10.2 (возможно и новее на момент прочтения этой статьи). Выберите на своё усмотрение. Если вы, как и я, занимаетесь портом CyanogenMod на устройство, для которого нет никаких сторонних прошивок, то сначала попробуйте собрать ветку, соответствующую версии заводского ПО (stock ROM) — так будет легче сдвинуться с мёртвой точки. Alcatel OT-986 имеет из коробки версию Android 4.0.3, поэтому я начал работать с CM 9.1 — система загрузилась практически «с полпинка», а вот версии 10.1 и 10.2 у меня ещё полноценно так и не запустились.

Наблюдаем, как repo ругается при попытке выполнения команды init:

*** Please tell me who you are.

Run

to set your account’s default identity.

Укажем свои данные, выполнив заботливо подсказанные команды. Затем repo init нужно повторить, и в этот раз всё закончится успешно. Ответьте утвердительно на предложение раскрашивать вывод repo (это же весело, гы):

Enable color display in this user account (y/N)? y

Как собрать KDE из исходников?[править]

В первую очередь убедитесь что у Вас установлены достаточно новые версии пакетов Qt , soprano, akonadi, boost , также могут потребоваться (для плазмоидов) Google Gadgets, для графического пакета потребуется exiv2, для pim (почтовый клиент, адресная книга и.т.п) — gpg, gpgme,

Большую часть исходников для предзависимостей КДЕ (KDE4) можно скачать с SVN командой

svn co svn://anonsvn.kde.org/home/kde/tags/kdesupport-for-4.3/kdesupport

Также Вам потребуется cmake

Порядок сборки — kdelibs , kdepimlibs , kdebase-runtime , kdebase-workspace , все остальные пакеты можно собирать в произвольном порядке.

собирается достаточно тривиально:

распаковываем пакет

tar -xvf kdelibs-4.3.2.tar.gz

создаем папку для сборки внутри распакованой папки

cd kdelibs-4.3.2

mkdir builddir

конфигурируем с помощью cmake , обязательным аргументом является путь к исходникам, в данном случае ..

cmake ..

команда cmake в отличие от ./configure воспринимает параметры в виде -DCMAKE_INSTALL_PREFIX=/usr (например вместо —prefix=/usr),
можно также воспользоваться ccmake или cmake-gui

дальше обычная сборка (-j2 — использовать два потока сборки, для четырехъядерных процессоров можно задавать -j4 и так далее)

make -j2

после чего можно установить собраные программы с помощью

make install или make install DESTDIR=/путь/установки для последующего создания пакета

Как запустить, протестировать, посмотреть программу до установки ее в систему ?[править]

Данное решение работает для множества программ, но не для всех.

Программу можно установить в каталог $HOME/usr.
Для этого вместо команды «make install» воспользуйтесь командой

mkdir $HOME/usr
make install DESTDIR=$HOME/usr

Далее нужно изменить файл $HOME/.bash_profile добавив в него эти строки :

export PATH=\
$PATH:\
$HOME/usr/bin:\
$HOME/usr/local/bin:\
$HOME/usr/sbin:\
$HOME/usr/local/sbin

export LD_LIBRARY_PATH=\
$LD_LIBRARY_PATH:\
$HOME/usr/lib:\
$HOME/usr/local/lib

export MANPATH=\
$MANPATH:\
$HOME/usr/man:\
$HOME/usr/share/man:\
$HOME/usr/local/man:\
$HOME/usr/local/share/man

export INFOPATH=\
$INFOPATH:\
$HOME/usr/info:\
$HOME/usr/share/info:\
$HOME/usr/local/info:\
$HOME/usr/local/share/info

export PYTHONPATH=\
$PYTHONPATH:\
$HOME/usr/lib/python2.6/site-packages:\
$HOME/usr/local/lib/python2.6/site-packages

export PKG_CONFIG_PATH=\
$PKG_CONFIG_PATH:\
$HOME/usr/lib/pkgconfig:\
$HOME/usr/local/lib/pkgconfig

export C_INCLUDE_PATH=\
$C_INCLUDE_PATH:\
$HOME/usr/include:\
$HOME/usr/local/include

export CPLUS_INCLUDE_PATH=\
$CPLUS_INCLUDE_PATH:\
$HOME/usr/include:\
$HOME/usr/local/include

export LDFLAGS="\
-L$HOME/usr/lib \
-L$HOME/usr/local/lib \
$LDFLAGS"

После этого вам нужно перелогиниться в систему.

Будет доступен вызов программ, программы смогут найти свои библиотеки, можно будет вызывать их страницы man, info.

Что такое ядро операционной системы

Ядро является главной частью любой операционной системы. Существует точка зрения, которая понятие операционной системы приравнивает к ядру. Есть точка зрения, когда в понятие операционной системы включают как ее ядро, так и системные программы, позволяющие пользователю обращаться через ядро к аппаратным ресурсам.

Так что же такое ядро ОС и каковы его функции? Как известно, компьютер – не только система аппаратного обеспечения (железа), но и набор работающего на нем программного обеспечения. Чтобы второе могло эффективно работать на первом, нужна более низкоуровневая программа, скрывающая сложности работы с железом и предоставляющая обычным программам и пользователям удобный для них интерфейс.

Железо говорит на языке сигналов, регистров, секторов, переводов головок. Программам все это не надо. Они говорят на языке «записать, прочитать, сложить, вычесть …». Специальной программой, обеспечивающей остальным простой и понятный интерфейс для работы на имеющемся оборудовании, является ядро операционной системы. Однако создание виртуальной машины – не единственная функция ядра.

Представим себе, что ядра нет, а каждая запущенная программа сама обращается к железу и обрабатывает сигналы от него. Вроде бы ничего страшного, кроме дублирования кода в каждой такой программе. Но на компьютере одновременно работает множество программ. Как они будут «договариваться» между собой о совместном использовании общего аппаратного обеспечения?

Конечно, они могут встать в очередь, и сначала одна программа выполнится полностью, затем другая. Однако одни программы должны работать постоянно в фоновом режиме, другие – могут долго ожидать ввода или вывода, третьи – должны получать данные из другой работающей программы. Поэтому функция оптимального распределения аппаратных ресурсов возлагается на ядро. Оно организует как бы параллельную работу множества программ, играет роль менеджера.

Ядро операционной системы – это тоже программа, написанная на том или ином языке программирования и скомпилированная в исполняемый файл. Однако, в отличии от других программ, ядро всегда загружается первым и потом постоянно «сидит» в определенной области оперативной памяти. То есть это программа, которая всегда находится в запущенном состоянии и взаимодействует, с одной стороны, с железом, а с другой – с системными и пользовательскими программами.

В коде ядра особо выделяют драйверы устройств. Драйвер – это программный код, функция которого заключается в предоставлении возможности использовать определенное железо (например, видеокарту). Причем конкретный драйвер не всегда загружается в память вместе с остальной частью ядра. Он туда грузится, лишь когда возникает потребность в ресурсах устройства. Так экономится память, но в ущерб скорости.

Выделяют операционные системы на монолитном ядре и микроядре, а также разные промежуточные варианты. Монолитное ядро проще и быстрее работает, так как в памяти всегда находится почти весь код. Микроядро меньше, сложнее, работает медленнее, однако нередко считается более передовым из-за легкости подключения новых частей кода. Микроядро, находясь в памяти, организует взаимодействие между другими частями кода операционной системы, которые являются самостоятельными программами (см. пример выше про загрузку драйверов).

Шаг 2. Получение необходимых для сборки пакетов

Данный шаг необходимо выполнить, только если ядро собирается на компьютере в первый раз

Выполните следующие команды для установки основных пакетов:

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

Далее всё зависит от того, каким способом вы хотите произвести конфигурацию ядра. Это можно сделать несколькими способами.

  • config — традиционный способ конфигурирования. Программа выводит параметры конфигурации по одному, предлагая вам установить для каждого из них свое значение. Не рекоммендуется для неопытных пользователей.
  • oldconfig — файл конфигурации создаётся автоматически, основываясь на текущей конфигурации ядра. Рекомендуется для начинающих.
  • defconfig — файл конфигурации создаётся автоматически, основываясь на значениях по-умолчанию.
  • menuconfig — псевдографический интерфейс ручной конфигурации, не требует последовательного ввода значений параметров. Рекомендуется для использования в терминале.
  • xconfig — графический (X) интерфейс ручной конфигурации, не требует последовательного ввода значений параметров.
  • gconfig — графический (GTK+) интерфейс ручной конфигурации, не требует последовательного ввода значений параметров. Рекомендуется для использования в среде GNOME.
  • localmodconfig — файл конфигурации, создающийся автоматически, в который включается только то, что нужно данному конкретному устройству. При вызове данной команды большая часть ядра будет замодулирована
  • localyesconfig — файл конфигурации, похожий на предыдущий, но здесь большая часть будет включена непосредственно в ядро. Идеальный вариант для начинающих.

В случае, если вы хотите использовать config, oldconfig, defconfig, localmodconfig или localyesconfig, вам больше не нужны никакие дополнительные пакеты. В случае же с оставшимися тремя вариантами необходимо установить также дополнительные пакеты.

Для установки пакетов, необходимых для использования menuconfig выполните следующую команду:

sudo apt-get install libncurses5-dev

Для установки пакетов, необходимых для использования gconfig выполните следующую команду:

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

Для установки пакетов, необходимых для использования xconfig выполните следующую команду:

До Ubuntu 12.04:

sudo apt-get install qt3-dev-tools libqt3-mt-dev

C Ubuntu 12.10:

sudo apt-get install libqt4-dev

Ручная настройка ядра Linux

Ручная настройка — сложный и трудоемкий процесс, но зато она позволяет понять как работает ваша система, какие функции используются и создать ядро с минимально нужным набором функций под свои потребности. Мы рассмотрим только главные шаги, которые нужно выполнить чтобы ядро собралось и заработало. Со всем остальным вам придется разбираться самому опираясь на документацию ядра. Благо в утилите настройки для каждого параметра есть обширная документация которая поможет вам понять какие еще настройки нужно включить.

Начнем. Для запуска меню настроек ядра linux наберите:

Откроется вот утилита с интерфейсом ncurses:

Как видите, некоторые обязательные опции уже включены, чтобы облегчить вам процесс настройки. Начнем с самых основных настроек. Чтобы включить параметр нажмите y, чтобы включить модулем — m, для перемещения используйте клавиши стрелок и Enter, возвратиться на уровень вверх можно кнопкой Exit Откройте пункт General Setup.

Здесь устанавливаем такие параметры:

Local Version — локальная версия ядра, будет увеличиваться при каждой сборке на единицу, чтобы новые ядра при установке не заменяли собой старые, устанавливаем значение 1.

Automatically append version information to the version string — добавлять версию в название файла ядра.

Kernel Compression Mode — режим сжатия образа ядра, самый эффективный lzma.

Default Hostname — имя компьютера, отображаемое в приглашении ввода

POSIX Message Queues — поддержка очередей POSTIX

Support for paging of anonymous memory  — включаем поддержку swap

Control Group support — поддержка механизма распределения ресурсов между группами процессов

Kernel .config support и Enable access to .config through /proc/config.gz— включаем возможность извлечь конфигурацию ядра через /proc/config.gz

Здесь все, возвращаемся на уровень вверх и включаем Enable loadable module support, эта функция разрешает загрузку внешних модулей,дальше открываем его меню и включаем:

Module unloading — поддержка отключения модулей

Forced module unloading — принудительное отключение модулей

Опять возвращаемся назад и открываем Processor type and features:

Processor family (Opteron/Athlon64/Hammer/K8) — выбираем свой тип процессора.

Опять возвращаемся и переходим в раздел File systems, тут установите все нужные галочки.

Обязательно включите The Extended 3 (ext3) filesystem и The Extended 4 (ext4) filesystem — для поддержки стандартных ext3 и ext4 файловых систем

Возвращаемся и идем в Kernel hacking.

Здесь включаем Magic SysRq key — поддержка магических функций SysRq, вещь не первой необходимости, но временами полезная.

Остался еще один пункт, самый сложный, потому что вам его придется пройти самому.  Device Drivers — нужно пройтись по разделам и повключать драйвера для своего оборудования. Под оборудованием я подразумеваю нестандартные жесткие диски, мышки, USB устройства, веб-камеры, Bluetooth, WIFI адаптеры, принтеры и т д.

Посмотреть какое оборудование подключено к вашей системе можно командой:

После выполнения всех действий ядро готово к сборке, но вам, скорее всего, предстоит разобраться с очень многим.

Чтобы сохранить настройки переместите указатель с помощью стрелок вправо-влево, з позиции Select в позицию Save и нажмите Enter, потом еще раз подтвердите сохранение:

Чтобы выйти нажмите пару раз кнопку Exit.

Разработка модулей ядра ОС Linux

Пример, при работе с файлами программы могут не заботиться о типе безжалостного диска и файловой системе на нем. Системные вызовы заручат безопасность и стабильность системы. Так как ядро работает арбитром между ресурсами системы и программами, оно может получать решения о предоставлении доступа в соответствии с правами юзера и другими критериями. Ядро Linux предоставляет комплект интерфейсов, именуемых системными вызовами, которые дают обеспечение взаимодействие прикладных программ, работающих в пространстве юзера, и аппаратной части компьютера. POSIX, WinAPI – образцы таких API. Прикладные программы разрабатываются с применением программных интерфейсов прибавлений (Application Programming Interface, API). В этом случае нет нужды между в корре ляции между интерфейсами, какие используют приложения и интерфейсами, которые предоставляет ядро.

Сможет существовать один и тот же API для различных операционных систем, а осуществление его может отличаться. Например, операционные системы Linux и FreeBSD отвечают стандарту POSIX (Linux на 100% соответствует эталону POSIX 1003.1), и многие приложения, написанные для FreeBSD, смогут сравнительно легко быть перенесены в Linux и и наоборот. Этим объясняется схожесть наборов приложений для данных операционных систем. Частично интерфейс к системным функциям дает обеспечение библиотека C. Например, функция printf() формирует строчку в соответствии с заданным форматом и передает ее системному призыву write(), который отправляет ее на стандартное механизм вывода (чаще всего терминал).

Компиляция ядра linux

Дата: 31 марта 2010

Зачем вообще самому компилировать ядро? Пожалуй, главный вопрос, который задают по поводу компиляции ядра: «А зачем мне это делать?». Многие считают это бессмысленной тратой времени для того, чтобы показать себя умным и продвинутым «линуксоидом»

На самом деле компиляция ядра — это очень важное дело. Допустим, вы купили новый ноутбук, в котором у вас не работает веб-камера

Ваши действия? Вы заглядываете в поисковик и ищите решение проблемы по этому вопросу. Довольно часто может оказаться, что ваша веб-камера работает на ядре более новой версии, чем у вас. Если вы не знаете, какая у вас версия — введите в терминале uname -r, в результате вы получите версию ядра (например, linux-2.6.31-10). Также компиляция ядра широко применяется для увеличения производительности: дело в том, что по умолчанию в дистрибутивах ядра компилируются «для всех», из-за этого в нем включено огромное количество драйверов, которые вам могут не понадобиться. Так что если вы хорошо знаете используемое оборудование, то можете отключить ненужные драйвера на этапе конфигурирования.

Также есть возможность включить поддержку более 4х Гигабайт оперативной памяти, не меняя разрядность системы. Итак, если вам всё же необходимо иметь своё ядро, приступим к компиляции!

Получение исходного кода ядра. Первое, что необходимо сделать — получить исходный код нужной версии ядра. Обычно необходимо получить самую новую стабильную версию. Все официальные версии ядра доступны на kernel.org. Если у вас уже установлен X сервер (домашний компьютер), то вы можете перейти на сайт в вашем любимом браузере и скачать нужную версию в архиве tar.gz (сжатый gzip). Если же вы работаете в консоли (например ещё не устанавливали X сервер или конфигурируете сервер), можете воспользоваться текстовым браузером (например elinks). Также можно воспользоваться стандартным менеджером загрузок wget :wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.gz Но учтите, что вы должны знать точный номер нужной версии.

Распаковка архива исходного кода. После того как вы получили архив с исходным кодом, вам необходимо распаковать архив в папку. Это можно сделать из графических файловых менеджеров (dolphin,nautilus и т.п) или через mc. Либо воспользуйтесь традиционной командой tar:tar -zxvf путь_до_архива Теперь у вас есть папка и исходным кодом, перейдите в неё, используя команду cd каталог_исходного_кода_ядра (чтобы просмотреть список каталогов в папке, используйте команду ls).

Конфигурация ядра. После того как вы перешли в каталог с исходным кодом ядра, необходимо выполнить «20 минутную» конфигурацию ядра. Цель её — оставить только нужные драйвера и функции. Все команды уже нужно исполнять от имени суперпользователя.

make config — консольный режим конфигуратора.

make menuconfig — консольный режим в виде списка.

make xconfig — графический режим.

После внесения нужных изменений, сохраните настройки и выйдите из конфигуратора.

Компиляция. Пришло время завершающего этапа сборки — компиляция. Это делается двумя командами:make && make install Первая команда скомпилирует в машинный код все файлы, а вторая установит новое ядро в вашу систему. Ждем от 20 минут до нескольких часов (в зависимости от мощности компьютера).

Конфигурирование и компиляция ядра Linux

Ядро установлено. Чтобы оно появилось в списке grub(2), введите (от суперпользователя)update-grub Теперь после перезагрузки нажмите «Escape», и вы увидите новое ядро в списке. Если же ядро не включается, то просто загрузитесь со старым ядром и конфигурируйте более аккуратно.

KernelCheck — компиляция ядра не заходя в консоль.KernelCheck позволяет собрать ядро в полностью графическом режиме для Debian и основанных на нём дистрибутивов. После запуска, KernelCheck предложит свежие версии ядра и патчи, и после вашего согласия, скачает исходных код, запустит графический конфигуратор. Программа соберет ядро в .deb пакеты и установит их. Вам останется лишь перезагрузиться.

Пересборка ядра

Далее мы рассмотрим ситуации, в которых действительно требуется выполнить сборку нового ядра из
исходных кодов ядра Linux. Мне известен довольно ограниченный перечень сценариев (возможных при
создании модулей ядра), действительно требующих пересборки ядра:

  1. ядро можно собрать с расширенным набором отладочных опций, что может быть необходимо для
    сложных сценариев отладки модулей, но неудачный выбор отладочных опций может сильно понизить
    быстродействие ядра (собственно, по этой причине многие отладочные опции отключены по умолчанию);
  2. в коде модуля требуется использовать вызовы API, которые появились только в более поздних версиях
    ядра, например, вызов сетевого API и родственные
    ему (большая группа), которые появляются только в ядре 2.6.37, а активно используются в разработках
    для ядер 3.0 и выше;
  3. отрабатываемый модуль следует тестировать и проверять (в сборке модуля) на некоторой «сетке» версий
    ядра, так как противном случае вы рискуете при переустановке модуля на следующую версию ядра получить
    рекламацию от заказчика: модуль просто не станет компилироваться из-за изменчивости API ядра (а
    бинарная поставка драйверов, без компиляции, как вы помните, в Linux не практикуется).

Для решения последней задачи, возможно, придётся скомпилировать несколько последовательных
версий ядра с одинаковыми конфигурациями и тестировать модуль в инсталляциях этих ядер в виртуальных
машинах для проверки на совместимость.

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

Получение исходников ядра

Самое первое что нужно сделать — это скачать исходники ядра. Исходники лучшие брать с сайта вашего дистрибутива, если они там есть или официального сайта ядра: kernel.org. Мы рассмотрим загрузку исходников с kernel.org.

Перед тем как скачивать исходники нам нужно определиться с версией ядра которую будем собирать

Есть две основных версии релизов — стабильные (stable) и кандидаты в релизы (rc), есть, конечно, еще стабильные с длительным периодом поддержки (longterm) но важно сейчас разобраться с первыми двумя. Стабильные это, как правило, не самые новые, но зато уже хорошо протестированные ядра с минимальным количеством багов

Тестовые — наоборот, самые новые, но могут содержать различные ошибки.

Итак когда определились с версией заходим на kernel.org и скачиваем нужные исходники в формате tar.xz:

В этой статье будет использована самая новая на данный момент нестабильная версия 4.4.rc7.

Получить исходники ядра Linux можно также с помощью утилиты git. Сначала создадим папку для исходников:

Для загрузки самой последней версии наберите:

Распаковка исходников ядра

Теперь у нас есть сохраненные исходники. Переходим в папку с исходниками:

Или если загружали ядро linux с помощью браузера, то сначала создадим эту папку и скопируем в нее архив:

Распаковываем архив с помощью утилиты tar:

И переходим в папку с распакованным ядром, у меня это:

19.1 Как собрать программу из исходников? Как установить программу из tar.gz/tar.bz2?

Скорее всего в tar.gz/tar.bz2 лежит не программа, а ее исходники (иногда исходники с собранной программой).

Прежде чем ее ставить, нам необходимо ее собрать. Для этого нужно выполнить (не бросайтесь сразу это делать):

root@linux# ./configure
root@linux# make
root@linux# make install

Если после любого из пунктов возникли сообщения об ошибках, значит не все вышло так, как хотелось. Можно попробовать `./configure —help` для вывода опций настройки и попробовать использовать некоторые из них.

Поскольку при таком способе установки информация о том, что ставилось и куда, остается только в памяти админа (которая частенько еще какая временная :), лучше для контроля этого процесса использовать checkinstall —
http://checkinstall.izto.org, или похожие программы (почему выше и мы говорили не выполнять команды сразу).

После того, как вы ее установите (прочитав документацию) и настроите ее конфиг, на этапе установки программного обеспечения вместо sudo make install будете писать sudo checkinstall. Checkinstall соберет «настоящий» пакет для указанной (tgz, rpm и deb в зависимости от настроек), установит его в систему и поместит в указанный в конфигурационном файле каталог (удобно для централизованного обновления нескольких машин). Удаление установленных таким образом программ осуществляется стандартными средствами дистрибутива, например, removepkg для Slackware.

Также будет полезным прочитать о том,
.

Если вы пренебрегли нашим советом и собрали и поставили программу не используя специальных утилит (или своего менеджера пакетов), тогда нужно заново распаковать исходники (ведь вы после сборки наверняка удалили папку, в которой собирали программу), сконфигурировать ее с теми же параметрами (напрягайте память), но вместо сделать . Если повезет, то все удалится.

Компилятор

Если мы собираемся компилировать  под  arm-процессор, то  нам нужен компилятор, т.е. toolchain, возьмем готовый от CodeSourcery http://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

Распаковываем ( например в /home/user ):

tar -xf arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

И устанавливаем переменную PATH:

export PATH=${PATH}:/home/user/arm-2009q3

Задаем переменные окружения для компиляции:

export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabi-
Ссылка на основную публикацию