Presentation is loading. Please wait.

Presentation is loading. Please wait.

Tizen Bootup.

Similar presentations


Presentation on theme: "Tizen Bootup."— Presentation transcript:

1 Tizen Bootup

2 Contents Bootloader overview Tizen U-boot Tizen Systemd
Platform bootup

3 Bootloader

4 Tizen bootup overview Bootloader
Pass Machine ID and the boot arguments to kernel Power on ROM code Booting device Bootloader Kernel Platform

5 What is bootloader What is boot loader ? Why boot loader is needed ?
A boot loader is the first program which executes (before the main program i.e. kernel ) whenever a system is initialized A boot loader is a computer program that loads the main program (i.e. operating system, kernel ) for the board after completion of the self-tests Why boot loader is needed ? Gives a development environment Saves cost of flash writers Give flexibility to load any operating system

6 Types of bootloader What are different types of boot loaders ?
Boot-ROM ( or Pre-Boot Loader) Small code which loads First stage boot loader First Stage Boot Loader Small Piece of code that initialize the NAND/MMC & DRAM controller. Second Stage Boot Loader Primary function of the second-stage boot loader is to Loading the kernel into RAM or jumping directly to the start of the kernel. Pre-Bootloader First-Stage Bootloader Second-Stage Bootloader OS Kernel

7 U-boot loading process
Exynos4412 DRAM controller DRAM Cortex-A9 eSSD controller Booting Device (NAND, MMC, SD, USB) Internal ROM 1 iROM code NAND controller 1st BL 2nd BL SD/MMC controller Internal SRAM 2 OS UART/USB 3

8 U-boot loading process
BL0; iRom code (boot-rom or pre-boot loader) Simple platform independent code, stored in internal ROM Initialize basic functions (clock, stack, heap, etc) Load first stage boot loader (from booting device to internal SRAM) BL1; first boot loader Simple platform independent code, stored in external memory(booting device) Load second boot loader Initialize NAND/MMC and DRAM controller BL2; second boot loader Platform dependent complex code, stored in external memory Initialize clock, UART Load OS image from booting device to DRAM Jump to operating system

9 U-boot directory structure
api Machine/arch independent API examples Example code for standalone applications arch Architecture specific files fs Filesystem code (cramfs, ext2, jffs2, etc.) board Board dependent files include Header files common Misc architecture independent functions lib Files generic to all architectures disk Code for disk drive partition handling net Networking code doc Documentation post Power on self test drivers Commonly used device drivers rtc Real time clock drivers tools Tools to build S-Record or U-boot images

10 U-boot code sequence Disable all interrupts
Copy any initialized data from ROM to RAM Zero the uninitialized data area Allocate space for and initialize the stack Initialize the processor’s stack pointer Create and initialize the heap Execute the initializers for all global data Enable interrupts Call main loop

11 U-boot code sequence Reset CPU and Hardware cpu/armv7/start.S _start()
Setup SP for Early Board Setup Environment (ASM->C) Disable IRQ &FIQ Switch to supervisor mode cpu/armv7/start.S reset() General Relocation arm/lib/crt0.S _main() cpu/armv7/start.S relocate_code() Early Board Setup arm/lib/crt0.S board_init_f() Low Level Initialization Copy Binary to RAM cpu_init_crit Disable MMU Invalidate and disable Instruction & data Cache Calculate Addresses (SP, Dest, GD) for Relocation Fix Relocation Clear BSS Setup SP for Common Board Setup Setup GD and JUMP to Final Board Setup lowlevel_init arm/lib/crt0.S board_init_r() board/samsung/lowlevel_init.S lowlevel_init() Jump into main loop

12 U-boot code sequence _start() /* Entry point function */
reset() /* Reset CPU configurations */ save_boot_params() /* Save boot parameters */ Disable the FIQ & IRQ Switch to supervisor mode cpu_init_crit() Invalidate I, D Cache Disable I cache if CONFIG_SYS_ICACHE_OFF Disable MMU lowlevel_init() _main() /* setup initial stack & global data And jump to C routine for board initialization */

13 U-boot code sequence board_init_f()
arch_cpu_init // basic arch cpu dependent setup board_early_init_f // early board initialization, UART pin setting timer_init // initialize timer env_init // initialize mmc/sdcard environment init_baudrate // initialize baudrate settings serial_init // serial communication setup console_init_f // stage 1 init of console, configure console from console.c display_banner // say that we are here, print u-boot banner print_cpuinfo // display cpu info checkboard // display board info init_func_i2c // initialize I2C dram_init // configure available RAM backs arm_pci_init

