SliTaz SliTaz Forum

You are not logged in.

#1 2012-10-28 23:17:24

lexeii
Administrator
Registered: 2012-03-21
Posts: 1,853

Перекомпиляция текущего ядра

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

Введение. Зачем это нужно?

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

Как скомпилировать ядро в SliTaz? Наверняка, вы не теряли времени даром, и нашли в интернете хотя бы парочку статей, описывающих, как собрать своё ядро в различных линуксах. Я не призываю вас забыть всё это, нет. Но, многое из этого нам не нужно из-за специфики нашего дистрибутива и его системы, собирающей пакеты. Ядро линукса — это тоже пакет, и у него тоже есть рецепт, и, следовательно, его так же, как и прочие пакеты, можно собрать. Единственный нюанс — рецепт текущего ядра, применяемого в стабильном SliTaz поставляется вместе с готовым конфигом. И, если мы соберем пакет с ядром линукса, то мы получим то же самое ядро, ни больше, ни меньше. Поэтому, нам придётся прервать процесс компиляции/сборки, сконфигурировать ядро и запустить процесс компиляции/сборки по-новой. (В скобках замечу, что сначала я открыл конфиг в обычном текстовом редакторе, изменил его, сохранил и начал приготовление пакета, но это порочный метод. Возможно, включение какой-то одной строки потребует включение другой строки в другом месте конфига. Для конфигурации параметров ядра существуют специальные программы-мастера. Вот, ими мы и воспользуемся для наших целей. Совсем так же, как пишут на сайтах про компиляцию ядра).

Предупреждения.

Во-первых, компиляция ядра (как и другого большого пакета) — потенциально опасная операция. Вы должны быть уверены, что ваша система выдержит пару-тройку часов со стопроцентной нагрузкой процессора. Так, во время написания этой статьи у меня компилируется ядро, прошлый раз это заняло 3 часа с минутами на моём процессоре Intel Atom N270 @ 1.6GHz, температура процессора сейчас 54°C, полёт нормальный…

Во-вторых, очень желательно, чтобы у вас был безлимитный интернет, т.к. потребуется скачать 110–120 МБ, из которых 74 МБ занимают исходники ядра, а остальное — пакеты для сборочной среды.

В-третьих, необходимо, чтобы на том разделе, где у вас находится home (там, где ваша домашняя папка, ну или домашняя папка tux, другими словами) было не менее 2,5 ГБ свободного места. Если это не так, постарайтесь освободить место. Если необходимое свободное место есть на другом разделе жесткого диска (естественно, только с файловой системой линукса), то этим можно воспользоваться. Методом проб и ошибок удалось найти простой вариант как это сделать.

Я освободил необходимое место на разделе, который монтируется как /media/Mint.

Я создал на нём папку /media/Mint/chroot.

С правами root я создаю папку в домашнем разделе: /home/slitaz/cooking (к слову, у меня /home — это раздел на 4 ГБ флешке).

Теперь, в папке /home/slitaz/cooking я создаю символьную ссылку, указывающую на папку /media/Mint/chroot; ссылка имеет название chroot. Для этого, с правами root же, в PCManFM я нажимаю F4 для вызова терминала. В нём командую: [c]ln -s /media/Mint/chroot chroot[/c]

В дальнейшем, в этой ссылке-папке будет наше чистое-стерильное окружение для сборки пакетов (там будут папки /bin, /dev и т.п.), чтобы разные чудачества нашей текущей системы никак бы не повлияли на собираемые пакеты.

В-четвертых, время. Об этом я уже писал. Желательно не оставлять компьютер без присмотра всё это время.

Устанавливаем сборочную среду

Это просто как раз-два-три.

Включаем интернет.

Устанавливаем пакет tazdev:

# tazpkg -gi tazdev

Создаём стерильный chroot:

# tazdev gen-chroot

Переходим в chroot:

#tazdev chroot

Если вы, как и я, увидите ошибку (не помню точно ее текст), говорящую, что не удалось записать в /dev/null, то просто удалите ошибочный /dev/null:

rm /dev/null

Ошибка эта у меня появилась только когда я стал использовать chroot на другом разделе.

Теперь настраиваем нашего повара:

cook setup

Установятся нужные пакеты. Посреди установки будет вопрос. При установке busybox нас спросят, хотим ли мы оставить некие уже установленные утилиты, которые подменяет собою busybox? Нужно ответить или «y» или «n». Разницы я не заметил.

Теперь попробуем протестировать повара:

cook test

