Top Banner
Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008 Linux Kernel Walkthroughs Booting
86

Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

May 04, 2018

Download

Documents

truongduong
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Linux Kernel Walkthroughs

Booting

Page 2: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Ottawa CanadaLinux Users Group

oclug.on.ca TheCodeFactory.ca

Page 3: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- System calls

- VFS

- Scheduling

- Memory management

Future topics

http://oclug.on.ca/KernelWalk

Page 4: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Booting

Page 5: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Outline

- PC hardware overview

- software componets

- boot overview

- follow the code

Page 6: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

PC hardware basics

Page 7: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- CPU

- memory

- disk controller

- HDD

PC hardware basics

Page 8: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

CPU

ATA

HDD

RAM

- CPU

- memory

- disk controller

- HDD

PC hardware basics

Page 9: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

video

- video

CPU

ATA

HDD

RAM

- CPU

- memory

- disk controller

- HDD

PC hardware basics

Page 10: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

cache

CPU

MMU

ATA

HDDHDD

bridge

USB

USBstick

RAM

RAM

video BIOS

PC hardware basics

Page 11: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

CPU

- lots of variants

- Intel Core2 Duo

- AMD Opteron

- VIA Eden

- backward compatible to 1970s

- emulates 8086

- 16bit

- 1M memory

PC hardware basics

Page 12: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

CPU

"real mode"

- all BIOS services

- 1M addressable

"protected mode"

- few BIOS services

- 4G memory

- virtual memory

PC hardware basics

Page 13: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

MMU

- memory managment unit

- "north bridge" or in CPU

- paging

- virtual memory

PC hardware basics

Page 14: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

MMU

virtual memory

physicalRAM

logical 1 logical 2

PC hardware basics

Page 15: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

page

MMU

virtual memory

physicalRAM

logical 1 logical 2

PC hardware basics

Page 16: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- page mappings

AB

MMU

virtual memory

physicalRAM

logical 1 logical 2

PC hardware basics

Page 17: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

4GB

- addressing

*

MMU

virtual memory

physicalRAM

logical 1 logical 2

PC hardware basics

Page 18: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- shared pages

MMU

virtual memory

physicalRAM

logical 1 logical 2

PC hardware basics

Page 19: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

bridge

- "south bridge"

- local bus

- PCI

- peripheral controllers (ATA, USB, etc)

- memory addressable h/w devices

- routes interrupts

PC hardware basics

Page 20: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

physicalRAM

logical physical

memory mapped IO

bridge

PCIdevice

PC hardware basics

Page 21: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

... for more on MM topics tune in next time.

Page 22: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Software

Page 23: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- firmware

- BIOS

- MBR

- boot loader

- kernel

Software

Page 24: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Firmware

Software

Page 25: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- CPU

- microcode

- initialize processor(s)

Firmware

Software

Page 26: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

BIOS

Software

Page 27: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- real mode

- 16bit registers

- 1M addressable memory

- limited HW access

- slow

BIOS

Software

Page 28: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- CPU init

- cache init

- interconnect

- HW enumeration

- reset / setup

- POST

Initialization

BIOS

Software

Page 29: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- memory layout

- disk

- PCI

- APM & ACPI

- graphics

Services

BIOS

Software

Page 30: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

AH = operation

DL = drive, first HDD is 0x80

...

INT 0x13

Disk services

BIOS

Software

Page 31: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Master Boot Record

Software

Page 32: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- 440 bytes of code

- first disk block

- bootloader unique

- loads rest of the bootloader

Master Boot Record

Software

Page 33: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- aka "1st stage bootloader"

Master Boot Record

Software

Page 34: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Bootloader

Software

Page 35: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- BIOS calls

- loads kernel and initrd into RAM

- slow

Bootloader

Software

Page 36: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

- BIOS services only see 1M of memory

- typical kernel is ~2M

- typical initrd is ~5M

Bootloader

Software

Page 37: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

... that's a problem!

- BIOS services only see 1M of memory

- typical kernel is ~2M

- typical initrd is ~5M

Bootloader

Software

Page 38: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

"unreal" mode

- switch to protected mode

- enable flat 32bit memory

- return to real mode

Bootloader

Software

Page 39: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Kernel

Software

Page 40: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

user space

kernel

Kernel

Software

Page 41: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Booting

Page 42: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

BIOS

bootloader

kernel

user space

Booting

Page 43: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

On disk...

HDD

Booting

Page 44: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

512 bytes1 block

On disk...

HDD

Booting

Page 45: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

stage1

stage2

config

kernel

initrd

On disk...

HDD

Booting

Page 46: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

BIOS

Booting

Page 47: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

RAM

BIOS code/data

IVT / BIOS data

In memory...

0x0A0000

0x100000

0x0005000x000000

BIOS

Booting

Page 48: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

ACPI "stuff"

RAM

BIOS code/data

IVT / BIOS data

In memory...

0x0A0000

0x100000

0x0005000x000000

BIOS

Booting

Page 49: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

HDD

RAM

Loads & jumps to MBR

0x007C00

BIOS

Booting

Page 50: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Bootloader

Booting

Page 51: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

HDD

RAM

MBR loads "step2 block"

Bootloader

Booting

Page 52: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

step2: # "disk address packet" .word 16, 1 .word 0x7e00, 0 # destination .qword 0x... # LBA disk location

mov $0x42, %ah # extended readmov $0x80, %dl # drive c:lea step2, %si # descriptor in DS:SIint $0x13

HDD

