LINUX.ORG.RU

Не получается запилить initramfs

 ,


1

1

По мотивам прошлого треда.

tl;dr: пилю на внешнем диске систему типа sysrescuecd, тестирую на нетбуке с атомом x86 на борту.

Скомпилировал busybox, написал init, сложил всё в ФС. А дальше начинаются приключения по одному из двух вариантов:

  1. если в конфиге ядра нет CONFIG_SATA_AHCI_PLATFORM, то ядро прогружается, init монтирует /proc, /sys и /dev, а когда доходит до монтирования настоящего корневого раздела, вываливается в ash. Расследование показало, что findfs не может найти раздел диска, а дальнейшее расследование — что и диска-то в /dev/ не видать. Ни /dev/sda или /dev/sdb. Получается, ядро не смогло определить контроллер или в /dev/ по какой-то причине не создались устройства? Я бы ещё понял, если бы модуль EHCI для USB не подгрузился (кстати, надо добавить), и поэтому не был бы виден внешний диск, но встроенного в нетбук ведь тоже не видать!
  2. если в конфиге ядра присутствует CONFIG_SATA_AHCI_PLATFORM, то загрузка замирает на
    Decompressing Linux... Parsing ELF... done.
    Booting the kernel.
    Тем не менее, ядро прогружено, и SysRq+… вполне себе работают. Что происходит — непонятно.

В оригинальном конфиге ядра с нетбука CONFIG_SATA_AHCI_PLATFORM присутствует.

Конфиги ядер систем: нетбука (f-book) и внешнего диска (rescue).

BLOCK, DEVTMPFS, DEVTMPFS_MOUNT, SATA_AHCI и USB_STORAGE присутствуют и там и там. EHCI_HCD на rescue собран модулем из-за старого бага, когда в системе есть хабы USB 3.0 и 2.0, первые не определяются или определяются не все, если EHCI_HCD=y.

На нетбуке ядро 3.8.10, на внешнем 3.9.11.

Deleted

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

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

Deleted
()

Скомпилировал busybox

static ?

написал init

Вон тебе для примера мой init с поддержкой ранней проверки ext4, raid, luks, lvm2, tuxonice.

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

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

Для начала выхлоп команды

zegrep -i "$(lspci -k | grep -i ata -A 2 | awk -F ": " '/Kernel driver in use/ {print $2}')|$(awk '$2=="/" {print $3}' /etc/fstab)" /proc/config.gz

запущенной от root в студию.

Я не собираюсь тратить свое время на поиски твоих ошибок.

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

static

Йеп.

Вон тебе для примера мой init

Мне не нужен сейчас километровый инит с рюшечками и lvm, мне сейчас нужно понять, почему в /dev нет диска. Без рейдов, люксов и lvm.

Deleted
()

ядро прогружается, init монтирует /proc, /sys и /dev, а когда доходит до монтирования настоящего корневого раздела, вываливается в ash

Значит что то твой init делает не так. И да ты конечно же попробовал уже в ash в ручную монтировать root и пробовать загружаться дальше?

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

запущенной от root в студию.

Запущенной от рута где? Ядро которой системы тебя интресует, которая на нетбуке или на внешнем жестаке?

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

И да ты конечно же попробовал уже в ash в ручную монтировать root
в /dev нет диска
в /dev нет диска
в /dev нет диска

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

Ядро которой системы тебя интресует, которая на нетбуке или на внешнем жестаке?

Там где возникает ошибка у инита.

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

Полагаю, ты выбрал чрут. Вот выхлоп:

lspci: Unable to load libkmod resources: error -12
CONFIG_ATA_PIIX=y
CONFIG_EXT4_FS=y
# CONFIG_EXT4_FS_POSIX_ACL is not set
# CONFIG_EXT4_FS_SECURITY is not set
# CONFIG_EXT4_DEBUG is not set

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

1. Нет драйвера для контроллера. Отпадает, т. к. SATA_AHCI вкомпилен.
2. Что-то необъяснимое с SATA_AHCI_PLATFORM. Описание у неё довольно расплывчатое.
3. Не работает devtmpfs. Но она работает, иначе бы там вообще ничего не было.
4. Ваши варианты?..

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

А, ещё может быть не хватает udev и каких-то правил, но я таковых у тебя не встречал и вообще сомневаюсь, нужны ли они на самом деле.

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

1. Нет драйвера для контроллера. Отпадает, т. к. SATA_AHCI вкомпилен.

Судя по выхлопу этого никак не видно. А должно быть что то вроде:

CONFIG_SATA_AHCI=y

CONFIG_SATA_AHCI_PLATFORM=y

CONFIG_EXT4_FS=y