Посреди всего действа нас попросят нажать Enter. Вскоре пакет соберется и его можно будет забирать из /home/slitaz/cooking/packages (пакет ни для чего не нужен, только для проверки того, что всё в порядке, и повар работает так как нужно).

Теперь, нам нужно скачать рецепт ядра linux и отдать его повару.

Идём на Hg→Wok stable→browse→linux. Короче, можно сразу перейти по ссылке: http://hg.slitaz.org/wok-stable/file/tip/linux

В общем, мы сейчас в папке под названием «linux», а в ней мы видим рецепт и вложенную папку «stuff». Нам всё это нужно. Чтобы не скачивать и не сохранять поодиночке все эти файлы, мы можем загрузить сразу весь архив (имеется ввиду, архив wok-stable. Он не слишком большой — 3,8 МБ). Чтобы скачать архив, в верхнем левом углу страницы находим ссылки: bz2 gz (bz2 занимает меньше места), нажимаем , сохраняем. Распаковываем из архива только папку «linux». Теперь с правами root переходим в /home/slitaz/cooking/chroot/home/slitaz/wok и ложим сюда нашу папку linux. Теперь повар знает рецепт приготовления нашего блюда wink

Offline

#2 2012-10-29 00:25:11

lexeii
Administrator
Registered: 2012-03-21
Posts: 1,853

Re: Перекомпиляция текущего ядра

Начинаем готовить Linux.

Даём команду cook и название пакета: [c]cook linux[/c]

Все зависимости сборки были уже закачаны (?), теперь загрузится архив с исходниками ядра линукса версии 2.6.37.

После этого архив распакуется, к исходникам будут применены необходимые патчи и произойдет кое-что еще, в подробности чего я не вдавался. И вот, когда по терминалу поползут однообразные строчки из двух колонок, в левой из них будет всё CC да LD, а в правой разные адреса, это значит, что ядро уже начало компилироваться. Останавливаем процесс. Кнопками [Ctrl+c]. Да, это грубо. Но нам нужно сконфигурировать ядро. А создатели рецепта не дали нам этой возможности (возможно, это как-то делается по-другому и я просто не знаю).

Конфигурируем ядро.

Переходим в папку /home/slitaz/cooking/chroot/home/slitaz/wok

Здесь мы видим папки, в которых лежат рецепты. Вот и наша папка linux, заходим сюда.

Здесь лежит рецепт. Кроме того, папка stuff. И, здесь еще появилась папка source с исходниками, распакованными из загруженного архива. Заходим сюда. Теперь заходим в единственную папку linux-2.6.37

Нажимаем F4 чтобы открыть терминал в этой папке.

Конфигуратор можно вызвать двояко:

make xconfig

Будет красивый графический конфигуратор. Но для того, чтобы он заработал, нам нужно установить пакеты qt4, Qt4-dev и многие-многие их зависимости. Если интернет и свободное место «не жмут», то пожалуйста.

make menuconfig

Мы увидем псевдо-графический конфигуратор в терминале. Для того, чтобы он скомпилировался, нужно загрузить и установить пакет ncurses-dev, а уж потом давать команду make menuconfig.

Ах да, забыл сказать. В моей системе стоит компилятор и всё что нужно для компиляции, поэтому я так просто могу компилировать как из chroot так и из обычной моей рабочей системы. Для вас, скорее всего, будет лучше по-другому. Всё в том же терминале, в котором мы остановили компиляцию ядра мы переходим в папку с исходниками:

[c]cd /home/slitaz/wok/linux/source/linux-2.6.37[/c]

Теперь устанавливаем ncurses-dev:

[c]tazpkg -gi ncurses-dev[/c]

Теперь запускаем терминальный конфигуратор:

[c]make menuconfig[/c]

Теперь ходим по меню, ищем то что нам нужно, включаем опции, в конце сохраняем и выходим. Конечно, это просто сказать и непросто сделать для первого раза. Небольшие подсказки. Если мы видим на пункте справа стрелку, то значит, мы можем углубиться в этот пункт меню, нажав Enter. Чтобы выйти из этого пункта меню наружу, нажмите кнопку вправо, чтобы внизу подсветился пункт Exit и подтвердите его нажав Enter. Когда нужный пункт найден, можно нажать: «n» (no) чтобы выключить пункт (при этом между квадратными или угловыми скобками станет пусто); «y» (yes) чтобы включить пункт, при этом данный пункт будет вмонтирован в ядро (между скобками появится звёздочка); «m» (module) чтобы включить пункт, но не вмонтировать его я ядро, а вынести в отдельный модуль (между скобками буква M). Чтобы сохранить текущую конфигурацию, нажимаем пункт в самом низу списка.

