SlideShare a Scribd company logo
QEMU
      in
Cross Building


Tetsuyuki Kobayashi

                      1
Who am I?

   20+ years involved in embedded systems
       10 years in real time OS, such as iTRON
       10 years in embedded Java Virtual Machine
       Now Gcc, Linux, QEMU, Android, …
   Blogs
       http://d.hatena.ne.jp/embedded/ (Personal)
       http://blog.kmckk.com/ (Corporate)
   Twitter
       @tetsu_koba
                                                     2
Today's topic

   About QEMU
   Native build vs Cross build
   Easy but too slow: building on
    system emulator
   Fast but too complex:
    Scratchbox
   Just simple : building on user
    mode QEMU

                                     3
Today's topic

   About QEMU
   Native build vs Cross build
   Easy but too slow: building on
    system emulator
   Fast but too complex:
    Scratchbox
   Just simple : building on user
    mode QEMU

                                     4
About QEMU

   http://wiki.qemu.org/
   QEMU is
    a generic and open source
    machine emulator
    and virtualizer.



                                5
QEMU is used …

   As virtualizer,
       KVM
       Xen
       VirtualBox
   Host CPU == Target CPU
       Today I don't focus on this.


                                       6
QEMU is used …

   As a system emulator,
   Host CPU != Target CPU
   Many open source projects such as:
       Android
       Maemo
       Symbian
       ARM port of Open Solaris
        ...
                                         7
QEMU has …

   Virtual disk.
   Many of virtual devices.
   Tiny Code Generator (TCG) to execute fast.
   Port redirector, Virtual network card.
   Bootloader to boot Linux kernel.
   gdbserver to connect gdb.
   …

                                                 8
User mode QEMU

   Emulate only user mode of linux.
   Not all system calls implemented,
    but enough for building.




                                        9
Today's topic

   About QEMU
   Native build vs Cross build
   Easy but too slow: building on
    system emulator
   Fast but too complex:
    Scratchbox
   Just simple : building on user
    mode QEMU

                                     10
Native build vs Cross build

   Native build – compile and run on
    the same machine.
   Cross build – compile and run on
    the different arch machine.
       Embedded system does not have enough
        CPU and memory for native building.


                                               11
Configure problem

   In many open source project
     $ configure
     $ make
     $ make install


    This suppose to be native build.
    Configure generate many small program
    and compile and run to check environment.

    This does not work on cross build.
Today's topic

   About QEMU
   Native build vs Cross build
   Easy but too slow: building on
    system emulator
   Fast but too complex:
    Scratchbox
   Just simple : building on user
    mode QEMU

                                     13
Building on system QEMU

   Apt-get works. Very easy to install
    compilers and libraries
   Too slow to compile
       Emulating the whole system including kernel.
       Cannot take advantage of SMP becase
        QEMU runs on single thread.
Today's topic

   About QEMU
   Native build vs Cross build
   Easy but too slow: building on
    system emulator
   Fast but too complex:
    Scratchbox
   Just simple : building on user
    mode QEMU

                                     15
ScratchBox

   Magical environment for cross
    building
   running ARM executable using user
    mode QEMU
   invoking the cross compiler on native



                                            16
ScratchBox 1

   http://www.scratchbox.org/
   Maemo project on Nokia
   mechanism
       chroot
       binfmt_misc
       scratch-box-aware tool chains




                                        17
ScratchBox 2

   http://www.freedesktop.org/wiki/Software/sbox2
   Another implementation of scratch box
   Tool chain agnostic
   Hosted by Freedesktop.org
   mechanism
       Wrap libc by PRELOAD magic of ld.so
       Hook system calls
       Insert QEMU when exec target binary
       Path name translation by LUA script      18
ScratchBox* is

   Pretty fast to compile
   Very hard to customize and
    troubleshooting




                                 19
Today's topic

   About QEMU
   Native build vs Cross build
   Easy but too slow: building on
    system emulator
   Fast but too complex:
    Scratchbox
   Just simple : building on user
    mode QEMU

                                     20