RAM

MBR loads "step2 block"

Bootloader

Booting

Page 53: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

step2: # "disk address packet" .word 16, 1 .word 0x7e00, 0 # destination .qword 0x... # LBA disk location

mov $0x42, %ah # extended readmov $0x80, %dl # drive c:lea step2, %si # descriptor in DS:SIint $0x13

HDD

RAM

MBR loads "step2 block"

Bootloader

Booting

Page 54: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

HDD

RAM

stage1 loads stage2

Bootloader

Booting

Page 55: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

HDD

RAM

stage2 finds the config

Bootloader

Booting

Page 56: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

HDD

RAM

stage2 loads kernel

0x100000

Bootloader

Booting

Page 57: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

HDD

RAM

stage2 loads initial ram disk

0x100000

Bootloader

Booting

Page 58: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

HDD

RAM

stage2 jumps into the kernel

0x100000

Bootloader

Booting

Page 59: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Kernel

Booting

Page 60: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

RAM

In the beginning...

0x100000

real mode stub

compressed vmlinux

initial ram disk

Kernel

Booting

Page 61: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

early stack/heap~64K

RAM

In the beginning...

0x100000

real mode stub

compressed vmlinux

initial ram disk

Kernel

Booting

Page 62: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

kernel command line

early stack/heap~64K

RAM

In the beginning...

0x100000

real mode stub

compressed vmlinux

initial ram disk

Kernel

Booting

Page 63: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

RAM

0x100000

real-mode

Kernel

Booting

Page 64: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

arch/x86/boot/header.S

- 8086 asm- enters at "start_of_setup"

- resets disk controllers- sets up stack

- calls main()

RAM

0x100000

real-mode

Kernel

Booting

Page 65: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

arch/x86/boot/main.c

- parse some config options- probe some HW through BIOS - memory - APM- set video

- call go_to_protected_mode()

RAM

0x100000

real-mode

Kernel

Booting

Page 66: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

arch/x86/boot/pm.c

- setup for switch - IDT (null table) - GDT (flat memory layout)

- switch to protected mode

RAM

0x100000

real-mode

Kernel

Booting

Page 67: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

decompressing

RAM

0x100000

arch/x86/boot/compressed/head_32.S

- 386 asm- enters at "startup_32"

- sets up segments & stack

Kernel

Booting

Page 68: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

RAM

decompressed size

decompressingarch/x86/boot/compressed/head_32.S

- 386 asm- enters at "startup_32"

- sets up segments & stack- moves things around

Kernel

Booting

Page 69: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

RAM

decompressed size

decompressingarch/x86/boot/compressed/head_32.S

- 386 asm- enters at "startup_32"

- sets up segments & stack- moves things around

Kernel

Booting

Page 70: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

RAM

0x100000

decompressingarch/x86/boot/compressed/head_32.S

- 386 asm- enters at "startup_32"

- sets up segments & stack- moves things around

- call decompress_kernel()

Kernel

Booting

Page 71: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

RAM

0x100000

decompressingarch/x86/boot/compressed/misc.c

- mostly C- uses gunzip

Kernel

Booting

Page 72: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

RAM

0x100000

decompressingarch/x86/boot/compressed/misc.c

- mostly C- uses gunzip

Kernel

Booting

Page 73: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

RAM

0x100000

decompressingarch/x86/boot/compressed/misc.c

- mostly C- uses gunzip

- jumps to decompressed kernel

Kernel

Booting

Page 74: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

RAM

0x100000

start real kernelarch/x86/kernel/head_32.S

- 386 asm- enters at "startup_32"

- setup segments & stack

Kernel

Booting

Page 75: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

RAM

0x100000

start real kernelarch/x86/kernel/head_32.S

- 386 asm- enters at "startup_32"

- setup segments & stack- copy cmdline

Kernel

Booting

Page 76: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

RAM

0x100000

start real kernelarch/x86/kernel/head_32.S

- 386 asm- enters at "startup_32"

- setup segments & stack- copy cmdline- setup virtual memory- setup_idt

- call start_kernel()

Kernel

Booting

Page 77: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

initialize subsystems

init/main.c

start_kernel()

- init all subsystems

- call rest_init()

Kernel

Booting

Page 78: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

kick off scheduler

init/main.c

rest_init()

- start PID 1 task

- PID 0 calls cpu_idle()

Kernel

Booting

Page 79: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

kick off scheduler

PID 0

start_kernel

rest_init

Kernel

Booting

Page 80: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

kick off scheduler

PID 0

PID 1

start_kernel

rest_init

Kernel

Booting

Page 81: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

kick off scheduler

PID 0

PID 1

start_kernel

rest_init

cpu_idle

Kernel

Booting

Page 82: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

kick off scheduler

PID 0

PID 1

start_kernel

rest_init

cpu_idle kernel_init

Kernel

Booting

Page 83: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

finish off init stuff

init/main.c

kernel_init()

- start SMP- init more subsystems

- call init_post()

Kernel

Booting

Page 84: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

finish off init stuff

init/main.c

init_post()

- finds "init" executable- run via kernel_execve()- else panic

Kernel

Booting

Page 85: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008

Any questions?

Page 86: Linux Kernel Walkthroughs Booting - excess.orgedgyu.excess.org/kernel-walkthrough/2008-08-21/boot.pdf · Bart Trojanowski bart/ August 21, 2008 Linux Kernel Walkthroughs Booting

Bart Trojanowski http://www.jukie.net/~bart/ August 21, 2008