Download as pdf or txt
Download as pdf or txt
You are on page 1of 24

PROGRAMIRANJE UGRADBENIH SUSTAVA

Predavanje

6. Inicijalizacija sustava
"Linux u ugradbenim sustavima", Copyright 2014, Kristijan Lenac.
Creative Commons BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0)
Vidjeli smo do sada
● Primjere ugradbenih sustava
● Svojstva ugradbenih sustava
● Razlike u ugradbenim sustavima i razvoju ugradbenih
aplikacija nekad i danas
● Što je sustav u stvarnom vremenu i kada je potreban
● Kada i zašto koristiti operacijski sustav
● Kada se isplati ulagati u razvoj vlastitog sklopovlja
posebno prilagođenog za aplikaciju
● Linux u ugradbenim sustavima
● Jezgru Linuxa i njeno programiranje
● Osnovne informacije o uClinux sustavu
● Licenciranje
Sadržaj predavanja

Inicijalizacija sustava

● Bootloader
● Inicijalizacija Linux jezgre
● Inicijalizacija korisničkog prostora
Inicijalizacija sustava

Inicijalizacija Inicijalizacija
Bootloader
jezgre korisničkog prostora
Bootloader
Bootstrap procedura

izvor: Macpaul Lin - The bootstrap procedure of u-boot


Bootloader

● Osnovna funkcija bootloadera je da učita i pokrene


jezgru operacijskog sustava
● Postoji veliki broj bootloadera. Od poznatijih izdvajamo
● x86 arhitektura:
– Grub
– Lilo
– Syslinux (za USB, CD-ROM)
● embedded (PowerPC, MIPS, ARM, ...):
– U-Boot
– Redboot
Funkcije bootloadera

Osnovne funkcije:
● Bazična inicijalizacija sklopovlja
● Izbor OS-a i parametara za njegovo pokretanje
● Učitavanje OS-a
Dodatne funkcije:
● Učitavanje i ažuriranje firmwarea preko
USB/Ethernet/UART veze
● Debug i testiranje
● Splashscreen
● bootset (failsafe)
● Timeri
● Minimalna ljuska
● ...
GRUB bootloader
● Primjer: GRUB bootloader
● Stage1
– kratak kod u MBR učitava veći kod iz
neiskorištenog prostora među particijama
● Stage1.5
– kod koji razumije specifičan datotečni sustav koji
sadrži Linux jezgru
– učitava Stage2
● Stage2
– prikaz liste dostupnih jezgri
– mogućnost izbora jezgre i postavljanje parametara
jezgre
– minimalna ljuska za dodatnu kontrolu i potrebe
Bootloader na ugradbenim procesorima

Tipična situacija na starijim sustavima:


NOR
● Nakon pokretanja CPU počinje
izvršavanje sa fiksne adrese
● Sklopovlje je tako projektirano da se
na toj adresi nalazi ROM ili NOR
(NAND ne podržava nasumični
pristup!) flash memorija
● Stage1 bootloadera mora biti učitan
na toj adresi RAM
Bootloader na ugradbenim procesorima

Tipična situacija danas: ROM Boot Code


(CPU)

● CPU ima integrirani kod za boot


● Kod za boot učitava Stage1 Stage1
bootloader sa nekog uređaja (MMC,
NAND, SPI flash, UART, ...) u interni
SRAM (DRAM još nije inicijaliziran)
Stage2
● Stage1 bootloader zatim inicijalizira
DRAM i ostale uređaje potrebne za
učitavanje i pokretanje Stage2
bootloadera Linux kernel
Inicijalizacija jezgre
Sastavni dijelovi datoteke zImage

● Posljednji redovi ispisa prilikom stvaranja jezgre Linuxa


za odredišnu platformu:
$ make ARCH=arm CROSS_COMPILE=xscale_be­ zImage

...

LD  vmlinux
SYSMAP System.map
OBJCOPY arch/arm/boot/Image
Kernel: arch/arm/boot/Image is ready
AS arch/arm/boot/compressed/head.o
GZIP arch/arm/boot/compressed/piggy.gz
AS arch/arm/boot/compressed/piggy.o
CC arch/arm/boot/compressed/misc.o
AS arch/arm/boot/compressed/head­xscale.o
AS arch/arm/boot/compressed/big­endian.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
Building modules, stage 2.

...
Sastavni dijelovi datoteke zImage
Redoslijed izvršavanja
Ulazna točka u jezgru: head.o

● provjerava valjanost procesora i arhitekture


● postavlja tablicu stranica (page table) na početno stanje
● uključuje memory management unit (MMU)
● uspostavlja ograničenu detekciju i prijavljivanje grešaka
● skače na početak stvarne jezgre pozivanjem
start_kernel funkcije u init/main.c
main.c

● odradi cijelu inicijalizaciju jezgre Linux-a, mount-a root


datotečni sutav, izvrši prvi proces u korisničkom prostoru
● start_kernel()
● odradi veći dio inicijalizacije (machine dependent)
● procesuiranje parametara komandne linije jezgre
● inicijalizacija sub komponenti
● init()
● cpu_idle()

● Vidi dokumentaciju:
../Documentation/kernel-parameters.txt
Posljednji koraci podizanja jezgre

if (execute_command) {
run_init_process(execute_command);
printk(KERN_WARNING "Failed to execute %s. 
Attempting "
"defaults...\n", execute_command);
}
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
panic("No init found. Try passing init= option to 
kernel.")
Inicijalizacija korisničkog prostora
Root file system

● datotečni sustav koji jezgra montira u / (root) direktorij


● neophodan za većinu funkcionalnosti sustava
● FHS: File System Hierarchy Standard:

|­­bin
|­­dev
|­­etc
|­­lib
|­­sbin
|­­usr
|­­var
|­­tmp

Koji je preporučeni sadržaj navedenih direktorija?


Primjer: minimalni root file system

.
|­­bin
| |­­ busybox
| '­­ sh ­> busybox
|­­dev
| '­­ console
|­­etc
| '­­ init.d
| '­­ rcS
'­­lib
|­­ld­2.3.2.so
|­­ld­linux.so.2 ­> ld­2.3.2.so
|­­libc­2.3.2.so
'­­libc.so.6 ­> libc­2.3.2.so
Init proces

● SysV init
● tradicionalan način inicijalizacije korisničkog prostora
● starta se /sbin/init koji procesuira /etc/inittab
● pokreće se slijed akcija zavisno od izabrane razine
izvršavanja (run-level)
● Upstart
● http://upstart.ubuntu.com/
● systemd
● novi projekt na koga prelaze ili su već prešle sve veće
distribucije
● busybox init
● koristi se u ugradbenim sustavima, pojednostavljena
verzija SysV init-a

You might also like