1 / 42

Tizen v2.3 Bootup

Tizen v2.3 Bootup. Contents. Bootloader(U-boot) Bootloader Overview U-boot Systemd Systemd Overview Platform Bootup Parsing Unit File. Bootloader(U-boot). Tizen Bootup Overview. Bootloader Pass Machine ID and the boot arguments to kernel. Power on. ROM code. Booting device.

posborne
Télécharger la présentation

Tizen v2.3 Bootup

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tizen v2.3 Bootup

  2. Contents • Bootloader(U-boot) • Bootloader Overview • U-boot • Systemd • 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 ? • 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. OS Kernel Pre-Bootloader First-Stage Bootloader Second-Stage Bootloader

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

  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 toDRAM • Jump to operating system

  9. U-boot Directory Structure /u-boot /u-boot Machine/arch independent API Example code for standalone applications examples api Architecture specific files Filesystem code (cramfs, ext2, jffs2, etc.) arch fs Board dependent files Header files board include Misc architecture independent functions Files generic to all architectures common lib Code for disk drive partition handling Networking code disk net Documentation Power on self test doc post Commonly used device drivers drivers Real time clock drivers rtc 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. cpu_init_crit Invalidate and disable Instruction & data Cache Disable MMU U-boot Code Sequence Reset CPU and Hardwarecpu/armv7/start.S _start() Setup SP for Early Board Setup Environment (ASM->C) Disable IRQ &FIQ. Switch to supervisor mode cpu/armv7/start.Sreset() General Relocation arm/lib/crt0.S_main() cpu/armv7/start.Srelocate_code() Early Board Setup arm/lib/crt0.Sboard_init_f() Low Level Initialization Copy Binary to RAM Fix Relocation Calculate Addresses (SP, Dest, GD) for Relocation Clear BSS Setup SP for Common Board Setup Setup GD and JUMP toFinal Board Setup lowlevel_init arm/lib/crt0.Sboard_init_r() board/samsung/lowlevel_init.Slowlevel_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    0x27051956 /* 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] • Interruptinitialization • init_IRQ() [/arch/arm/kernel/irq.c] • sotfirq_init() [/kernel/sotfirq.c] • Schedulerinitialization • sched_init() [/kernel/sched.c] • Timerinitialization • time_init() [/arch/XXX/kernel/time.c] • Consoleinitialization • console_init() [/driver/char/tty_io.c] • Moduleinitialization • 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 • userspacelaunch (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 platform • Ver. 43 (download http://www.freedesktop.org/software/systemd/) • 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 • http://0pointer.de/blog/projects/systemd.html

  23. Systemd Architecture

  24. Systemd Architecture • systemd Utility • 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 • 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.mountsystemd-modules-load.service dev-mqueue.mountsystemd-sysctl.service init-conf.servicesystemd-tmpfiles-setup-dev.service kmod-static-nodes.servicesystemd-tmpfiles-setup.service sys-fs-fuse-connections.mountsystemd-udevd.service sys-kernel-config.mountsystemd-udev-trigger.service sys-kernel-debug.mountsystemd-update-utmp.service systemd-ask-password-console.pathtizen-debug-off.service systemd-journald.servicetizen-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 wm_ready.service Tizen-boot.target Tizen-system.target Tizen-runtime.target tizen-system.target boot-animation.service late-tizen-system.service wait-lock.service check-mount.service silent-animation.service tizen-middleware.target multi-user.target wrt_launchpad_daemon@app.service 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 msg-server.service alarm-server.service calendar-serviced.service nfc-manager.service pkgmgr_recovery.service pulseaudio.service connman.service quickpanel.service contacts-service.service resourced.service crash-manager.service secure-storage.service data-provider-master.service dbus.service deviced.service smack-rules.service dlog_logger.service sound-server.path getty.target starter.service ghost.service systemd-ask-password-wall.path gstreamer-registry.service telephony-daemon.service indicator.service launchpad-preload.service tizenid.service lbs-server.service media-server.service messageportd.service wrt-security-daemon.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 email-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 email.service pushd.service graphical.target

  31. Platform Bootup • Systemd • Control is moved from initramfs tosystemd of Tizen platform • Run hardware init and fs mount, etc services • Bootup process run several units (.target) • Different targets can be run in parallel • Manylinux 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 Systemd sysinit.target entry point basic.target .target vs .service • .target; servicegrouping • .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 • http://www.freedesktop.org/wiki/Software/systemd/ • systemd download • http://www.freedesktop.org/software/systemd/ 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]; processoptions • 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 http://www.freedesktop.org/wiki/Software/systemd/ • systemd FAQ (written by developer) • http://0pointer.de/blog/projects/the-biggest-myths

More Related