Аргументы в ядро - PullRequest
       17

Аргументы в ядро

6 голосов
/ 19 июня 2009

Есть ли что-нибудь, что ядро ​​должно получить от загрузчика. Обычно ядро ​​способно поднять систему с нуля, так зачем ему что-то от загрузчика? Я видел загрузочные сообщения от ядра, как это.

"Fetching vars from bootloader... OK"

Так что же точно передаются переменные? Также, как переменные передаются из загрузчика? Это через стек?

Ответы [ 6 ]

2 голосов
/ 21 июня 2009

Для ядра Linux есть несколько вещей, которые загрузчик должен сообщить ядру. Он включает в себя такие вещи, как командная строка ядра (как уже упоминалось несколькими другими людьми), где в память загружен initrd и его размер, если используется initrd (ядро не может загрузить его самостоятельно ; часто при использовании initrd модули, необходимые для доступа к устройствам хранения, находятся в пределах initrd, и ему также может потребоваться выполнить довольно сложную настройку, прежде чем можно будет получить доступ к хранилищу), и несколько разных моментов и концов.

См. Documentation / x86 / boot.txt (ссылка на версию 2.6.30) для более подробной информации о традиционной архитектуре x86 (как 32-разрядной, так и 64-разрядной), включая способ передачи этих переменных. к коду настройки ядра.

2 голосов
/ 19 июня 2009

Ядро принимает так называемые параметры командной строки, которые основаны на тексте. Это очень полезно, потому что вы можете многое сделать без перекомпиляции ядра. Что касается передачи аргументов, это зависит от архитектуры. В ARM это делается через указатель на место в памяти или фиксированное место в памяти.

Вот как это делается на ARM . Обычно ядро ​​не способно загрузить машину с нуля. Может быть из биоса, но тогда это не с нуля. Требуется некоторая инициализация, это работа загрузчика.

2 голосов
/ 19 июня 2009

Есть некоторые параметры, которые ядро ​​Linux принимает от загрузчика, из которых сейчас я могу вспомнить параметр vga. Например:

kernel /vmlinuz-2.6.30 root=/dev/disk/by-uuid/3999cb7d-8e1e-4daf-9cce-3f49a02b00f2 ro vga=0x318

Посмотрите на 10 параметров времени загрузки, которые вы должны знать о ядре Linux , которые объясняют некоторые из общих параметров.

1 голос
/ 29 октября 2009

Загрузчик не использует стек для передачи аргументов ядру. По крайней мере, в случае Linux, есть довольно сложная структура памяти, которую загрузчик заполняет, и ядро ​​знает, как анализировать. Вот как загрузчик указывает ядру на его командную строку. См. Documentaion / x86 / boot.txt для получения дополнительной информации.

0 голосов
/ 24 апреля 2012

Обычно параметры называются параметрами командной строки, которые передаются в модуль ядра из загрузчика. Загрузчик использует многие из прерываний BIOS для обнаружения,

memory
HDD
Processor
Keyboard
Screen
Mouse
ETC...

и все сведения об аппаратном обеспечении будут обнаружены во время загрузки, то есть в реальном режиме, а затем передайте эти параметры в ядро.

0 голосов
/ 19 июня 2009

Linux принимает переменные из загрузчика, чтобы разрешить использование определенных опций. Я знаю, что вы можете сделать так, чтобы вам не приходилось входить в систему (режим восстановления), и есть несколько других вариантов. Это в основном просто позволяет делать исправления, если есть проблема с чем-то или для смены пароля. Вот как Ubuntu Live-CD загружает Linux, если вы решите использовать другую опцию.

...