Using QEMU
       for
Cross Development


  Tetsuyuki Kobayashi

     Kyoto Microcomputer Co., Ltd.   1
Let's use QEMU
                    to boost your project


               Real system : System emulator
                          =
                    Atoms : Bits

                            This is what I impress today.
                            Take advantage of 'bits'!


                                    Kyoto Microcomputer Co., Ltd.   2
”Being Digital” by Nicholas Negroponte
 http://archives.obs-us.com/obs/english/books/nn/ch01c01.htm
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
                       Kyoto Microcomputer Co., Ltd.   3
Today's topic

   What is QEMU
   Atoms vs Bits
   QEMU is NOT good for …
   QEMU is GOOD for …
   Practices (from KMC blog)





           Kyoto Microcomputer Co., Ltd.   4
About QEMU

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



                     Kyoto Microcomputer Co., Ltd.   5
QEMU is used …

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



                        Kyoto Microcomputer Co., Ltd.   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
        ...
                       Kyoto Microcomputer Co., Ltd.   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.
   ...

                     Kyoto Microcomputer Co., Ltd.   8
QEMU is *NOT* …

   Cycle accurate simulator (which is
    usually used for H/W development).
   So QEMU is not good for developing device
    driver which have to take account of accurate
    cycles.




                    Kyoto Microcomputer Co., Ltd.   9
License

   The whole QEMU is GPL.
   The QEMU virtual CPU core library (libqemu.a)
    is LGPL.
   TCG is BSD like license.
   Each virtual hardware has their own license.
       Check the source file.
   QEMU is a trademark of Fabrice Bellard.


                        Kyoto Microcomputer Co., Ltd.   10
Atoms vs Bits

   Developing embedded system require real
    system (= the physical board).
       Because the GOAL is there.



   System emulator is good complement for it.



   System emulator is 'bits', so free from any
    physical limitation.
   I mention QEMU for the system emulator.
                      Kyoto Microcomputer Co., Ltd.   11
How to get

   The physical board needs money to buy.
       Some special board can not buy because of dis-
        continue.



   QEMU does not need any money to get.




                       Kyoto Microcomputer Co., Ltd.     12
Footprint

   The physical board needs space to put.
       No space for a dozen of boards on your desk.



   QEMU does not need any desk space.
       (but disk space.)




                       Kyoto Microcomputer Co., Ltd.   13
Portability (in Physical)

   Bring the physical board and set it up is a work.
       The board might be crash in trouble.



   You are happy to bring QEMU in your USB key.
   Or you can transfer it via broad band network.




                       Kyoto Microcomputer Co., Ltd.   14
Duplication & Distribution

   The physical board can not be duplicate.



   You can duplicate your QEMU as many as you
    like and distribute them.
       You might ask for experts to take a look your
        problem on QEMU.




                        Kyoto Microcomputer Co., Ltd.   15
QEMU is *NOT* good for

   Performance evaluation.
   Especially SMP mode.
       SMP is simulated in single thread, not parallel.
       Deadly slow.
   Interesting session about QEMU multi core
       Japan Technical Jamboree24, Dec 2008
       CELF_JTJ24_qemu-multicore_English.pdf
       http://tree.celinuxforum.org/CelfPubWiki/JapanTechnicalJamboree24


                             Kyoto Microcomputer Co., Ltd.                  16
QEMU is *NOT* good for

   developing a device driver for a
    *NEW* device.
       Before, you need the accurate virtual device for the
        device.
       You have to develop a device driver with REAL
        device at first. Then you can develop virtual device
        with the device driver.




                        Kyoto Microcomputer Co., Ltd.          17
QEMU is *NOT* good for

   Compiling a huge mount of source
    code.
       Too slow for compiling.
       It takes more than one night to compile Linux
        kernel.




                        Kyoto Microcomputer Co., Ltd.   18
QEMU is GOOD for

   Learning.
       Even if you tweak too much to break, you lose
        nothing.
       Not only for beginners. Experts may examine the
        latest Linux kernel except for x86/x86_64, using
        QEMU.




                       Kyoto Microcomputer Co., Ltd.       19
QEMU is GOOD for

   Developing applications.
       without the real system.
       Android SDK is a perfect example.
   also good for designers to evaluate UI.




                        Kyoto Microcomputer Co., Ltd.   20
QEMU is GOOD for

   Testing.
       Fault injection by the virtual device.
       You can duplicate as many as you like and test
        them in parallel.
       Still need testing on real system.




                         Kyoto Microcomputer Co., Ltd.   21
Practice #1

       Following blog pages are written in Japanese. Try
        machine translation such as Google. It will work.
   Building QEMU from source archive
       QEMU requires zlib and SDL to build.
       http://blog.kmckk.com/archives/2223793.html
   Net-installing Debian on QEMU
       Don't use obsolete installer.
       http://blog.kmckk.com/archives/2233167.html

                       Kyoto Microcomputer Co., Ltd.        22
