40
Kexec Ready for Embedded Linux Magnus Damm [email protected] Renesas Electronics Corp. April 2010 Magnus Damm ([email protected]) Kexec April 2010 1 / 40

Kexec - Ready for Embedded Linux

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Kexec - Ready for Embedded Linux

KexecReady for Embedded Linux

Magnus [email protected]

Renesas Electronics Corp.

April 2010

Magnus Damm ([email protected]) Kexec April 2010 1 / 40

Page 2: Kexec - Ready for Embedded Linux

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 2 / 40

Page 3: Kexec - Ready for Embedded Linux

Bootloader Basics

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 3 / 40

Page 4: Kexec - Ready for Embedded Linux

Bootloader Basics Overview & Use Cases

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 4 / 40

Page 5: Kexec - Ready for Embedded Linux

Bootloader Basics Overview & Use Cases

Overview

Load Kernel

Setup Hardware

Start Kernel

Magnus Damm ([email protected]) Kexec April 2010 5 / 40

Page 6: Kexec - Ready for Embedded Linux

Bootloader Basics Overview & Use Cases

Use Cases

Development:I Load Kernel Over Ethernet/USB

Standalone:I Load Kernel From NAND/NOR/MMC/USB

Magnus Damm ([email protected]) Kexec April 2010 6 / 40

Page 7: Kexec - Ready for Embedded Linux

Bootloader Basics Inside the Bootloader

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 7 / 40

Page 8: Kexec - Ready for Embedded Linux

Bootloader Basics Inside the Bootloader

Inside the Bootloader

Hardware Setup (Assembly + C):I Setup CS Memory WindowsI Initialize Caches & MMUI Configure Clocks & GPIOsI Setup System RAMI Configure I/O Devices

Magnus Damm ([email protected]) Kexec April 2010 8 / 40

Page 9: Kexec - Ready for Embedded Linux

Bootloader Basics Inside the Bootloader

Inside the Bootloader

Load Kernel (C only):I “Driver Model”I Network Stack / FilesystemI Kernel File Format Parser

Start Kernel (C + Assembly):I Prepare Kernel ParametersI Execute Kernel

Magnus Damm ([email protected]) Kexec April 2010 9 / 40

Page 10: Kexec - Ready for Embedded Linux

Bootloader Basics Four Examples

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 10 / 40

Page 11: Kexec - Ready for Embedded Linux

Bootloader Basics Four Examples

Example 1: Good Old PC

BIOS:I Located in ROM / NOR FlashI Performs Hardware SetupI Loads Bootloader from HDD

Bootloader:I Executes from RAMI Loads Kernel from HDD

Magnus Damm ([email protected]) Kexec April 2010 11 / 40

Page 12: Kexec - Ready for Embedded Linux

Bootloader Basics Four Examples

Example 2: Embedded NOR Flash

[SoC + RAM + NOR Flash + I/O]

Bootloader:I Located in NOR FlashI Performs Hardware SetupI Loads Kernel from NOR Flash

Magnus Damm ([email protected]) Kexec April 2010 12 / 40

Page 13: Kexec - Ready for Embedded Linux

Bootloader Basics Four Examples

Example 3: Embedded NOR Flash + NAND / MMC

[SoC + RAM + NOR Flash + NAND Flash / MMC + I/O]

Bootloader:I Located in NOR FlashI Performs Hardware SetupI Loads Kernel from NAND Flash / MMC

Magnus Damm ([email protected]) Kexec April 2010 13 / 40

Page 14: Kexec - Ready for Embedded Linux

Bootloader Basics Four Examples

Example 4: Embedded NAND Flash / MMC

[SoC + RAM + NAND Flash / MMC + I/O]

Mask ROM:I Located inside SoCI Loads Bootloader from NAND Flash / MMC

Bootloader:I Executes from On-chip RAMI Performs Hardware SetupI Loads Kernel from NAND Flash / MMC

Magnus Damm ([email protected]) Kexec April 2010 14 / 40

Page 15: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 15 / 40

Page 16: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Introduction & Motivation

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 16 / 40

Page 17: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Introduction & Motivation

What is Kexec?

“kexec is a system call that implements the abilityto shutdown your current kernel, and to startanother kernel. It is like a reboot but it isindepedent of the system firmware...”

Configuration help text in Linux-2.6.17

Magnus Damm ([email protected]) Kexec April 2010 17 / 40

Page 18: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Introduction & Motivation