14 U-boot code sequence board_init_r()
board_init // setup chipselects specific configuration logbuff_init_ptrs // initialize default log level mem_malloc_init // configure malloc area nand_init mmc_init // initialize flash/mmc env_relocate // relocate environment or set NULL stdio_init // setup stdio ready for use api_init // initialize API console_init_r // fully init console as a device arch_misc_init // miscellaneous arch dependent initialization misc_init_r // miscellaneous platform dependent initialization interrupt_init // set up exceptions enable_interrupts // enable exceptions board_late_init // board late initialization eth_initialize // setup ethernet main_loop // jump to main loop & waiting for commands from console

15 U-boot code sequence main_loop() Wait for 3 seconds
Key pressed within 3 seconds Input command Command_mode() Autoboot_mode() boot() loads() tftpboot() flash() Jump to kernel image address

16 Loading through U-boot
SDRAM Reset CPU Kernel Root File-System Booting device Bootloader uboot Bootloader uboot Kernel Image Optional compressed Root File System

17 Loading through U-boot
Packing uImage When the kernel is complied, mkimage attaches image_header to kernel image Unpacking uImage Magin number  CRC check  decompress  get board information  kernel booting #define IH_MAGIC    0x /* Image Magic Number     */ #define IH_NMLEN    32 /* Image Name Length     */ typedef struct image_header { uint32_t    ih_magic; /* Image Header Magic Number */ uint32_t    ih_hcrc; /* Image Header CRC Checksum */ uint32_t    ih_time; /* Image Creation Timestamp  */ uint32_t    ih_size; /* Image Data Size    */ uint32_t    ih_load; /* Data Load  Address   */ uint32_t    ih_ep; /* Entry Point Address       */ uint32_t    ih_dcrc; /* Image Data CRC Checksum   */ uint8_t     ih_os; /* Operating System         */ uint8_t     ih_arch; /* CPU architecture         */ uint8_t     ih_type; /* Image Type             */ uint8_t     ih_comp; /* Compression Type     */ uint8_t     ih_name[IH_NMLEN]; /* Image Name     */ } image_header_t;

18 start_kernel Architecture dependent setup
setup_arch() [/arch/arm/kernel/setup.c] Exception(or trap) initialization trap_init() [/arch/arm/kernel/trap.c] Interrupt initialization init_IRQ() [/arch/arm/kernel/irq.c] sotfirq_init() [/kernel/sotfirq.c] Scheduler initialization sched_init() [/kernel/sched.c] Timer initialization time_init() [/arch/XXX/kernel/time.c] Console initialization console_init() [/driver/char/tty_io.c] Module initialization init_module() [/kernel/module.c]

19 start_kernel Memory & System initialization , Cache & Buffer initialization , File system initialization kmem_cache_init() [/mm/slab.c] mem_init() [/arch/a,r/mm/init.c] kmem_cache_size() [/mm/slab.c] fork_init() [/kernel/fork.c] proc_caches_init() [/kernel/fork.c] vfs_caches_init() [/fs/dcache.c] buffer_init() [/fs/buffer.c] page_cache_init() [/mm/filemap.c] signals_init() [/kernel/signal.c] proc_root_init() [/fs/proc/root.c] ipc_init() [/ipc/util.c] init process creation rest_init() [/init/main.c]

20 systemd

21 What is systemd? Sysvinit userspace launch (PID 1)
Only one process at a time running Simply starting the system and then going to sleep until the next reboot Systemd Default init in Fedora 15 and later Leonard Poettering (2009) improve the software framework for expressing dependencies allow more processing to be done concurrently or in parallel during system booting reduce the computational overhead of the shell.