Let's try simpler way

   Just use user mode QEMU
   Use chroot and binfmt_misc
   Compiler running on QEMU, too




                                    21
binfmt_misc

   Mechanism to execute foreign executable.
   ex) Used in Wine for dos executable.

    $ cat /proc/sys/fs/binfmt_misc/qemu-arm
    enabled
    interpreter /usr/bin/qemu-arm-static
    flags: OC
    offset 0
    magic
    7f454c4601010100000000000000000002002800
    mask
    ffffffffffffff00fffffffffffffffffeffffff
    $

                                               22
Chroot

   Make dedicated directory tree
   Used for public ftp server to make
    sand box




                                         23
Static linked QEMU

   Nice idea to avoid conflict in chrooted target
    root file system
       Dynamically linked QEMU needs so many library
        files, which are likey conflict file names to target
        ones.
       Static linked QEMU is stand alone. Just copy one
        file to target root file system.
   I found this idea in rootstock script in Ubuntu


                                                               24
Just Try

   Make arm root file system by rootstock on
    Ubuntu 10.04
$ sudo apt-get install rootstock
$ mkdir arm-ubuntu
$ cd arm-ubuntu/
$ sudo rootstock --fqdn arm-lucid --login user
--password user
      It takes more than 10 minutes ...
$ mkdir root
$ cd root
$ sudo tar xvf ../armel-rootfs-201005031740.tgz


                                                  25
Just Try

$ ls
bin    dev home   lost+found   mnt   proc   sbin      srv   tmp   var
boot etc lib      media        opt   root   selinux   sys   usr
$ uname -m
x86_64




   $ sudo chroot . /bin/bash
   #
   # uname -m
   armv7l
                                                                        26
Build time comparison

   80min (on system QEMU)
   8min (user mode QEMU, make -j4)
   http://blog.kmckk.com/archives/2342452.html

    Not yet try on scratchbox.
    It would be faster if I could.



                                                  27
/proc

   ps command fails

# ps
Cannot find /proc/version - is /proc mounted?



   Don't worry. Mount /proc
# mount proc /proc -t proc
# ps
  PID TTY          TIME CMD
15434 ?        00:00:00 bash
15440 ?        00:00:00 ps
#

                                                28
Networking

   Failed to resolve name
   OK, just add ip address to /etc/hosts
    # cat /etc/hosts
    127.0.0.1 localhost ubuntu1004
    127.0.1.1 arm-lucid
    91.189.88.36 ports.ubuntu.com


    Then apt-get works. So far, it's enough.



                                               29
Distcc
   http://code.google.com/p/distcc/
   Preprocessing and linking locally.
   Compiling and assembling remotely.
   Invoke cross compiler remotely.
   Distcc will enhance build time.



                                         30
Q&A

   & Demo




      Thank you for listening!
      Any comments to blogs are welcome.
                                           31

More Related Content

PDF
Build your own embedded linux distributions by yocto project
PDF
SFO15-TR9: PSCI, ACPI (and UEFI to boot)
PDF
Dave Gilbert - KVM and QEMU
PDF
不揮発メモリ(NVDIMM)とLinuxの対応動向について
PDF
LCU14 500 ARM Trusted Firmware
PDF
Qemu Introduction
PDF
from Binary to Binary: How Qemu Works
Build your own embedded linux distributions by yocto project
SFO15-TR9: PSCI, ACPI (and UEFI to boot)
Dave Gilbert - KVM and QEMU
不揮発メモリ(NVDIMM)とLinuxの対応動向について
LCU14 500 ARM Trusted Firmware
Qemu Introduction
from Binary to Binary: How Qemu Works

What's hot (20)

PPTX
QEMU - Binary Translation
PDF
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
PDF
AMD EPYC™ Microprocessor Architecture
 