Practice #2

   Rebuilding kernel from Debian source package
       Get the source package and extract and patch it on
        ARM QEMU.
       Do compiling on PC Linux.
       QEMU system emulator is too slow to compile
        kernel.
       http://blog.kmckk.com/archives/2237994.html
Practice #3

   How to setup NFS server for QEMU
       Need ”insecure” option for NFS because QEMU
        redirect NFS port.
       http://blog.kmckk.com/archives/2257952.html




                       Kyoto Microcomputer Co., Ltd.   24
Practice #4

   Booting Debian in NFS root on ARM QEMU
       Booting from NFS root is good for early-stage
        developing.
                   You can read/write target file system any time.
                   You can boot kernel before implementing storage
                     device.
                   You don't have to care about size of storage.
       http://blog.kmckk.com/archives/2257962.html
Practice #5

   Build latest kernel in kernel.org and try SMP
    mode
       Finally the latest kernel successfully ran.
       versatile_defconfig remains old. It need updated.
       You can try another virtual board easily on QEMU.
       SMP implementation of QEMU is just simple and
        can not run fast.
       http://blog.kmckk.com/archives/2333826.html
Practice #6

   Try ARM Ubuntu using QEMU
       Ubuntu 9.04 is built for ARMv5TE.
       Ubuntu 9.10, ARMv6.
       Ubuntu 10.04, ARMv7 Thumb2.
       Debian, ARMv4T
       Rootstock script is nice and easy to build Ubuntu
        root file system.
       http://blog.kmckk.com/archives/2339128.html
Practice #7

   Using debugger with QEMU
       Dive into QEMU itself using gdb.
       Connect gdb to target machine of QEMU.
       Debug both the target and QEMU itself using 2
        gdbs.
       Another debugger for QEMU.
       http://blog.kmckk.com/archives/2363473.html
Other topics

   TCG and QEMU internals
       http://blog.kmckk.com/archives/2067157.html
       http://blog.kmckk.com/archives/2067178.html
       http://blog.kmckk.com/archives/2067210.html
   Using user mode emulation of QEMU + binfmt
    + chroot to self-build
       http://blog.kmckk.com/archives/2342452.html



                       Kyoto Microcomputer Co., Ltd.   29
Q&A

   & Demo




      Thank you for listening!
      Any comments to blogs are welcome.
                 Kyoto Microcomputer Co., Ltd.   30
One more thing ...




KMC PARTNER debugger for QEMU
Breaking at do_execve in linux kernel running on Android emulator.


                    Kyoto Microcomputer Co., Ltd.                    31