Как найти, например, где включить i2c-i801? Тут всё довольно логично устроено. Переходим на Device Drivers ---> I2C support ---> I2C Hardware Bus support ---> Intel 82801 (ICH/PCH). Для того, чтобы убедиться, нажимаем Help и читаем описание этого пункта, для чего он предназначен, как будет называться модуль и т.п.

Сохраняем, выходим. Теперь наш файл «.config» (скрытый файл, кстати) из папки с распакованными исходниками копируем в папку stuff, лежащую возле рецепта. Переименовываем наш файлик на «linux-2.6.37-slitaz.config», заменив имеющийся (старый нужно заранее удалить или переименовать).

Запускаем повара (cook linux), откидываемся на спинку кресла… ☺

По ходу дела можно покурить, попить кофе, просмотреть любимый сериал, или вот, написать руководство.

По окончании нужно всё корректно закрыть и выйти. Выходим из стерильного chroot-окружения командой exit, выходим из root командой exit, выходим из терминала крестиком или командой exit. Пакет найдём в /home/slitaz/cooking/packages. Его можно установить, (сохранить систему, если она frugal) и перезагрузиться. Удачи!

Пока я это писал, новое ядро уже скомпилировалось. Я тут уже очень много изменил в параметрах, нужные мне пункты включил, ненужные убрал, а то, что не знаю, то оставил. Время прошло 137 минут. Пойду, попробую этот новый блин и спать.

Offline

#3 2012-10-29 21:13:32

sklimkin
Member
Registered: 2012-10-08
Posts: 99

Re: Перекомпиляция текущего ядра

Действительно руководство.

Мне пришлось читать аналогичное по созданию ядра Линукс для наладонника HP iPAQ hx4700

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

Поэтому некоторые важные нюансы просто отсутствовали.

В результате я собрал ядро, которое оказалось не совсем полноценным.

Затею эту отложил до собственного "просветления".

Спасибо Алексей.

Offline

#4 2012-10-29 23:50:55

sklimkin
Member
Registered: 2012-10-08
Posts: 99

Re: Перекомпиляция текущего ядра

Возможно это будет интересно:

http://uco.puppyrus.org/forum/thread279.html

Offline

#5 2012-11-04 07:02:21

uriukti
Member
Registered: 2012-08-30
Posts: 69

Re: Перекомпиляция текущего ядра

!!!! слюни...!!!! опять слюни.... !!!!!  без Вас Aleksej проект - не проект. Не уходите отсюда надолго please.

Offline

#6 2012-11-04 07:09:01

lexeii
Administrator
Registered: 2012-03-21
Posts: 1,853

Re: Перекомпиляция текущего ядра

Со слюнями поаккуратнее, пожалуйста. Так и закоротить может чего-нибудь wink

Мне кажется, что ядро ветки 3, заточенное под свой процессор вкуснее будет. Но это потом.

Offline

#7 2012-11-04 07:15:35

uriukti
Member
Registered: 2012-08-30
Posts: 69

Re: Перекомпиляция текущего ядра

Кстати, как новый блин?

P.S. Где лучше писать про Raspbbery Pi и SliTaz - ARM ? А то я хочу их как раз объединить. Скоро уже приедет моя малинка. Так как она не у всех есть новая тема про малинку и SliTaz5 наверное будет не актуальной. )

Offline

#8 2012-11-04 07:37:56

lexeii
Administrator
Registered: 2012-03-21
Posts: 1,853

Re: Перекомпиляция текущего ядра

Первый блин я выпекал, вручную изменив конфиг ядра. Добавил пару модулей в ядро. Один появился, второй - нет.

Второй блин - попытался сильно изменить конфиг через конфигуратор, выбросив всё лишнее и оставив только то, что нужно на моём нетбуке. С модулями не разобрался. В итоге нормально загрузился с новым ядром, но при этом сидел без интернета, т.к. вай-фая не было, и не смог открыть разделы диска с файловой системой линукса, а вот, с нтфс - пожалуйста. Пока такие глобальные изменения отложил на будущее.

Про малину лучше писать по-английски, т.к. мало таких счастливчиков пока. На форуме недавно появился наш старый знакомый - (китаец, вроде) Alanyih. Он много экспериментирует с АРМами, ведет свой одноименный блог на блогспоте (http://alanyih.blogspot.com), посвященный слитазу. Как я понял, кросс-компиляция под арм - это уже реальность.

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.029 seconds, 7 queries executed - Memory usage: 1.58 MiB (Peak: 1.77 MiB) ]