PDF
The Yocto Project
PDF
LCU13: An Introduction to ARM Trusted Firmware
PPTX
Le matériel informatique
PDF
SR-IOV: The Key Enabling Technology for Fully Virtualized HPC Clusters
PPTX
Bottom half in linux kernel
PDF
Trusted firmware deep_dive_v1.0_
PDF
7 hands on
PDF
Introduction to FreeRTOS
 
PDF
05.2 virtio introduction
PPTX
Unified Extensible Firmware Interface (UEFI)
PDF
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
PPT
Présentation des supports de stockage
PDF
Embedded Hypervisor for ARM
PDF
AMD: Where Gaming Begins
 
PDF
Qemu JIT Code Generator and System Emulation
PDF
XPDDS17: Reworking the ARM GIC Emulation & Xen Challenges in the ARM ITS Emu...
PDF
Linux kernel architecture
QEMU - Binary Translation
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
AMD EPYC™ Microprocessor Architecture
 
The Yocto Project
LCU13: An Introduction to ARM Trusted Firmware
Le matériel informatique
SR-IOV: The Key Enabling Technology for Fully Virtualized HPC Clusters
Bottom half in linux kernel
Trusted firmware deep_dive_v1.0_
7 hands on
Introduction to FreeRTOS
 
05.2 virtio introduction
Unified Extensible Firmware Interface (UEFI)
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Présentation des supports de stockage
Embedded Hypervisor for ARM
AMD: Where Gaming Begins
 
Qemu JIT Code Generator and System Emulation
XPDDS17: Reworking the ARM GIC Emulation & Xen Challenges in the ARM ITS Emu...
Linux kernel architecture
Ad

Viewers also liked (8)

PDF
Android On Ubuntu for developer
PDF
Logging system of Android
PDF
Froyo DalvikVM JIT
PDF
Reusing your existing software on Android
PDF
Using QEMU for cross development
PDF
Android ipm 20110409
PDF
Logging system of Android
PDF
Tricky implementation of Go ARM soft float
Android On Ubuntu for developer
Logging system of Android
Froyo DalvikVM JIT
Reusing your existing software on Android
Using QEMU for cross development
Android ipm 20110409
Logging system of Android
Tricky implementation of Go ARM soft float
Ad

Similar to QEMU in Cross building (20)

PDF
PDF
Development platform virtualization using qemu
PDF
Lightweight Virtualization with Linux Containers and Docker I YaC 2013
PDF
Lightweight Virtualization with Linux Containers and Docker | YaC 2013
PDF
RMLL / LSM 2009
PDF
Rmll Virtualization As Is Tool 20090707 V1.0
PDF
Unikernel User Summit 2015: Getting started in unikernels using the rump kernel
PDF
Introduction to Docker and Containers
PPT
PDF
Running QEMU Inside Browser.............
PDF
Running QEMU Inside Browser.............
PDF
[CNCF TAG-Runtime 2022-10-06] Lima
PDF
Virtual Infrastructure
KEY
the NML project
PDF
Introducing Docker
PDF
"Lightweight Virtualization with Linux Containers and Docker". Jerome Petazzo...
PDF
[Podman Special Event] Kubernetes in Rootless Podman
PDF
NFD9 - Matt Peterson, Data Center Operations
PPT
Qemu - Raspberry | while42 Singapore #2
ODP
Kvm and libvirt
Development platform virtualization using qemu
Lightweight Virtualization with Linux Containers and Docker I YaC 2013
Lightweight Virtualization with Linux Containers and Docker | YaC 2013
RMLL / LSM 2009
Rmll Virtualization As Is Tool 20090707 V1.0
Unikernel User Summit 2015: Getting started in unikernels using the rump kernel
Introduction to Docker and Containers
Running QEMU Inside Browser.............
Running QEMU Inside Browser.............
[CNCF TAG-Runtime 2022-10-06] Lima
Virtual Infrastructure
the NML project
Introducing Docker
"Lightweight Virtualization with Linux Containers and Docker". Jerome Petazzo...
[Podman Special Event] Kubernetes in Rootless Podman
NFD9 - Matt Peterson, Data Center Operations
Qemu - Raspberry | while42 Singapore #2
Kvm and libvirt