22 What is systemd? Systemd in Tizen
System and service manager for tizen systemd Ver. 43 (download Parallelizes service execution Socket and D-Bus activation for starting services and daemon on-demand starting of daemons Managing the service processes as a group using Linux cgroup Supporting automount points Snapshotting and restoring of services

23 systemd architecture

24 systemd architecture systemd Utility systemd target systemd daemon
monitoring and controlling systemd itself and its services 'systemctl' developers can query or send control commend to the systemd service manager 'systemd-journalctl' utility to see log message systemd target Tizen boot-up process is split up in various discrete steps and each step are grouped its unit using 'Target' unit to synchronize point The boot-up process is highly parallelized in each target so that the order in which specific target units are reached in not deterministic systemd daemon system and service manager for Tizen platform acts as init system 'systemd' daemonruns as user session with '--user' option 'systemd-journald' is a system service that collects and stores log data from the Kernel, from user processes via syslog or STDOUT/STDERR

25 systemd architecture systemd core systemd library & Linux Kernel
manages all units such as service, socket, mount and so on, stores all log data. controlled by using systemd utility like 'systemctl' systemd library & Linux Kernel systemd requires to enable 'cgroup' and 'autofs' option in Kernel configuration It also depends on dbus and some libraries such as libnotify, libudev

26 Platform bootup – sysinit.target
Early boot-up scripts Most of file system are mounted and systemd related daemons are launched basic.target sysinit.target multi-user.target graphical.target bootmode.target Kernel local-fs.target swap.target socket.target -.mount boot.mount csa.mount fsck-root.service media.mount opt-usr.mount opt.mount remount-rootfs.service resize2fs-root.service systemd-remount-api-vfs.service var-run.mount dev-hugepages.mount dev-mqueue.mount proc-sys-fs-binfmt_misc.automount sys-fs-fuse-connections.mount sys-kernel-config.mount sys-kernel-debug.mount sys-kernel-security.mount systemd-ask-password-console.path systemd-binfmt.service systemd-journald.service systemd-modules-load.service systemd-random-seed-load.service systemd-readahead-collect.service systemd-readahead-replay.service systemd-sysctl.service systemd-tmpfiles-setup.service dbus.socket systemd-initctl.socket systemd-journald.socket systemd-shutdownd.socket telnetd.socket udev-control.socket udev-kernel.socket

27 Platform bootup – basic.target
Basic boot-up All necessary initialization for general purpose daemons are completed basic.target sysinit.target multi-user.target graphical.target bootmode.target Kernel opt-var-kdb-db-libsqlfs.service opt-var-kdb-db-smack-labels.service smack-default-labeling.service systemd-tmpfiles-clean.timer tizen-debug-level.service udev-trigger.service udev.service vconf-setup.service

28 Platform bootup – bootmote.target
Select boot mode If kernel boot parameter has ‘charger_detect_boot’, the platform boots up as charging mode basic.target sysinit.target multi-user.target graphical.target bootmode.target Kernel bootmode-charging.service bootmode-graphical.service

29 Platform bootup – multi-user.target
Setup a multi-user system which is non-graphical support Launching platform infrastructure daemons (such as dbus, power manager, gps manager, telephony daemon, WRT security daemon, media server, systemd-related daemons) basic.target sysinit.target multi-user.target graphical.target bootmode.target Kernel alarm-server.service avsystem.service bluetooth-address.service bluetooth-frwk-service.service bluetooth.service dbus.service dlog-main.service dlog-radio.service getty.target gps-manager.service media-server.service nfc-manager.service power-manager.service pulseaudio.service secure-storage.service sensor-framework.service system-server.service systemd-ask-password-wall.path systemd-logind.service systemd-user-sessions.service telephony.service

30 Platform bootup – graphical.target
Setup a graphical environment System user session for app privilege daemons such as Enlightenment (window manager) Special target for middleware & mobile service basic.target sysinit.target multi-user.target graphical.target bootmode.target Kernel core-efl.target tizen-middleware.target boot-animation.service cbhm.service e17.service indicator.service osp-app-service.service quickpanel.service scim.service starter.path xmodmap.service xrdb.service ac.service calendar.service contacts-service.service download-provider.service .service msg-service.service pushd.service sound-server.service tizen-mobile-session.target wrt-preinstall-widgets.service xorg.target xorg.service

31 Systemd parsing

32 Platform bootup systemd
Control is moved from initramfs to systemd of Tizen platform Run hardware init and fs mount, etc services Bootup process run several units (.target) Different target can be run in parallel Many linux distributions adopt systemd as default Red Hat Enterprise Linux, CentOS, Fedora, Arch Linux, openSUSE Do not use daemon control script (/sbin/init, /etc/init.d/*, /etc/rc*.d) /usr/lib/systemd unit files: service, target, socket, device, mount, automount, path, snapshot, swap, timer systemd utilities: systemctl, notify, analyze, cgis, cgtop, logictl, journalctl, nspawn

33 Platform bootup https://wiki.tizen.org/wiki/Porting_Guide entry point
.target vs .service .target; service grouping .service; process run

34 Parsing unit file – example (1/8)
/usr/lib/systemd/system cat sysinit.target target to parse

35 Parsing unit file – example (2/8)
Website systemd download manpage

36 Parsing unit file – example (3/8)
Can search all function and unit, configuration of systemd enter target index

37 Parsing unit file – example (4/8)
target unit file

38 Parsing unit file – example (5/8)
Description on unit file option

39 Parsing unit file – example (6/8)

40 Parsing unit file – example (7/8)

41 Parsing unit file – example (8/8)
User awareness unit name = “System Initialization” If emergency is running, wait Run with local-fs.target, swap.target, sysinit.target.wants Run after local-fs.target, swap.target, emergency.service, emergency.target User can control service start and stop

42 Different Sessions [Unit], [Service], [Install], [Socket], [Swap], [Mount], … example; telephony.service [Unit]; general options unit name = Telephony daemon Run after modem.service [Service]; process options Run telephony-daemon as main process [Install]; actual work of unit excute Create telephony.service symlink at multi-user.target.wants

43 References systemd official Site systemd FAQ (written by developer)


Download ppt "Tizen Bootup."

Similar presentations


Ads by Google