Using QEMU for cross development

  • 1.
    Using QEMU for Cross Development Tetsuyuki Kobayashi Kyoto Microcomputer Co., Ltd. 1
  • 2.
    Let's use QEMU to boost your project Real system : System emulator = Atoms : Bits This is what I impress today. Take advantage of 'bits'! Kyoto Microcomputer Co., Ltd. 2 ”Being Digital” by Nicholas Negroponte http://archives.obs-us.com/obs/english/books/nn/ch01c01.htm
  • 3.
    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 Kyoto Microcomputer Co., Ltd. 3
  • 4.
    Today's topic  What is QEMU  Atoms vs Bits  QEMU is NOT good for …  QEMU is GOOD for …  Practices (from KMC blog)  Kyoto Microcomputer Co., Ltd. 4
  • 5.
    About QEMU  http://wiki.qemu.org/  QEMU is a generic and open source machine emulator and virtualizer. Kyoto Microcomputer Co., Ltd. 5
  • 6.
    QEMU is used…  As virtualizer,  KVM  Xen  VirtualBox  Host CPU == Target CPU  Today I don't focus on this. Kyoto Microcomputer Co., Ltd. 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  ... Kyoto Microcomputer Co., Ltd. 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.  ... Kyoto Microcomputer Co., Ltd. 8
  • 9.
    QEMU is *NOT*…  Cycle accurate simulator (which is usually used for H/W development).  So QEMU is not good for developing device driver which have to take account of accurate cycles. Kyoto Microcomputer Co., Ltd. 9
  • 10.
    License  The whole QEMU is GPL.  The QEMU virtual CPU core library (libqemu.a) is LGPL.  TCG is BSD like license.  Each virtual hardware has their own license.  Check the source file.  QEMU is a trademark of Fabrice Bellard. Kyoto Microcomputer Co., Ltd. 10
  • 11.
    Atoms vs Bits  Developing embedded system require real system (= the physical board).  Because the GOAL is there.   System emulator is good complement for it.   System emulator is 'bits', so free from any physical limitation.  I mention QEMU for the system emulator. Kyoto Microcomputer Co., Ltd. 11
  • 12.
    How to get  The physical board needs money to buy.  Some special board can not buy because of dis- continue.   QEMU does not need any money to get. Kyoto Microcomputer Co., Ltd. 12
  • 13.
    Footprint  The physical board needs space to put.  No space for a dozen of boards on your desk.   QEMU does not need any desk space.  (but disk space.) Kyoto Microcomputer Co., Ltd. 13
  • 14.
    Portability (in Physical)  Bring the physical board and set it up is a work.  The board might be crash in trouble.   You are happy to bring QEMU in your USB key.  Or you can transfer it via broad band network. Kyoto Microcomputer Co., Ltd. 14
  • 15.
    Duplication & Distribution  The physical board can not be duplicate.   You can duplicate your QEMU as many as you like and distribute them.  You might ask for experts to take a look your problem on QEMU. Kyoto Microcomputer Co., Ltd. 15
  • 16.
    QEMU is *NOT*good for  Performance evaluation.  Especially SMP mode.  SMP is simulated in single thread, not parallel.  Deadly slow.  Interesting session about QEMU multi core  Japan Technical Jamboree24, Dec 2008  CELF_JTJ24_qemu-multicore_English.pdf  http://tree.celinuxforum.org/CelfPubWiki/JapanTechnicalJamboree24 Kyoto Microcomputer Co., Ltd. 16
  • 17.
    QEMU is *NOT*good for  developing a device driver for a *NEW* device.  Before, you need the accurate virtual device for the device.  You have to develop a device driver with REAL device at first. Then you can develop virtual device with the device driver. Kyoto Microcomputer Co., Ltd. 17
  • 18.
    QEMU is *NOT*good for  Compiling a huge mount of source code.  Too slow for compiling.  It takes more than one night to compile Linux kernel. Kyoto Microcomputer Co., Ltd. 18
  • 19.
    QEMU is GOODfor  Learning.  Even if you tweak too much to break, you lose nothing.  Not only for beginners. Experts may examine the latest Linux kernel except for x86/x86_64, using QEMU. Kyoto Microcomputer Co., Ltd. 19
  • 20.
    QEMU is GOODfor  Developing applications.  without the real system.  Android SDK is a perfect example.  also good for designers to evaluate UI. Kyoto Microcomputer Co., Ltd. 20
  • 21.
    QEMU is GOODfor  Testing.  Fault injection by the virtual device.  You can duplicate as many as you like and test them in parallel.  Still need testing on real system. Kyoto Microcomputer Co., Ltd. 21
  • 22.
    Practice #1  Following blog pages are written in Japanese. Try machine translation such as Google. It will work.  Building QEMU from source archive  QEMU requires zlib and SDL to build.  http://blog.kmckk.com/archives/2223793.html  Net-installing Debian on QEMU  Don't use obsolete installer.  http://blog.kmckk.com/archives/2233167.html Kyoto Microcomputer Co., Ltd. 22
  • 23.
    Practice #2  Rebuilding kernel from Debian source package  Get the source package and extract and patch it on ARM QEMU.  Do compiling on PC Linux.  QEMU system emulator is too slow to compile kernel.  http://blog.kmckk.com/archives/2237994.html
  • 24.
    Practice #3  How to setup NFS server for QEMU  Need ”insecure” option for NFS because QEMU redirect NFS port.  http://blog.kmckk.com/archives/2257952.html Kyoto Microcomputer Co., Ltd. 24
  • 25.
    Practice #4  Booting Debian in NFS root on ARM QEMU  Booting from NFS root is good for early-stage developing.  You can read/write target file system any time.  You can boot kernel before implementing storage device.  You don't have to care about size of storage.  http://blog.kmckk.com/archives/2257962.html
  • 26.
    Practice #5  Build latest kernel in kernel.org and try SMP mode  Finally the latest kernel successfully ran.  versatile_defconfig remains old. It need updated.  You can try another virtual board easily on QEMU.  SMP implementation of QEMU is just simple and can not run fast.  http://blog.kmckk.com/archives/2333826.html
  • 27.
    Practice #6  Try ARM Ubuntu using QEMU  Ubuntu 9.04 is built for ARMv5TE.  Ubuntu 9.10, ARMv6.  Ubuntu 10.04, ARMv7 Thumb2.  Debian, ARMv4T  Rootstock script is nice and easy to build Ubuntu root file system.  http://blog.kmckk.com/archives/2339128.html
  • 28.
    Practice #7  Using debugger with QEMU  Dive into QEMU itself using gdb.  Connect gdb to target machine of QEMU.  Debug both the target and QEMU itself using 2 gdbs.  Another debugger for QEMU.  http://blog.kmckk.com/archives/2363473.html
  • 29.
    Other topics  TCG and QEMU internals  http://blog.kmckk.com/archives/2067157.html  http://blog.kmckk.com/archives/2067178.html  http://blog.kmckk.com/archives/2067210.html  Using user mode emulation of QEMU + binfmt + chroot to self-build  http://blog.kmckk.com/archives/2342452.html Kyoto Microcomputer Co., Ltd. 29
  • 30.
    Q&A  & Demo Thank you for listening! Any comments to blogs are welcome. Kyoto Microcomputer Co., Ltd. 30
  • 31.
    One more thing... KMC PARTNER debugger for QEMU Breaking at do_execve in linux kernel running on Android emulator. Kyoto Microcomputer Co., Ltd. 31