What is Kexec?

Kexec is a combination of kernel code and user space code:I Linux kernel support available through CONFIG_KEXEC.

I kexec-tools provides the user space tool kexec.

Simple Kexec example to reboot into “zImage”:# kexec -l zImage -append="console=ttySC0"# kexec -e

Many thanks to:I Eric W. Biederman - Kexec and kexec-tools author.I Simon Horman - kexec-tools maintainer.I Tony Lindgren - Kexec fixes for ARM.

Magnus Damm ([email protected]) Kexec April 2010 18 / 40

Page 19: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Introduction & Motivation

So what is a Kexec-based Bootloader?

A Kexec-based bootloader is a combination of:I Hardware setup code (not mandatory).I A Linux kernel configured with CONFIG_KEXEC=y.

I User space with kexec-tools.

Magnus Damm ([email protected]) Kexec April 2010 19 / 40

Page 20: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Introduction & Motivation

Motivation

SH-Mobile board - sh7724-based “kfr2r09”

I Handset prototypeI USB Gadget-only hardware designI Micro-SD slotI Upstream kernel driver for USB-GadgetI No U-boot port, no U-boot drivers

Magnus Damm ([email protected]) Kexec April 2010 20 / 40

Page 21: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Introduction & Motivation

Motivation - U-boot vs the Kernel

Question: Add U-boot support or extend the kernel?

U-boot and Barebox:I EstablishedI Low barrier of entryI Small

The Linux Kernel:I Good hardware supportI Release management

Magnus Damm ([email protected]) Kexec April 2010 21 / 40

Page 22: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Hardware Setup Code

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 22 / 40

Page 23: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Hardware Setup Code

Hardware Setup Code for SH - Overview

“romImage” for SH:I Includes all setup code needed to boot the systemI Supported by the boards kfr2r09 and ecovec24

I Use “make romImage” to build imageI Burn to the NOR flash at the reset vectorI Merged in linux-2.6.31

Magnus Damm ([email protected]) Kexec April 2010 23 / 40

Page 24: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Hardware Setup Code

Hardware Setup Code for SH - Files

“romImage” files:I arch/sh/include/mach-xxx/mach/partner-jet-setup.txt - debug scriptI arch/sh/include/mach-xxx/mach/romimage.h - board setup codeI arch/sh/boot/romimage/ - romImage wrapper for zImageI arch/sh/boot/compressed/ - standard zImageI arch/sh/configs/ - romImage configurations

Magnus Damm ([email protected]) Kexec April 2010 24 / 40

Page 25: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Kernel Configuration & Tuning

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 25 / 40

Page 26: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Kernel Configuration & Tuning

Kernel Configuration & Tuning - Iteration 1 - L-size

Start with an unoptimized kernel:I Use the defconfig for your board, compile-in driversI Compile-in the kernel cmdline using

CONFIG_CMDLINE_OVERWRITE=yI Pass “quiet” on the kernel cmdline to silence the kernelI Point out user space with CONFIG_INITRAMFS_SOURCEI Set CONFIG_INITRAMFS_COMPRESSION_NONE=yI Play around with CONFIG_KERNEL_GZIP/BZIP2/LZMA/LZO

Magnus Damm ([email protected]) Kexec April 2010 26 / 40

Page 27: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Kernel Configuration & Tuning

Kernel Configuration & Tuning - Iteration 2 - M-size

Base on top of Iteration 1 and...I Tune the kernel configuration for your use case

I Remove unused subsystems, filesystems and driversI Only one timer driver is needed

I CONFIG_SLOB=y, CONFIG_TINY_RCU=yI Remember to keep CONFIG_KEXEC=y

Magnus Damm ([email protected]) Kexec April 2010 27 / 40

Page 28: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Kernel Configuration & Tuning

Kernel Configuration & Tuning - Iteration 3 - S-size

Base on top of Iteration 2 and...I Disable module supportI Disable even more kernel features (warning!)

I CONFIG_EMBEDDED, CONFIG_BUG, CONFIG_PRINTK

Magnus Damm ([email protected]) Kexec April 2010 28 / 40

Page 29: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Optimizing User Space

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 29 / 40

Page 30: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Optimizing User Space

Optimizing User Space - Iteration 1

Start with an unoptimized initramfs:I Use an existing cross toolchain (perhaps glibc to keep it simple)I Build static busybox binary using allyesconfigI Build a static kexec binary from kexec-tools

