Пожалуйста, кто-нибудь, помогите мне!

Я собираю ядро из исходного кода, загруженного с http://kernel.org. Я успешно построил и установил модули. Теперь я хочу, чтобы мой параметр ядра был установлен во время загрузки, и я хочу выбрать его. После некоторого поиска в Google

i copyed bzImage in /boot folder.
i copyed System.map file in /boot folder

Теперь я хочу сделать запись для ядра во время загрузки. Я знаю, что мне нужно внести изменения в «/etc/grub.d/» и «/etc/default/grub», после этого мне нужно будет запустить «update-grub», но проблема в том, как я буду устанавливать поля.

  1. установить root = '(hd0, msdos6)'
  2. поиск --no-floppy --fs-uuid --set = root c291827c-6678-4067-ad09-01481681a9f9
  3. echo 'Загрузка Linux 3.5.0-45-generic ...'
  4. linux /boot/vmlinuz-3.5.0-45-generic root = UUID = c291827c-6678-4067-ad09-01481681a9f9 ro recovery nomodeset
  5. echo 'Загрузка начального RAM-диска ...'
  6. initrd /boot/initrd.img-3.5.0-45-generic

Это некоторые из полей, но я не знаю, как получить значение uuid, что установить в root (например, hd0, msdos6), каково его значение, как получить исходное изображение виртуального диска?

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

Мои требования:-

How to get uuid for new kernel image?
what is (hd0,msdos6)? how to get this value for new kernel image?

Plesae, помоги мне!

2 ответа2

2

Давайте расскажем немного о грязи ... а затем объясним, что происходит с тем, что вы делаете. Загрузка системы Linux состоит из 4 частей:

  1. Запись Master-Boot. Это очень маленький размер, и он должен находиться в очень специфическом секторе диска. BIOS жестко запрограммирован, чтобы найти это и запустить там.
  2. Сам бутлодер. Это может быть grub, lilo, syslinux или множество других вещей. В данном случае это личинка. Часто MBR (основная загрузочная запись) и загрузчик - это один и тот же файл, стратегически расположенный на загрузочном носителе. (обычно начинается с самых первых нескольких байтов диска). Это не всегда так, так как вы можете иметь одну загрузку по цепочке для второго загрузчика.
  3. Само Ядро. К сожалению, само ядро не обходится без дополнительных битов. Думайте об этом как о мозге. Само по себе это не может сделать много. Добавьте некоторые части тела (глаза, ноги, сердечно-сосудистую систему и т.д.) Сценарии, модули ядра, и вы получите начало правильной системы.
  4. Начальный образ Ramdisk. Этот образ достаточно мал, чтобы запустить всю ОС. Он загружается в оперативную память и монтируется как корневая файловая система. Обычно он содержит все, что нужно ядру для загрузки. (Модули ядра, сценарии инициализации и т.д.) В какой-то момент начальный виртуальный диск заменит текущую корневую файловую систему на свое место и передаст дальнейшее выполнение сценариям init, расположенным в этом корневом каталоге. Вам не всегда нужен начальный виртуальный диск ... но вы ограничены тем, что вы можете вставить в bzImage.

Теперь объяснение значений "UUID". Лично я ненавижу UUID. Я понимаю, почему они используются сегодня ... но это не заставляет меня ненавидеть их меньше. В прошлом мы просто определяли диски как «/dev/hda1» или «(hd0,1)», что говорит нам о том, что это был первый физический диск (hda или hd0) и первый раздел на этом диске. Если вы решили добавить второй диск, станет ли старый диск hdb или hd1? или он останется прежним? Чтобы бороться с этой неоднозначностью, кто-то предложил идею создания "универсального уникального идентификатора", который бы присваивал уникальное значение каждому диску, который сохранялся бы при перезагрузках, и ему было все равно, в каком порядке обнаруживаются диски. UUID записывается на диск ... и обычно остается нетронутым. Недостатком является то, что если вы клонируете файловую систему на другой диск ... UUID не будет совпадать, и система не загрузится. Если вы хотите использовать UUID ... просто загрузите систему на обычном live-диске ... и найдите в /dev/disk /by-uuid тот, который указывает на данный диск / раздел.

Хорошей новостью является то, что вам не нужно использовать UUID. Вы можете удалить команду "поиск", и пусть root = будет определяющим фактором для того, что такое root. Вы также можете использовать --label вместо --fs-uuid и указать метку диска (если она установлена).

1

Как насчет того, чтобы переименовать ваш bzImage в kernel-${version} или vmlinuz-${version} тогда grub2-mkconfig должен автоматически его забрать.

Что касается других вещей, если вы хотите сделать пользовательскую запись, вы, вероятно, должны заглянуть в файлы в /etc/grub.d/ частности, в XX_custom

Вы можете повторно использовать UUID, который принадлежит разделу, а не ядру. То же самое с root(hd0,msdos6) - это нотация для указания grub, откуда загружать ядро, а вы просто добавляете ядро, чтобы его можно было повторно использовать

Первоначальный виртуальный диск создается с помощью соответствующих инструментов, наиболее простым из которых, вероятно, является дистрибутивный способ, вам необходимо обратиться к документации по Ubuntu по этому вопросу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .