Как заполнить/dev каталог при создании моего собственного initrd?

Я думаю Хром, ОС, на данный момент, предназначена для очень ограниченного выбора нетбуков/ноутбуков. Вы могли попытаться копировать по модулям ядра с другой системы и видеть то, что происходит, не причинит боль, но я dubt, если это будет работать. Выполняет Хром ОС в VirtualBox (или другой VM) альтернатива?

9
05.04.2019, 14:11
2 ответа

В то время как ответ жабр корректен, это - старая школа :-). Другой знаменитый объект (больше придирание к мелочам на терминологии, чем что-нибудь) - то, которые ведут Вас связанный с, инструкции относительно того, как создать initramfs, не initrd. Эти два подобны, и служат той же цели, но отличаются в том, как изображение хранится и загружается.

Так или иначе ответ на Ваш вопрос на самом деле действительно действительно прост.

  1. Включить devtmpfs в ядре (CONFIG_DEVTMPFS=y)
  2. Выполненный mount -t devtmpfs none /dev как самая первая вещь в Вашем init сценарий.

Именно. devtmpfs заполнит /dev точно так же, как udev. Вы не должны даже предварительно заполнять /dev (в изображении initramfs) с основами как null, zero, или console.

12
27.01.2020, 20:05
  • 1
    Спасибо за Ваш комментарий. Я выполнил Вашу команду, и у меня теперь есть больше устройств, но все еще никакой sda или hda для монтирования. Есть ли что-то, что я забыл делать? Я использую vmlinuz ядро, я получил от debians живую систему, я должен на самом деле скомпилировать свое собственное? –  Carlito 24.10.2012, 12:03
  • 2
    @Carlito это ядро имеет devtmpfs, включил (проверьте файл конфигурации)? Debian только недавно переключается на devtmpfs. –  Gilles 'SO- stop being evil' 24.10.2012, 13:14
  • 3
    @Gilles Там не является предоставленным файлом конфигурации, но я загрузил ядро, которое я получил от debian, сказанный файл конфигурации CONFIG_DEVTMPFS=y, но я все еще не получаю sda устройств. Я думаю, что это вызвано тем, что я не загрузился, любые модули (lsmod ничего не возвращает). Какие модули я должен загрузить для получения устройств файловой системы? Или есть ли что-то еще, что я забыл? –  Carlito 24.10.2012, 13:46
  • 4
    @Carlito да, если у Вас есть другие вещи, обнаруживающиеся в /dev, просто не диски, затем devtmpfs работает, и Вы, вероятно, пропускаете модуль дискового контроллера (как Вы предположили). К сожалению, единственный способ знать, в каком драйвере/модуле Вы нуждаетесь, состоит в том, чтобы или считать информацию для каждого в конфигурации ядра или работать lspci -k в рабочей системе Linux (который покажет Вам, что драйвер ядра различные компоненты Вашей системы использует). –  Patrick 24.10.2012, 14:44
  • 5
    @CiroSantilli709  CONFIG_DEVTMPFS_MOUNT=y не имеет никакого эффекта на initramfs. Из текста справки ядра: "Эта опция не влияет на базирующуюся начальную загрузку initramfs, здесь devtmpfs файловая система всегда должна монтироваться вручную после того, как rootfs смонтирован" –  Patrick 01.06.2017, 15:35

Udev заполняет /dev автоматически на основе драйверов, которые загружаются в ядро и устройства, которые обнаруживают эти драйверы. Названия устройств и их полномочий основаны на ряде правил, который могут подстроить администраторы. Большинство систем Linux должно использовать udev; исключением являются системы (обычно встраиваемый), где аппаратная конфигурация известна в то время, когда система настраивается и не изменится впоследствии.

Вы обычно звонили бы udev довольно рано в Вашей последовательности запуска. Одна из нескольких вещей, Вы должны (должен?) делают, прежде чем это - монтирование /proc и /sys. После запуска демона звонить udevadm trigger --action=add; udevadm settle заставить udev обработать все незаконченные события от ядра (trigger) и ожидайте, пока события не обрабатываются прежде, чем продолжиться (settle). Можно затем продолжить определять местоположение устройства, содержащего корневую файловую систему.

Кроме того, udevd двоичный файл, Вам будут нужны другие части udev на Вашем initrd. Это включает конфигурационные файлы в /etc/udev, основная конфигурация в /lib/udev а также двоичные файлы помощника такой как scsi_id также в /lib/udev. Вам нужны все программы, которые называют от правил udev, что Вы включаете в initrd.

В конце initrd, прежде, чем передать управление реальному корневому разделу, необходимо будет остановиться udevd как любая программа от initrd. Это не удаляет устройства из /dev. Использовать mount --move /dev /root/dev перемещать смонтированный /dev к реальному корню.

У хинду есть руководство initramfs и initramfs страница Wiki, которые упоминают udev среди прочего. Initramfs является современным преемником initrd, с помощью архива cpio, а не изображения файловой системы, и с другим интерфейсом процесса (на initrd, /linuxrc должен выйти, тогда как на initramfs, /init должен exec init от реального корня); большинство систем переключилось в эти дни (даже если файл можно было бы все еще назвать initrd).

4
27.01.2020, 20:05
  • 1
    Спасибо за Ваш ответ. Я пришел к выводу, что на самом деле сделал initramfs вместо initrd. Но я использую vmlinuz ядро, я получил от debians живую систему, я должен на самом деле скомпилировать свое собственное ядро для этого (таким образом, я знаю, который модули там для загрузки жестких дисков), или есть ли своего рода минимальная версия, которую я мог использовать с основными модулями? Я, вероятно, загружу последний udev и попытку скомпилировать и выполнить его. –  Carlito 24.10.2012, 12:22
  • 2
    @Carlito, который я рекомендую сначала пробовать ядром Debian как упущение необходимого драйвера, является частой ошибкой при компиляции собственного ядра. –  Gilles 'SO- stop being evil' 24.10.2012, 13:12
  • 3
    Но как я получил бы тот? Я просто скопировал vmlinuz, который я нашел в debian-businesscard.iso (вероятно, не лучшая идея). Я должен просто скопировать стандартное ядро, которое я получил от человечности или debian и целого/lib/modules каталога? –  Carlito 24.10.2012, 13:45
  • 4
    @Carlito Вам будут нужны по крайней мере все модули, которые необходимы для Ваших аппаратных средств. Может быть трудно найти все, в чем Вы нуждаетесь от просмотра списка. Лучший способ узнать, в чем Вы нуждаетесь, состоит в том, чтобы работать lsmod в рабочей системе. Поэтому запустите со всех них, затем сократите разумно, если необходимо оставить свободное место. –  Gilles 'SO- stop being evil' 24.10.2012, 14:28

Теги

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