LINUX.ORG.RU

Неудачная сборка и запуск ядра Linux из-под Ubuntu

 , , , ,


3

3

Здравствуйте. Изучаем ОС Linux в институте, дали задание: скачать репозиторий Торвальдса, собрать последний релиз ядра Linux (чтобы вышел чистый дистрибутив без патчей и графики) и запустить его. Я скачал, переместился на нужный коммит; далее, как нам и говорили, сконфигурировал ядро под свою систему:

make defconfig

И стал собирать ядро и модули командой

make -j4
make modules

Вроде появились файлы vmlinux и vmlinux.o. Установил ядро путем выполнения

make install
make modules-install
update-grub

Первой проблемой стало отсутствие новой собранной версии Linux в GRUB'е. После еще нескольких команд update-grub и каких-то еще, подобной этой, версия ядра в загрузчике внезапно появилась, но не как самостоятельная система, а как как будто бы новая версия ядра, на которой можно запустить Ubuntu, из-под которой я всё и собирал.
То есть, я ожидал увидеть в GRUB'е что-то подобное:

*Ubuntu
*Доп. параметры Ubuntu
*Linux 4.9
*Memory test

А увидел это:

*Ubuntu
*Доп. параметры Ubuntu
*Memory test

И внутри «доп. параметров» есть это ядро с очень странным словом Ubuntu (я же не дистрибутив Ubuntu собирал!):

*Ubuntu, версия ядра 4.9 <--- голое ядро, которое я ставил
*Ubuntu, версия ядра 4.4 <--- моя рабочая
...

И самый сок, что с новой версией ядра система и не запускается, виснет на фразе «Загружается начальный виртуальный диск». Что, в принципе, естественно - насколько я понял, он пытается Убунту запустить на этом ядре, а оно голое, там вообще графической оболочки нет.
В общем, что и как нужно сделать, чтобы получить «чистое» ядро, с которого загружаешься, и там только командная строка? Что я делаю не так?

Загружается начальный виртуальный диск

Вангую отсутсвие initrd, луркай в эту сторону.
У Debian есть пример сборки своего ядра. Следуя этой интрукции получишь пакет, который установит ядро как штатное ядро из репозиатрия.

yurikoles ★★★ ()
Последнее исправление: yurikoles (всего исправлений: 3)
Ответ на: комментарий от yurikoles

Ему не нужен пакет ядра. Ему нужно ванильное ядро и ядерная консоль. И initrd ему тоже не особо нужен. Просто запустить ядро без графики. Подскажите человеку опции, которые нужно в grub.cfg поставить, а дальше по логам разбираться. Хотя поменять опции загрузки ядра в Ubuntu тоже может оказаться нетривиальной задачей

anonymous ()
Ответ на: комментарий от yurikoles

Удваиваю гипотезу про initrd и свой способ сборки ядра в Debian/Ubuntu. ТС делает слакварный путь сборки.

Infra_HDC ★★★★★ ()
Ответ на: комментарий от yurikoles

Но мне не нужно ядро Debian'a или Ubuntu. Мне нужно ванильное ядро линукса, отдельное, и его нужно запустить как самостоятельную ОС.

NotSoOld ()

Изучаем ОС Linux в институте собрать последний релиз ядра Linux чтобы вышел чистый дистрибутив

Если вы изучаете Linux в институте, то вам как минимум говорили определение понятия «дистрибутив» и это не ядро Linux.

Что бы собрать именно дистрибутив иди читай Linux From Scratch.

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

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

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

Поэтому нужно либо собирать Initrd в котором будут модули обранного тобой ядра, либо распаковать существующие Initrd, поместить модули ядра и запаковать обратно.

Но тебе проще пересобрать ядро с нужными опциями, запускается конфигуратор ядра командой:

make menuconfig
там ищи опции поддержки контроллера жёстких дисков и файловой системы корневого раздела, включай их монолитно.

Заодно почитай что нужно выполнить для очистки исходников ядра от прошлой сборки.

В конфиг загрузчика конфигурацию для нового ядра можно писать руками, а не посредством утилиты update-grub и прочее. Почитай как это делается в Internet.

Если grub2 для тебя сложно почитай про syslinux, там проще синтаксис конфигурационного файла.

Не забудь перечитать методички по предмету и лекции. Не забудь про документацию. Тебе будет полезна для понимания документация по Gentoo и LFS (Linux From Scratch).

Удачи.

kostik87 ★★★★★ ()
Последнее исправление: kostik87 (всего исправлений: 2)
Ответ на: комментарий от yurikoles

Если сам ядро собираешь без initramfs можно обойтись.

anonymous ()

И еще - не обязательно перегружатся - новые ядра в твоем случае можно обкатывать на виртуальных машинах типа qemu

cvv ★★★★★ ()
Ответ на: комментарий от kostik87

Сделал по-другому. Взял defconfig, включил внутрь ядра все модули, которые было можно, и добавил некоторые пункты через menuconfig, в том числе касающиеся ATA/SATA/SCSI устройств. Затем четыре команды для сборки и установки:
sudo make -j4
sudo make modules
sudo make install (сама делает initramfs и update-grub)
sudo make modules_install

