2

Привет, ребята, я новичок в компиляции ядра Linux, поэтому у меня есть вопрос: компилируя ядро Linux, мы создаем полностью автономную ОС, которая не зависит от каких-либо дистрибутивов Linux?

Если да... Хорошо, когда я хочу создать файл initrd с помощью команды initramfs, почему он добавляет некоторую информацию о моем работающем разрушении Linux (я использую Ubuntu 10.4)?

Как мне скомпилировать и добавить модули в мой скомпилированный linux и где их разместить?

Это краткое изложение того, что я делал:

1. получить исходный код ядра (3.4.1) и скомпилировать его с помощью команды "make all" (я использую мой текущий linux .config)

  1. Установка grub на мою карту памяти

  2. Помещение скомпилированного bzImage в каталог /boot моей карты памяти

  3. Используя команду "initramfs", создайте файл initrd и поместите его также в /boot.

  4. Загрузка моего ПК с карты памяти и вход в терминал grub>

  5. Использование «root (hd0,0)»; "kernel /boot /bzImage"; «initrd /boot/initrd.img», а затем "boot" команды для загрузки.

  6. Попадание в терминал (initramfs) после ошибки, в которой говорится, что не удалось найти файл "/lib/modules/3.4.1/modules.dep" !!!

Что я делаю неправильно ?

2 ответа2

10

Компилируя ядро Linux, мы создаем полностью автономную ОС, которая не зависит от каких-либо дистрибутивов Linux?

Нет. Сам по себе Linux не является операционной системой. Это просто ядро. Пользовательское пространство, содержащее набор системных библиотек и базового программного обеспечения, необходимо для облегчения вашего взаимодействия с компьютером. В том, что мы обычно имеем в виду, когда мы ссылаемся на "Linux", это обеспечивается отдельным проектом, который называется GNU Project. Технически, мы должны (и некоторые делают) называть это "GNU/Linux".

Хорошо, когда я хочу создать файл initrd с помощью команды initramfs, почему он добавляет некоторую информацию о моем работающем разрушении Linux (я использую Ubuntu 10.4)?

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

Как мне скомпилировать и добавить модули в мой скомпилированный linux и где их разместить?

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

Это краткое изложение того, что я делал:

Есть ряд причин, по которым это не сработает так, как вы этого хотите.

получить исходный код ядра (3.4.1) и скомпилировать его с помощью команды "make all" (я использую мой текущий linux .config)

Если вы работаете с Ubuntu 10.04, которая предшествует ветке 3.x ядра Linux, не говоря уже о 3.4. Скорее всего, он не будет работать правильно, по крайней мере, без огромного количества дополнительной работы. Конфигурационные файлы тоже немного изменились, и я искренне удивлен, что он не выбрасывает ошибки влево и вправо о том, что в вашем (предположительно для Linux 2.6) файле конфигурации не совпадает с тем, как это делается в 3.4. Кроме того, вы, вероятно, захотите загружать исходный пакет ядра Ubuntu, а не простой исходный исходный код ядра с kernel.org, поскольку Ubuntu исправляет ядро, добавляя в него необходимые функции и заставляя его работать со всем остальным в системе. Наконец, вам не хватает нескольких шагов, которые я расскажу позже.

Помещение скомпилированного bzImage в каталог /boot моей карты памяти

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

Попадание в терминал (initramfs) после ошибки, в которой говорится, что не удалось найти файл "/lib/modules/3.4.1/modules.dep" !!!

Это восходит к пропущенным шагам, о которых я упоминал ранее. Вам нужно make modules_install вашим новым ядром, чтобы его модули были помещены в /lib/modules .

ТЕМ НЕ МЕНИЕ...

Ничего из этого на самом деле не имеет значения, потому что в идеале вы не должны компилировать ядро "традиционным" способом вообще, если только у вас нет особой необходимости. В наши дни, если вам действительно нужно скомпилировать свое собственное ядро, в большинстве дистрибутивов есть способ сделать это, используя свою собственную версию ядра (если применимо), автоматизирует процесс сборки, устанавливает ядро как пакет, чтобы вы могли без проблем установить и удалить это по мере необходимости, и настраивает ваш загрузчик, чтобы дать вам выбор нового или старого ядра (ей). В Ubuntu вы должны следовать этим инструкциям: Kernel/Compile - Ubuntu Wiki

Это не означает, что вы не можете скомпилировать ядро «старомодным» способом только для кайф / в образовательных целях - таким образом я скомпилировал свое первое ядро, но это было до того, как появились лучшие способы сделать это. Если для вас важна бесперебойность вашей системы, используйте рекомендованный метод для вашего дистрибутива, используйте его источник и используйте управление пакетами.

1

Когда вы перекомпилируете или компилируете ядро Linux, вы НЕ создаете новый дистрибутив. Вы делаете новую или другую версию только ядра. Ядро представляет собой один файл, который загружается, а затем запускается загрузчиком после того, как ваш компьютер завершит процесс POST.

Дистрибутив состоит из многих, многих других файлов, включая стандартные утилиты UNIX, обычно менеджер пакетов и другие. Ничего из этого не коснется, если вы (пере) скомпилируете собственное ядро

Прошло некоторое время с тех пор, как я скомпилировал свое собственное ядро, но я думаю, что вам нужно запустить depmod -a после команды make .

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