Presentation is loading. Please wait.

Presentation is loading. Please wait.

Tizen v2.3 Bootup.

Similar presentations


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

1 Tizen v2.3 Bootup

2 Contents Bootloader(U-boot) Systemd Bootloader Overview U-boot
Systemd Overview Platform Bootup Parsing Unit File

3 Bootloader(U-boot)

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 Rethinking PID 1
System and service manager for tizen platform 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 Rethinking PID 1

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' daemon runs 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 Kernel dev-hugepages.mount systemd-modules-load.service dev-mqueue.mount systemd-sysctl.service init-conf.service systemd-tmpfiles-setup-dev.service kmod-static-nodes.service systemd-tmpfiles-setup.service sys-fs-fuse-connections.mount systemd-udevd.service sys-kernel-config.mount systemd-udev-trigger.service sys-kernel-debug.mount systemd-update-utmp.service systemd-ask-password-console.path tizen-debug-off.service systemd-journald.service tizen-debug-on.service systemd-journal-flush.service local-fs.target sysinit.target csa.mount opt-usr.mount opt.mount resize2fs-root.service systemd-remount-fs.service usr-share-locale.mount tmp.mount Smack.mount basic.target Tizen-boot.target Tizen-system.target Tizen-runtime.target socket.target multi-user.target dbus.socket systemd-initctl.socket systemd-journald.socket systemd-shutdownd.socket telnetd.socket udev-control.socket udev-kernel.socket graphical.target swap.target

27 Platform Bootup – basic.target
Basic boot-up All necessary initialization for general purpose daemons are completed Kernel sysinit.target cleanup-storage.service smack.service tizen-generate-env.service vconf-setup.service klogd.service syslogd.service tizen-init-check.service xorg.service basic.target Tizen-boot.target Tizen-system.target Tizen-runtime.target multi-user.target graphical.target

28 Platform Bootup – Tizen target
Prepare Tizen booting Display booting animation Execute Launchpad daemon (launcher) Kernel sysinit.target basic.target tizen-boot.target Tizen-boot.target Tizen-system.target Tizen-runtime.target wm_ready.service tizen-system.target boot-animation.service late-tizen-system.service wait-lock.service check-mount.service silent-animation.service multi-user.target tizen-middleware.target graphical.target

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) Kernel ac.service sound-server.path msg-server.service getty.target alarm-server.service starter.service calendar-serviced.service ghost.service nfc-manager.service systemd-ask-password-wall.path pkgmgr_recovery.service pulseaudio.service gstreamer-registry.service connman.service telephony-daemon.service quickpanel.service indicator.service contacts-service.service launchpad-preload.service resourced.service tizenid.service crash-manager.service lbs-server.service secure-storage.service media-server.service data-provider-master.service messageportd.service dbus.service wrt-security-daemon.service deviced.service smack-rules.service dlog_logger.service sysinit.target basic.target Tizen-boot.target Tizen-system.target Tizen-runtime.target multi-user.target graphical.target

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 Kernel sysinit.target basic.target core-efl.target bluetooth-frwk.service tizen-fstrim-user.timer xresources.path download-provider.service tizen-initial-boot-done.service zbooting-done.service -service.service tizen-journal-flush.service launchpad-process-pool.service tizen-readahead-replay.service cbhm.service e17.service indicator.service scim.service xrdb.service Tizen-boot.target Tizen-system.target Tizen-runtime.target multi-user.target tizen-middleware.target .service pushd.service graphical.target

31 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 targets 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

32 Platform Bootup Kernel sysinit.target basic.target Tizen-boot.target
Systemd sysinit.target entry point basic.target .target vs .service .target; service grouping .service; process run Tizen-boot.target

33 Parsing Unit File – Example (1/8)
/usr/lib/systemd/system cat sysinit.target target to parse

34 Parsing Unit File – Example (2/8)
Website systemd download manpage

35 Parsing Unit File – Example (3/8)
Can search all functions, units, configurations of systemd enter target index

36 Parsing Unit File – Example (4/8)
target unit file

37 Parsing Unit File – Example (5/8)
Description on unit file options

38 Parsing Unit File – Example (6/8)

39 Parsing Unit File – Example (7/8)

40 Parsing Unit File – Example (8/8)
User-aware unit name = “System Initialization” If emergency is running, wait Run with local-fs.target, swap.target, Delayed until local-fs.target, swap.target, emergency.service, and emergency.target are started up. User can control service start and stop

41 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]; carries installation information for the unit systemctl enable will create a symlink of multi-user.target.wants

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


Download ppt "Tizen v2.3 Bootup."

Similar presentations


Ads by Google