Компиляция ядра Linux: автономная ОС

Компиляция ядра Linux: автономная ОС

Привет, ребята, я новичок в компиляции ядра 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" !!!

Что я делаю не так ?

решение1

Компилируя ядро ​​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 вы должны следовать этим инструкциям:Ядро/Компиляция - Ubuntu Wiki

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

решение2

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

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

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

Связанный контент