More from Tetsuyuki Kobayashi (20)

PDF
some topic of ffmpeg
PDF
New VIdeo CODEC AV1
PDF
Try new transport protocol SRT (ver. 2)
PDF
Try new transport protocol SRT
PDF
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
PDF
WebOS Open Source Edition を試してみた
PDF
Linuxのユーザーランドをinitから全てまるごとgolangで書く
PDF
組み込みLinuxでのGolangのススメ(Go con版)
PDF
組み込みLinuxでのGolangのススメ
PDF
ARM 64bit has come!
PDF
Virtual memory 20070222-en
PDF
Simple and efficient way to get the last log using MMAP
PDF
Tips of Malloc & Free
PDF
Basic of virtual memory of Linux
PDF
PDF
ADB(Android Debug Bridge): How it works?
PDF
Tweaking Google TV emulator
ODP
Inter-process communication of Android
PDF
Android is NOT just 'Java on Linux'
PDF
Init of Android
some topic of ffmpeg
New VIdeo CODEC AV1
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
WebOS Open Source Edition を試してみた
Linuxのユーザーランドをinitから全てまるごとgolangで書く
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ
ARM 64bit has come!
Virtual memory 20070222-en
Simple and efficient way to get the last log using MMAP
Tips of Malloc & Free
Basic of virtual memory of Linux
ADB(Android Debug Bridge): How it works?
Tweaking Google TV emulator
Inter-process communication of Android
Android is NOT just 'Java on Linux'
Init of Android