I Hack up configuration files and scriptsI Combine with the kernel using CONFIG_INITRAMFS_SOURCE

Uncompressed initramfs size: ~2.6 MiB (~300 Apps, sh4)

With L-size romImage, compressed with LZMA: ~2.9 MiB (~2s)

With L-size romImage, compressed with LZO: ~3.7 MiB (~1.5s)

Magnus Damm ([email protected]) Kexec April 2010 30 / 40

Page 31: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Optimizing User Space

Optimizing User Space - Iteration 2

Base on top of Iteration 1 and...I Trim the busybox configuration to save spaceI Remember to keep udhcpc and tftp if you netbootI For speedup, replace mdev with kernel optionCONFIG_DEVTMPFS=y

Uncompressed initramfs size: ~1.6 MiB (~60 Apps, sh4)

With M-size romImage, compressed with LZMA: ~2.0 MiB (~1.5s)

With M-size romImage, compressed with LZO: ~2.6 MiB (~1s)

Magnus Damm ([email protected]) Kexec April 2010 31 / 40

Page 32: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Optimizing User Space

Optimizing User Space - Iteration 3

Base on top of Iteration 2 and...I Disable further busybox appletsI Hack busybox and kexec-tools into a single static binary

Uncompressed initramfs size: ~1 MiB (~30 Apps, sh4)

With S-size romImage, compressed with LZMA: ~1.0 MiB (~1s)

With S-size romImage, compressed with LZO: ~1.4 MiB (~0.5s)

Magnus Damm ([email protected]) Kexec April 2010 32 / 40

Page 33: Kexec - Ready for Embedded Linux

Kexec-based Bootloaders Optimizing User Space

Optimizing User Space

Keep on interating...I Switch to a smaller libcI Remove dead code

For quicker turn around time, use zImage to test user space

Magnus Damm ([email protected]) Kexec April 2010 33 / 40

Page 34: Kexec - Ready for Embedded Linux

Real World Examples

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 34 / 40

Page 35: Kexec - Ready for Embedded Linux

Real World Examples SH-Based Boards

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 35 / 40

Page 36: Kexec - Ready for Embedded Linux

Real World Examples SH-Based Boards

SH-Based Board MS7724

SH-Mobile board “MS7724” aka “Ecovec24”:I romImage burned to reset vector in NOR FlashI Loads kernel over Ethernet using CONFIG_SH_ETH=yI USB Storage support with CONFIG_USB_R8A66597_HCD=yI LCD splash screen using CONFIG_FB_SH_MOBILE_LCDC=y

Magnus Damm ([email protected]) Kexec April 2010 36 / 40

Page 37: Kexec - Ready for Embedded Linux

Real World Examples SH-Based Boards

SH-Based Board kfr2r09

SH-Mobile board - sh7724-based “kfr2r09”:I romImage burned to reset vector in NOR FlashI Loads kernel over USB Gadget using

CONFIG_USB_CDC_COMPOSITE=yI Loads kernel from Micro-SD using

CONFIG_MFD_SH_MOBILE_SDHI=y

Magnus Damm ([email protected]) Kexec April 2010 37 / 40

Page 38: Kexec - Ready for Embedded Linux

Real World Examples ARM-Based Boards

Outline

Bootloader BasicsOverview & Use CasesInside the BootloaderFour Examples

Kexec-based BootloadersIntroduction & MotivationHardware Setup CodeKernel Configuration & TuningOptimizing User Space

Real World ExamplesSH-Based BoardsARM-Based Boards

Magnus Damm ([email protected]) Kexec April 2010 38 / 40

Page 39: Kexec - Ready for Embedded Linux

Real World Examples ARM-Based Boards

ARM-Based Boards G3EVM & G4EVM

SH-Mobile ARM Boards G3EVM & G4EVM:I U-boot burned to reset vector in NOR FlashI U-boot starts uImage kernel from NOR FlashI uImage has USB Host using CONFIG_USB_R8A66597_HCD=yI uImage supports boot over USB Ethernet adapter

Magnus Damm ([email protected]) Kexec April 2010 39 / 40

Page 40: Kexec - Ready for Embedded Linux

Summary

Summary

I From power-on to shell prompt in about a second.I Unoptimized romImage needs ~4 MiB FlashI Optimized romImage needs ~1 MiB FlashI Size not an issue with NAND Flash / MMC Boot.

Magnus Damm ([email protected]) Kexec April 2010 40 / 40