Yocto Image не загружается

Это должно работать:

sed 's/^ *# *wal_level *= *[^ ]*/wal_level = archive/'

Я также допускаю пробел перед комментарием (на всякий случай )и 0 или более пробелов во всех остальных местах. Альтернативно, в perl:

perl -pe 's/^\s*#\s*wal_level\s*=\s*\S+/wal_level = archive/' file
1
08.07.2019, 14:59
2 ответа
bzImage-4.19.40-intel-pk-standard root=/dev/sda2

Это способ запуска напрямую из оболочки Uefi. Но на самом деле initrd=не хватает! У меня была точно такая же проблема :Модули SATA/SCSI не в ядре, это модули в initramfs (в основном ). Скопируйте initrd/initramfs рядом с вашим ядром и добавьте имя адаптацииinitrd=initram-cpio.gz(«образ»! )в командной строке.

Ошибка VFS говорит :, что корень (/dev/sda2 ), который вы мне дали, находится на блочном устройстве, которое я не могу прочитать.


После поиска «yocto» я хочу добавить :, вы должны настроить необходимые модули как встроенные («y» ), а не как модули («m» ). Таким образом, вам не нужен initrd, и это, кажется, идея этого «встроенного» проекта.


добавлено после поиска yocto еще немного...

Этот йокто (и твой Q )не оставили меня в покое. Я нашел это из конференции/статьи 2016 года (на lwn.net):

At the basic level [...] Yocto and Buildroot can both give you the same end product: a root filesystem image for your embedded device, a kernel, a bootloader, and a compatible toolchain.

Насколько я понимаю, вы скорее захотите использовать "make" для компиляции ядра, плюс модули, плюс initrd, если хотите.

Можете ли вы сказать мне, почему вы написали это:

I used dd to put [the kernel image] on the hard drive

Меня это очень смущает. Как будто вы сделали dd... of=/dev/sda. Я бы сказал, что :я скопировал образ ядра в каталог на разделе x.

Итак, вы прошлись по всей этой сборке Yocto, переделали ядро ​​и initrd, и теперь вы не знаете, как загрузить ядро ​​Linux?!?


Я начал с нового комплекта мини-ПК -, так что диск был пуст. Я решил использовать GPT и Uefi. Моим последним опытом был MBR давным-давно. Сначала я загрузил установщик slackware с USB-накопителя.

С помощью fdisk я создал несколько разделов, включая разделы типа «EFI» или «ESP». Я мудро сделал его 2GB. Некоторые рекомендуют только 100 МБ. ESP нуждается в форматировании vfat, потому что он также читается BIOS.

Единственными (скомпилированными )ядрами Linux, которые я нашел, были ядра внутри ISO-образов установщиков и работающих систем. Из системы openuse live usb я мог смонтировать любой ISO, а затем смонтировать rootfs squashs с двумя файлами :kernel и initrd.

Эти два файла (ядро ​​и начальный RAM-диск )я скопировал на свой 2GB ESP. Ядро занимает от 3 до 8 МБ, initrd — от 10 до 30 МБ.

Мой BIOS загружается в оболочке Uefi, где я могу запустить ядро, введя его имя, как команду оболочки uefi.

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

fs0: vmlinuz

Вот как я запускаю ядро ​​с именем файла «vmlinuz» из командной строки uefi, из ESP, которая называется «fs0».

Поскольку root= отсутствует, это также должно вызвать панику. Вскоре я попробовал:

fs0: vmlinuz root=/dev/sda2

И это вызвало у меня панику ядра, которую вы изначально описали:

VFS: unable to mount rootfs...

Отсюда вы можете пойти двумя путями :использовать initrd, который «поставляется с» ядром, добавив initrd=...cpio.gzв качестве параметра KCL (командную строку ядра ). Или используйте ядро ​​​​Fedora 29 ---, оно было единственным, которое могло смонтировать мое устройство sda. Причина в том, что :в него встроено несколько опций Kconfig -, в то время как все остальные дистрибутивы помещают их как модули в initrd (sata, scsi, sd -mod ).

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

Видите ли, :без компиляции или yocto, без grub, просто зайдя в ISO из дистрибутивов, я смог провести множество экспериментов. Вот параметры загрузки, которые имеют значение:

initrd=...img

Оригинальный документ ядра от 1996 -2000 года в некоторых местах вводит в заблуждение.Но Альмесбергер ясно определяет :, что его initrd «позволяет» выполнять загрузку в два этапа. И :скрипт rdinit=внутри ramdisk может смонтировать «настоящий» корень и переключить _корень на него. Бывают ситуации, когда эти два -этапа -загрузки необходимы.

Я следил за паникой ядра «VFS :» в исходном коде ядра. Функция «подготовить пространство имен _» является центральной. Эта часть, где ядро ​​монтирует root=, пропускается, если задано initrd=; в исходниках есть комментарий "если есть initrd, пусть все работает".

root=/dev/xxyy

без initrd=, это напрямую сообщает ядру, в какое (блочное )устройство оно должно «загружаться». С помощью initrd его можно использовать для переключения _root на. root=/dev/ram0имеет особое значение :, оно делает начальный RAM-диск настоящим корнем с самого начала. Это полезно для многих встроенных систем, я думаю :rootfs находится в файле cpio, а не в разделе.

init=/sbin/init

Это последнее, что ядро ​​делает при загрузке :при вызове первого процесса. Как и в случае с root=, если вы укажете initrd=, разбор этого аргумента должен выполняться виртуальным диском. Обратите внимание, что ядро ​​может понять "/" только после монтирования root=.

Если ваш BIOS переключен на «оболочку Uefi», и ваш диск отформатирован GPT (или гибридной/защитной MBR )и вы добавили небольшой (, но не слишком маленький )раздел ESP vfat, вы готовы запустить ядро ​​плюс initrd.

Теперь я планирую просто скомпилировать ядро, которое сможет монтировать мои стандартные разделы SSD, поэтому мне не нужен initrd. Мне не нужны yocto или grub для «встраивания» софткора. Если только я не хочу компилировать новейший исходный код ядра два раза в месяц... но, эй, я хочу компилировать ядро, а не создавать свой собственный дистрибутив!

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

0
28.01.2020, 00:07

Наконец-то мне удалось загрузить Yocto Image!

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

Сначала я установил grub -как обычно и добавил grub.cfg в /boot/grub/ раздела EFI (для меня это /dev/sda1 ). После этого я добавил search --set=root --file /vmlinuzвместо set root=(blabla)в файл grub.cfg. Затем я скопировал vmlinuzиз Fedora 30 в свой корневой раздел (/dev/sda2 ), так как sam68 предложил добавить linux /vmlinuz /dev/sda2в мой grub.cfg. Мне потребовались дни, чтобы добраться до этого момента, поэтому я надеюсь, что это может помочь кому-нибудь!

0
28.01.2020, 00:07

Теги

Похожие вопросы