И да если я все вангую правильно(да конфиги твои я не смотрел) у тебя не с initramfs а с ядром проблемы. Забей на initramfs и для начала добейся просто нормальной загрузки без всяких initramfs а уже потом берись за усложнение.

В конце концов учись у других. Ах да

Мне не нужен сейчас километровый инит с рюшечками и lvm

И да

мне сейчас нужно понять, почему в /dev нет диска

загадка прям!

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

А, ещё может быть не хватает udev и каких-то правил, но я таковых у тебя не встречал и вообще сомневаюсь, нужны ли они на самом деле.

Каких нахрен правил udev-а в initram-е? Рукалицо! В initram-е статически собранные бинарники и все. udev будет после.

И да даже если у тебя CONFIG_SATA_AHCI=m, CONFIG_SATA_AHCI_PLATFORM=m и CONFIG_EXT4_FS=m это тоже не проблема. Просто в таком случае в initram нужно пихать еще и модули ядра и загружать все необходимые модули до монтирования root и финального прыжка веры в switch_root. Ага именно так чтобы в /dev ВНЕЗАПНО появились все необходимые устройства.

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

Судя по выхлопу этого никак не видно.

Судя по тому, как ты судишь, кто-то читал оп-пост по диагонали :3
А я там русским языком написал, что SATA_AHCI присутствует в обоих ядрах, SATA_AHCI_PLATFORM присутствует в конфиге нетбука и детально описал, что происходит, когда эта опция есть в конфиге rescue, и когда её там нет.

EXT4_FS

Тут пока вообще не причём, потому что

в /dev нет диска

Соответственно, до ошибок ФС мы пока банально не дошли. Хотя я так помню, что в этом случае ядро бы писало 「VFS: can’t mount root」

А теперь вопрос на медаль внимательного читателя: почему загрузка замирает при наличии SATA_AHCI_PLATFORM в конфиге ядра внешней системы и не движется дальше, хотя ядро системы нетбука с ней прекрасно грузится?

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

Рукалицо!

initramfs от genkernel разбирал когда-нибудь?

В initram-е статически собранные бинарники и все.

udevd что-то мешает допихнуть туда?

Ага именно так чтобы в /dev ВНЕЗАПНО появились все необходимые устройства.

В чём смысл твоих слов? Ты считаешь, что если я пересоберу ядро с вот этими модулями и допихаю их в initramfs, у меня всё взлетит?

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

Судя по тому, как ты судишь, кто-то читал оп-пост по диагонали :3

А я и не говорил что я читал твои посты не по диагонали.

А я там русским языком написал…

И я тут уже несколько раз тоже русским языком вполне понятно написал… И что? Но судя по всему это никого не волнует.

А теперь вопрос на медаль внимательного читателя: почему загрузка замирает при наличии SATA_AHCI_PLATFORM в конфиге ядра внешней системы и не движется дальше, хотя ядро системы нетбука с ней прекрасно грузится?

Внешний диск на чем? На usb? А при загрузке с внешнего диска usb ждать не надо?

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

initramfs от genkernel разбирал когда-нибудь?

Вот именно поэтому я и сделал все по своему.

udevd что-то мешает допихнуть туда?

Да но зачем? И всю систему можно в initram запихнуть. Только смысл? Initram нужен для случаев нестандартных ситуаций как то root на raid, luks, lvm2, nfs share… т.е. для тех случаев когда ядру без посторонней помощи попросту не с чего грузить систему потому как само ядро корень ну никак не найдет.

В чём смысл твоих слов? Ты считаешь, что если я пересоберу ядро с вот этими модулями и допихаю их в initramfs, у меня всё взлетит?

Нет я считаю что ты вообще все делаешь не правильно. Начиная с того как ты задаешь вопросы и заканчивая постановкой задачи.

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

А я и не говорил что я читал твои посты не по диагонали.

А при загрузке с внешнего диска usb ждать не надо?

игнорирует то, что в /dev вообще никакого диска нет, ни даже SATAшного

Носи с гордостью.

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

игнорирует то, что в /dev вообще никакого диска нет, ни даже SATAшного

Носи с гордостью.

Еще раз… Внешний диск у тебя на чем? На usb? И внимание вопрос какого хрена usb диск будет делать на шине sata? А судя по тому что ты показал вот там у тебя и sata в ядре тоже нет.

Тебе аналогично носи с гордостью. а еще за великолепно заданные вопросы.

Кастуй в тред телепатов они полюбому помогут.

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

Внешний диск у тебя на чем?

На USB 2.0

На usb?

Да. Удивительно, правда?

И внимание вопрос какого хрена usb диск будет делать на шине sata?

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

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