В GRUB'e она всё так же отображается странно, но да ладно, ядро вроде пытается запуститься, initrd выполняется (т.е. проходит дальше сообщения «Загружается начальный виртуальный диск»), ну а дальше всё, загрузка крашится с сообщениями в такой последовательности:
Decompressing Linux... Parsing ELF... done.
Booting the kernel.
Gave up waiting for root device.
........
ALERT! /dev/sda1 does not exist. Dropping to a shell!

И вот я в initramfs. :(
Ошибку искал (но прочитанное не удовлетворило), /dev/sda1 (это выставленный UUID в GRUBе) существует и он загрузочный.

P.S. Ради интереса собрал огромное ядро путем использования конфига allyesconfig, оно загружается, находит два ядра-«пингвинчика», а затем при загрузке улетает в kernel panic.
И ведь главное я с компом уже давно на «ты», разное проделывал, лишь бы инструкция была, а тут жесть какая-то :/

NotSoOld ()
Ответ на: комментарий от darkenshvein

А мне и не надо под убунту, мне нужно ванильное ядро собрать и запустить. Без графики. Задание лишь в том, чтобы самому собрать и запустить ядро.

NotSoOld ()
Ответ на: комментарий от darkenshvein

Чем ёрничать, лучше бы подсказали, что нужно найти и включить в menuconfig, чтобы можно было и с линуксом на «ты» побеседовать.

NotSoOld ()
Ответ на: комментарий от NotSoOld

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

darkenshvein ★★★★★ ()
Ответ на: комментарий от darkenshvein

Нет, я днище и внутрь компа уже давно не залезал, равно как и в мануал к материнке.
defconfig, oldconfig и localyesconfig - ни один ни дал решение проблемы с проблемой монтирования файловой системы. Я в тупике ¯ \ _ (ツ) _ / ¯

NotSoOld ()
Ответ на: комментарий от NotSoOld

какие еще два ядра-пингивинчика. Это пять=)

Собери вот так, просто: скопируй конфиг, текущего ядра в папку с исходниками:

cp /boot/config-*твое_текущее_яро /path/to/в_исходники_ядра/.config

make menuconfig

сохраняешься, выходишь.

make -j4 deb-pkg
собираешь в deb пакеты. идешь куришь. устанавливаешь пакеты собранные.
dpkg -i *.deb

ving2 ()
Последнее исправление: ving2 (всего исправлений: 1)
Ответ на: комментарий от NotSoOld

sudo make install (сама делает initramfs и update-grub)

Не делает, по крайней мере раньше не делала, да и сейчас не должна.

Gave up waiting for root device. ........ ALERT! /dev/sda1 does not exist. Dropping to a shell!

Значит ядро не видит жёсткий диск, скорее всего потому, что поддержка контроллера жёстких дисков собрана модульно, а в Initramfs нет этого модуля.

P.S. Ради интереса собрал огромное ядро путем использования конфига allyesconfig, оно загружается, находит два ядра-«пингвинчика», а затем при загрузке улетает в kernel panic.

В какой конкретно, скорее всего, неправильно указан корневой раздел или всё же проблема с драйвером.

И ведь главное я с компом уже давно на «ты», разное проделывал, лишь бы инструкция была, а тут жесть какая-то :/

Инструкция есть - ставь Gentoo, поставишь и разберёшься.

Нахрапом без понимания не получится, даже если ты в лоб будешь следовать инструкции.

Нужно думать головой.

Давай конфиг загрузчика.

Когда провалишься в Initramfs можно посмотреть вывод

lsmod
ls /dev/sd*

Всё же советую разобраться с установкой Gentoo, это как раз таки даст необходимый уровень понимания.

Но можно, конечно и в Ubuntu дальше всё крутить.

Давай содержимое /etc/fstab, конфиг загрузчика и конфигурационный файл собранного ядра. Заодно вывод команды

lspci -k
Конфиг ядра залей на pastebin сервис.

Далее разберись как всё же правильно собирать Initramfs под новое ядро, ибо make install всё же не собирает initramfs.

kostik87 ★★★★★ ()
Ответ на: комментарий от darkenshvein

В документации ядра:

make help | grep kernel
* vmlinux	  - Build the bare kernel
  kernelrelease	  - Output the release version string
  kernelversion	  - Output the version stored in Makefile
  headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH
  namespacecheck  - Name space analysis on compiled kernel
  rpm-pkg             - Build both source and binary RPM kernel packages
  binrpm-pkg          - Build only the binary kernel package
  deb-pkg             - Build the kernel as a deb package
  tar-pkg             - Build the kernel as an uncompressed tarball
  targz-pkg           - Build the kernel as a gzip compressed tarball
  tarbz2-pkg          - Build the kernel as a bzip2 compressed tarball
  tarxz-pkg           - Build the kernel as a xz compressed tarball
 Linux kernel internal documentation in different formats:
* bzImage      - Compressed kernel image (arch/x86/boot/bzImage)
  install      - Install kernel using
                  (your) ~/bin/installkernel or
                  (distribution) /sbin/installkernel or
                  FDARGS="..."  arguments for the booted kernel
                  FDINITRD=file initrd for the booted kernel

kostik87 ★★★★★ ()
19 апреля 2017 г.

У меня та же самая фигня случилась, но до того пока не переустановил систему и у меня Арч) Магия... Есть какие мысли по этому поводу? Или как решилась проблема?

dima1911 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.