Я прочитал много уроков о том, как создавать собственные ядра и загружать Ubuntu с использованием этих ядер, и успешно следовал инструкциям и загружал собственные ядра, но у меня нет понимания того, что делает каждая из команд в руководствах и что на самом деле происходит с каждая команда.
Процедура , описанная на сайте в Ubuntu делает много работы с fakeroot
, dpkg
, make-kpkg
, некоторые initramfs и другие ужасный материал , который работает , но просто не помогает мне понять , что происходит.
- Что выводится
make
в каталоге ядра Linux? - Создает ли это «сжатый образ ядра»?
- Как называется файл "сжатый образ ядра" и где он находится?
- Что делает
make modules
? - Должно
make modules
быть сделано до или послеmake
? - Разве
make
мои модули не создаются автоматически? - Каков процесс (на английском языке, а не просто список команд) добавления вновь собранных ядер в список загружаемых ядер?
- Что делает
make install
? - Добавит ли
make install
это мой список загрузочных ядер, чтобы мне больше ничего не нужно было делать? - Есть ли эквивалент
make modules_install
?
ubuntu
linux-kernel
make
AnkurVj
источник
источник
Ответы:
Сверху...
make
компилирует и связывает образ ядра. Это один файл с именемvmlinuz
.make modules
компилирует отдельные файлы для каждого вопроса, на который вы ответилиM
во время настройки ядра. Код объекта связан с вашим недавно собранным ядром. (В ответах на вопросыY
они уже являются частьюvmlinuz
, а в ответах на вопросыN
они пропускаются).make install
устанавливает ваше встроенное ядро в/vmlinuz
.make modules_install
устанавливает ваши модули ядра в/lib/modules
или/lib/modules/<version>
.Что касается добавления его в список доступных ядер, об этом позаботится загрузчик. Это отличается для каждого загрузчика, но
grub
наиболее распространено на x86 и amd64, поэтому я опишу это. Это на самом деле довольно просто. Граб смотрит/
,/boot
и/lib/modules
для любой вещи, которая выглядит, как будто это может быть рабочее ядро, и добавляет его. И да, это упрощенное описание.Этот дополнительный «ужасный материал» в документации по Ubuntu - это дополнительный материал для создания
deb
пакета. Когда вы делаете это больше, чем для себя, гораздо лучше упаковать это. Вы переключитесь во времени.Сборка ядра и модулей хранится отдельно, потому что для людей, которым это необходимо (т.е. для разработчиков ядра), они часто вносят изменения только в модуль. Они могут применить свои изменения, перестроить и установить только модули. Это экономит много времени, когда это нужно делать 20 раз в день. Он никогда не будет обновлен, чтобы иметь одну
make everything
команду. Вы вместо этого запускаете,make && make modules && make install && make modules_install
как написано в документации . Процесс сборки благоприятствует разработчикам ядра, а не вам. И так и должно быть.На самом деле ни у кого, кроме разработчиков ядра или дистрибутивов дистрибутивов, практически нет причин для компиляции ядра. Практически в любых обстоятельствах нужная вам функция ядра уже создана для вас и доступна в одном из предварительно упакованных ядер. Есть исключения, но они чрезвычайно редки в наши дни.
Не то, чтобы я отговаривал вас от создания собственного ядра, я на самом деле призываю вас сделать это. Я думаю, что создание вашего ядра с нуля - бесценная практика для изучения того, как все это работает там. Частично потому, что, возможно, однажды вы будете исключением, которое необходимо. Но это также многому научит вас о ядре и процессе загрузки в целом. Вы будете лучшим человеком за то, что сделали это.
источник
/vmlinuz
ли каталог в корневой папке? когда я сделаю make install, будет ли создан этот каталог и будет ли там помещено новое ядро? Будет лиmake modules_install
заменить мои установленные модули? Предположим, я помещаю свой vmlinux в каталог / boot, нужно ли мне делать что-то еще (например, редактировать файлы конфигурации grub и делать grub-update или что-то после этого?)make bzimage
это то, что делает./vmlinuz
это бинарный файл, а не каталог. Я делал только упакованные ядра в течение последних 5 лет, так что я не помню точно поведениеmodules_install
непосредственно установленного ядра. Grub найдет ваше ядро/boot
без посторонней помощи. Да, вы всегда должны запускатьсяgrub-update
после установки нового ядра.make bzimage
вместоmake
? Мне нужно сделать сноваmake clean
иmake bzimage
снова? К/vmlinuz
вы имеете в виду файл будет создан в корневом каталоге или в каталоге исходного кода ядра Linux?/
является абсолютным путем, так что да, это файл в корне.Y
которые даны ответы , компилируются (т. Е. Они являются частью vmlinuz). Отвеченные модулиM
компилируются как загружаемые модули. Отвеченные модулиN
не компилируются.make modules_install
относится только к ответившимM
.