Тебе уже дали дельный совет, если у тебя диск на usb, то нужно выставить время ожидания на инициализацию usb диска, воспользуйся, например sleep.

Ну и во вторых в шапке темы нужно было сразу указать, что корневую файловую систему ты монтируешь с USB HDD, ну и сам пишешь

EHCI_HCD на rescue собран модулем

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

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

На USB 2.0

ок

Да. Удивительно, правда?

Вот чудно.

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

Возвращайся когда для начала найдешь десять отличий между usb и sata.

И не раньше того времени как ознакомишься с этим и выхлоп той команды станет правильным а каким конкретно см. вот там. И еще ты либо вообще не читал либо так и не осознал…

Так что да

Проходи мимо уже.

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

Ты бы выхлоп dmesg выкатил

Первая дельная мысль за весь тред. Забыл про него.

Тю! А че просто так ваще без инфы слабо да?

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

Тебе уже дали дельный совет, если у тебя диск на usb, то нужно выставить время ожидания на инициализацию usb диска, воспользуйся, например sleep.

Да ёпрст, как всем сегодня орден хочется.
Отсутствие вообще каких бы то ни было устройств, являющихся накопителями, ПЗУ в /dev вас не смущает? Почему вы проблемы ищете в первую очередь в подсистеме USB? Если бы ты прошёл по ссылке и освежил в памяти предыдущий тред, даром что сам в нём участвовал, то наверняка вспомнил бы, что ядру передаётся парметр rootwait, а скачай ты ФС из оппоста, то убедился бы ещё и в том, что sleep в /init тоже стоит.

Ну и во вторых в шапке темы нужно было сразу указать, что корневую файловую систему ты монтируешь с USB HDD,

Это цель. А до неё хотелось бы иметь возможность смонтировать хотя бы корень от внутреннего диска нетбука, который на SATA.

поэтому проверяй

Так проверил уже. С SATA_AHCI_PLATFORM загрузка замирает так же эффектно. Как оно без сейчас увидим, когда ядро докомпеляется.

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

А что других paste сервисов не существует в природе

Хм, а пастебин теперь жуёт. Просто я до этого юзал pastie.org.


Ну и можешь по дробить.

Ага, и придёт такой init_6 и скажет, что ему лень два раза Ctrl+F нажать.

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

Отсутствие вообще каких бы то ни было устройств, являющихся накопителями, ПЗУ в /dev вас не смущает?

Это должно смущать тебя.

Файлы устройств не создаются ядром при опознавании железа. Сделай заранее в initram, mknod в инит скрипте или более-менее полный udev запускай.

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

Сначала ты выкусываешь через 33 забора модуль ядра, использующийся, как ты предполагаешь, для дискового контроллера, а потом начинается какая-то содомия с /etc/fstab и конфигом нетбукового ядра, смысл которой мне не понятен в контексте запуска в чруте.

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

Это должно смущать тебя.

И смущает. Очень.

Файлы устройств не создаются ядром при опознавании железа.

А я думал, что создаются. Кстати, вот результаты новых тестов, я выкомпилил из ядра SATA_AHCI_PLATFORM и дописал в init перед монтированием

modprobe ehci-pci
modprobe ehci-hcd
Наблюдаю всю ту же эффектную черноту после 「Booting the kernel.」 ОК. Выбросил modprobe из init, гружусь. init грузится как раньше и вываливается в ash после предсказуемой неудачной попытки подмонтировать корень. ls /dev/sd* прямо перед командой mount сообщила, что никаких устройств нет. В dmesg ничего подозрительного нет:
CFS CPU scheduler.
input: AT Translated Set 2 Keyboard as /devices/platform/i8042/serio0/input/input4
tsc: Refined TSC clocksource calibration: 1595.998 MHz
Switching to clocksource tsc
Грузим модули
modpobe ehci-hcd
Появляется контроллер
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
Грузим следующий модуль
modprobe ehci-pci
Трабадабам, появляется /dev/sda{1..6} То есть, всё-таки создаются, а?,)

Вообще странно, на вики написано, что сами заранее создавайте файлы для /dev/sdaX, но они пропадают, после того, как туда монтируется devtmpfs, я и думал, что это нормально. Там же нигде в коде скрипта эти ноды потом заново не создаются.

А ещё меня по-прежнему терзает вопрос, что же такое CONFIG_SATA_AHCI_PLATFORM и почему из-за него ядро виснет при загрузке.

P.S.: Я сейчас уже точно не вспомню, но допускаю, что когда не получилось загрузиться с modprobe в init-скрипте, они вызывались до монтирования /proc, /sys и /dev, поэтому ядро и застывало на чёрном экране.

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