QEMU in Cross building

  • 1. QEMU in Cross Building Tetsuyuki Kobayashi 1
  • 2. Who am I?  20+ years involved in embedded systems  10 years in real time OS, such as iTRON  10 years in embedded Java Virtual Machine  Now Gcc, Linux, QEMU, Android, …  Blogs  http://d.hatena.ne.jp/embedded/ (Personal)  http://blog.kmckk.com/ (Corporate)  Twitter  @tetsu_koba 2
  • 3. Today's topic  About QEMU  Native build vs Cross build  Easy but too slow: building on system emulator  Fast but too complex: Scratchbox  Just simple : building on user mode QEMU 3
  • 4. Today's topic  About QEMU  Native build vs Cross build  Easy but too slow: building on system emulator  Fast but too complex: Scratchbox  Just simple : building on user mode QEMU 4
  • 5. About QEMU  http://wiki.qemu.org/  QEMU is a generic and open source machine emulator and virtualizer. 5
  • 6. QEMU is used …  As virtualizer,  KVM  Xen  VirtualBox  Host CPU == Target CPU  Today I don't focus on this. 6
  • 7. QEMU is used …  As a system emulator,  Host CPU != Target CPU  Many open source projects such as:  Android  Maemo  Symbian  ARM port of Open Solaris  ... 7
  • 8. QEMU has …  Virtual disk.  Many of virtual devices.  Tiny Code Generator (TCG) to execute fast.  Port redirector, Virtual network card.  Bootloader to boot Linux kernel.  gdbserver to connect gdb.  … 8
  • 9. User mode QEMU  Emulate only user mode of linux.  Not all system calls implemented, but enough for building. 9
  • 10. Today's topic  About QEMU  Native build vs Cross build  Easy but too slow: building on system emulator  Fast but too complex: Scratchbox  Just simple : building on user mode QEMU 10
  • 11. Native build vs Cross build  Native build – compile and run on the same machine.  Cross build – compile and run on the different arch machine.  Embedded system does not have enough CPU and memory for native building. 11
  • 12. Configure problem  In many open source project $ configure $ make $ make install This suppose to be native build. Configure generate many small program and compile and run to check environment. This does not work on cross build.
  • 13. Today's topic  About QEMU  Native build vs Cross build  Easy but too slow: building on system emulator  Fast but too complex: Scratchbox  Just simple : building on user mode QEMU 13
  • 14. Building on system QEMU  Apt-get works. Very easy to install compilers and libraries  Too slow to compile  Emulating the whole system including kernel.  Cannot take advantage of SMP becase QEMU runs on single thread.
  • 15. Today's topic  About QEMU  Native build vs Cross build  Easy but too slow: building on system emulator  Fast but too complex: Scratchbox  Just simple : building on user mode QEMU 15
  • 16. ScratchBox  Magical environment for cross building  running ARM executable using user mode QEMU  invoking the cross compiler on native 16
  • 17. ScratchBox 1  http://www.scratchbox.org/  Maemo project on Nokia  mechanism  chroot  binfmt_misc  scratch-box-aware tool chains 17
  • 18. ScratchBox 2  http://www.freedesktop.org/wiki/Software/sbox2  Another implementation of scratch box  Tool chain agnostic  Hosted by Freedesktop.org  mechanism  Wrap libc by PRELOAD magic of ld.so  Hook system calls  Insert QEMU when exec target binary  Path name translation by LUA script 18
  • 19. ScratchBox* is  Pretty fast to compile  Very hard to customize and troubleshooting 19
  • 20. Today's topic  About QEMU  Native build vs Cross build  Easy but too slow: building on system emulator  Fast but too complex: Scratchbox  Just simple : building on user mode QEMU 20
  • 21. Let's try simpler way  Just use user mode QEMU  Use chroot and binfmt_misc  Compiler running on QEMU, too 21
  • 22. binfmt_misc  Mechanism to execute foreign executable.  ex) Used in Wine for dos executable.  $ cat /proc/sys/fs/binfmt_misc/qemu-arm enabled interpreter /usr/bin/qemu-arm-static flags: OC offset 0 magic 7f454c4601010100000000000000000002002800 mask ffffffffffffff00fffffffffffffffffeffffff $ 22
  • 23. Chroot  Make dedicated directory tree  Used for public ftp server to make sand box 23
  • 24. Static linked QEMU  Nice idea to avoid conflict in chrooted target root file system  Dynamically linked QEMU needs so many library files, which are likey conflict file names to target ones.  Static linked QEMU is stand alone. Just copy one file to target root file system.  I found this idea in rootstock script in Ubuntu 24
  • 25. Just Try  Make arm root file system by rootstock on Ubuntu 10.04 $ sudo apt-get install rootstock $ mkdir arm-ubuntu $ cd arm-ubuntu/ $ sudo rootstock --fqdn arm-lucid --login user --password user It takes more than 10 minutes ... $ mkdir root $ cd root $ sudo tar xvf ../armel-rootfs-201005031740.tgz 25
  • 26. Just Try $ ls bin dev home lost+found mnt proc sbin srv tmp var boot etc lib media opt root selinux sys usr $ uname -m x86_64 $ sudo chroot . /bin/bash # # uname -m armv7l 26
  • 27. Build time comparison  80min (on system QEMU)  8min (user mode QEMU, make -j4)  http://blog.kmckk.com/archives/2342452.html Not yet try on scratchbox. It would be faster if I could. 27
  • 28. /proc  ps command fails  # ps Cannot find /proc/version - is /proc mounted?   Don't worry. Mount /proc # mount proc /proc -t proc # ps PID TTY TIME CMD 15434 ? 00:00:00 bash 15440 ? 00:00:00 ps # 28
  • 29. Networking  Failed to resolve name  OK, just add ip address to /etc/hosts # cat /etc/hosts 127.0.0.1 localhost ubuntu1004 127.0.1.1 arm-lucid 91.189.88.36 ports.ubuntu.com Then apt-get works. So far, it's enough. 29
  • 30. Distcc  http://code.google.com/p/distcc/  Preprocessing and linking locally.  Compiling and assembling remotely.  Invoke cross compiler remotely.  Distcc will enhance build time. 30
  • 31. Q&A  & Demo Thank you for listening! Any comments to blogs are welcome. 31