Высокоуровневая инициализация
Под "высокоуровневой инициализацией" следует понимать действия, непосредственно не связанные с начальной загрузкой, даже не смотря на то, что часть кода, выполняющая ее, написана на ассемблере, а именно в файле arch/i386/kernel/head.S, который является началом декомпрессированного ядра. При инициализации выполняются следующие действия:
Устанавливаются сегментные регистры (%ds = %es = %fs = %gs = __KERNEL_DS = 0x18).
Инициализируются таблицы страниц.
Разрешается листание страниц, установкой бита PG в %cr0.
Обнуляется BSS (для SMP (мультипроцессорных систем (прим. перев.)), это действие выполняет только первый CPU).
Копируются первые 2k bootup параметров (kernel commandline).
Проверяется тип CPU, используя EFLAGS и, если возможно, cpuid, позволяющие обнаружить процессор 386 и выше.
Первый CPU вызывает start_kernel(), все остальные - arch/i386/kernel/smpboot.c:initialize_secondary(), если переменная ready=1, которая только переустанавливает esp/eip.
Функция init/main.c:start_kernel() написана на C и выполняет следующие действия:
Выполняется глобальная блокировка (необходимая для того, чтобы через процесс инициализации проходил только один CPU)
Выполняются платформо-зависимые настройки (анализируется раскладка памяти, копируется командная строка и пр.).
Вывод "баннера" ядра, который содержит версию, компилятор, использованные при сборке, и пр., в кольцевой буфер для сообщений. Текст "баннера" задается в переменной linux_banner, определенной в init/version.c. Текст этот можно вывести на экран командой cat /proc/version.
Инициализация ловушек.
Инициализация аппаратных прерываний (irqs).
Инициализация данных для планировщика.
Инициализация данных хранения времени.
Инициализация подсистемы программных прерываний (softirq).
Разбор параметров командной строки.
Инициализация консоли.
Если ядро было скомпилировано с поддержкой загружаемых модулей, инициализируется подсистема динамической загрузки модулей.
Инициализируются профилирующие буферы, если командная строка содержит указание "profile=".
Содержание Назад Вперед