Процесс загрузки ОС Linux



Раз уж мы занялись изучением встроенных систем и, в частности, линукса, то давайте рассмотрим, как же происходит загрузка ОС Linux на обычном ПК.

1. BIOS выполняет загрузку, специфичную для данного аппаратного обеспечения, а затем загружает и выполняет загрузочный код с одного из разделов заданного загрузочного устройства (на ПК — загружаются и выполняются 512 байт кода MBR (Master Boot Record))

В конце MBR находятся «магическое число» — два байта (0xAA55), которые служат для целей проверки MBR.

2. 512-байтовый загрузчик из MBR, загружает тот «большой загрузчик», который мы обычно и называем загрузочной программой (NTLDR, LILO, GRUB).
3. Загрузчик, предлагает(или не предлагает) пользователю меню с доступными вариантами загрузки и затем загружает ядро.
4. Ядро, при загрузке, обычно имеет вид файла-образа: сжатого с помощью zlib ядра в формате zImage (сжатый образ размером менее 512KB) или bzImage (большой сжатый образ, размером более 512KB).
В образе, содержится программа, которая проводит минимальную настройку оборудования и распаковывает образ целиком в память.
5. ядро инициализирует устройства, монтирует указанную загрузчиком файловую систему в режиме «только чтение» и запускает процесс Init (/sbin/init),

В Linux, init запускается с параметром, задающим уровень выполнения (от 1 до 6) и определяющим, какие подсистемы следует включить.
Для каждого уровня выполнения есть собственные сценарии, которые регламентируют различные процессы, участвующие в установлении или снятии данного уровня, и эти сценарии считаются необходимыми для процесса загрузки.
Сценарии Init обычно хранятся в каталогах с именами вида /etc/rс
Главный файл конфигурации уровней для init — /etc/inittab

уровни выполнения:
0 — выключение(остановка) системы.
1 — однопользовательский режим (single user mode) — для административных действий по восстановлению системы ( по смыслу, аналогичен Safe Mode Windows). На этом уровне не запущен ни один сервис, работа производятся в режиме командной строки под учётной записью root.
2 — Запуск ОС в многопользовательском режиме без поддержки сетевых сервисов.
3 — многопользовательский режим (multiuser mode).
4 — не используется.
5 — многопользовательский режим. Загрузка ОС и последующая работа производятся в графическом режиме.
6 — перезагрузка системы.

На встраиваемых платформах, чаще всего, используются загрузчики:
U-Boot (Universal Boot Loader)
RedBoot.
Программы загрузчиков хранятся в специальной области flash-памяти, расположенной во встраиваемой системе: они предоставляют средства для загрузки образа ядра Linux во flash-память и, в дальнейшем, обеспечивают выполнение этого ядра.

посмотреть MBR под линуксом:
Команда dd выполняется с правами root, считывает первые 512 байт с /dev/sda (или /dev/hda) (первый SATA/IDE -жёсткий диск) и записывает их в файл mbr.bin.
затем используется команда hexdump для удобного шестнадцатиричного представления файла.

noonv@noonv-VirtualBox:~$ sudo dd if=/dev/sda of=mbr.bin bs=512 count=1
[sudo] password for noonv: 
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0 s, Infinity B/s
noonv@noonv-VirtualBox:~$ hexdump mbr.bin -C
00000000  eb 63 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.c..............|
00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
00000050  00 00 00 00 00 00 00 00  00 00 00 80 01 00 00 00  |................|
00000060  00 00 00 00 ff fa 90 90  f6 c2 80 75 02 b2 80 ea  |...........u....|
00000070  74 7c 00 00 31 c0 8e d8  8e d0 bc 00 20 fb a0 64  |t|..1....... ..d|
00000080  7c 3c ff 74 02 88 c2 52  bb 17 04 80 27 03 74 06  ||<.t...R....'.t.|
00000090  be 88 7d e8 1c 01 be 05  7c f6 c2 80 74 48 b4 41  |..}.....|...tH.A|
000000a0  bb aa 55 cd 13 5a 52 72  3d 81 fb 55 aa 75 37 83  |..U..ZRr=..U.u7.|
000000b0  e1 01 74 32 31 c0 89 44  04 40 88 44 ff 89 44 02  |[email protected].|
000000c0  c7 04 10 00 66 8b 1e 5c  7c 66 89 5c 08 66 8b 1e  |....f..\|f.\.f..|
000000d0  60 7c 66 89 5c 0c c7 44  06 00 70 b4 42 cd 13 72  |`|f.\..D..p.B..r|
000000e0  05 bb 00 70 eb 76 b4 08  cd 13 73 0d f6 c2 80 0f  |...p.v....s.....|
000000f0  84 d0 00 be 93 7d e9 82  00 66 0f b6 c6 88 64 ff  |.....}...f....d.|
00000100  40 66 89 44 04 0f b6 d1  c1 e2 02 88 e8 88 f4 40  |@f.D...........@|
00000110  89 44 08 0f b6 c2 c0 e8  02 66 89 04 66 a1 60 7c  |.D.......f..f.`||
00000120  66 09 c0 75 4e 66 a1 5c  7c 66 31 d2 66 f7 34 88  |f..uNf.\|f1.f.4.|
00000130  d1 31 d2 66 f7 74 04 3b  44 08 7d 37 fe c1 88 c5  |.1.f.t.;D.}7....|
00000140  30 c0 c1 e8 02 08 c1 88  d0 5a 88 c6 bb 00 70 8e  |0........Z....p.|
00000150  c3 31 db b8 01 02 cd 13  72 1e 8c c3 60 1e b9 00  |.1......r...`...|
00000160  01 8e db 31 f6 bf 00 80  8e c6 fc f3 a5 1f 61 ff  |...1..........a.|
00000170  26 5a 7c be 8e 7d eb 03  be 9d 7d e8 34 00 be a2  |&Z|..}....}.4...|
00000180  7d e8 2e 00 cd 18 eb fe  47 52 55 42 20 00 47 65  |}.......GRUB .Ge|
00000190  6f 6d 00 48 61 72 64 20  44 69 73 6b 00 52 65 61  |om.Hard Disk.Rea|
000001a0  64 00 20 45 72 72 6f 72  0d 0a 00 bb 01 00 b4 0e  |d. Error........|
000001b0  cd 10 ac 3c 00 75 f4 c3  eb 27 0f 00 00 00 80 20  |...<.u...'..... |
000001c0  21 00 83 b5 8f e6 00 08  00 00 00 08 b6 00 00 d5  |!...............|
000001d0  ae e6 05 1f d0 0f fe 17  b6 00 02 e0 09 00 00 00  |................|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|

Ссылки
http://ru.wikipedia.org/wiki/Процесс_загрузки_Linux
Подробности процесса загрузки Linux
http://ru.wikipedia.org/wiki/MBR
http://ru.wikipedia.org/wiki/Уровни_выполнения
Этапы загрузки системы


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение