File:  [NetBSD Developer Wiki] / wikisrc / ports / evbarm / qemu_arm.mdwn
Revision 1.4: download - view: text, annotated - select for diffs
Sun Jan 12 00:26:13 2014 UTC (21 months ago) by ryoon
Branches: MAIN
CVS tags: HEAD
Update for NetBSD/evbearm INTEGRATOR_CP kernel

[[!meta title="NetBSD/evbarm under QEMU"]]

This page attempts to document running NetBSD/evbarm under the
[QEMU]( open source processor emulator.
This can be extremely useful for development and testing.

# Introduction
QEMU emulates ARM's Integrator/CP board. You can run NetBSD under it.
Older NetBSD had the problem to run under QEMU's emulated Integrator/CP
Sergio López had created the patch for NetBSD current and had posted
to port-arm mailing list in [6 Febrary, 2013](

# Requirements
* pkgsrc/emulators/qemu 1.6.2 and 1.7.0
* INTEGRATOR_CP kernel of NetBSD/evbearm 6.99.28 or later
(some provious versions should work, but not tested)

## Preparing QEMU
You can install latest qemu with the following commands.
It is assumed that your pkgsrc tree is in /usr/pkgsrc directory.

    # cd /usr/pkgsrc/emulators/qemu
    # make install

## Preparing NetBSD userland and kernel
You can create INTEGRATOR_CP kernel, and kernel/userland tarball with
the following commands.
It is assumed that your NetBSD src tree is in /usr/src directory.

    $ cd /usr/src
    $ ./ -U -T /usr/tools/evbearm-el -O /usr/obj/evbearm-el \
      -D /usr/NewWorld/evbearm-el -R /usr/release/evbearm-el \
      -m evbearm release
    $ ./ -U -T /usr/tools/evbearm-el -O /usr/obj/evbearm-el \
      -D /usr/NewWorld/evbearm-el -R /usr/release/evbearm-el \
      -m evbearm kernel=INTEGRATOR_CP

# Booting
INTEGRATOR_CP kernel has no disk drive support.
You should setup netboot environment.

## Setting up netboot environment
You can use existing NetBSD or other Unix like operating system environment
for host netboot.
You can also utilize qemu-system-amd64 or qemu-system-i386 to host

tftp is not needed, kernel is specified in commandline of qemu-system-arm.
Only NFS root is needed.
In detail see [Diskless NetBSD howto's Setting up the NFS server section](

# Booting INTEGRATOR_CP kernel
You can boot INTEGRATOR_CP kernel with the following commandline.
It is assumed that the host machine uses bge0 to connect to your network.

    # ifconfig bridge0 create
    # brconfig bridge0 add bge0
    # ifconfig bridge0 up
    # ifconfig tap0 create
    # ifconfig tap0 up
    # brconfig bridge0 add tap0
    $ qemu-system-arm -M integratorcp -cpu arm1136 -m 512m -kernel netbsd.gz.ub -serial stdio -net nic -net tap,fd=3 3<>/dev/tap0

# After booted
You will get the following boot messages.

    Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
        2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
        The NetBSD Foundation, Inc.  All rights reserved.
    Copyright (c) 1982, 1986, 1989, 1991, 1993
        The Regents of the University of California.  All rights reserved.
    NetBSD 6.99.28 (INTEGRATOR_CP) #0: Sat Jan 11 23:47:15 UTC 2014
    total memory = 255 MB
    avail memory = 246 MB
    sysctl_createv: sysctl_create(machine_arch) returned 17
    timecounter: Timecounters tick every 10.000 msec
    mainbus0 (root)
    cpu0 at mainbus0 core 0: ARM1136J-S r1p3 (ARM11J V6J core)
    cpu0: DC enabled IC enabled WB disabled EABT
    cpu0: isar: [0]=0x140011 [1]=0x12002111 [2]=0x11231111 [3]=0x1102131, [4]=0x141, [5]=0
    cpu0: mmfr: [0]=0x1130003 [1]=0x10030302 [2]=0x1222110 [3]=0
    cpu0: pfr: [0]=0x111 [1]=0x1
    cpu0: 4KB/32B 4-way L1 Instruction cache
    cpu0: 64KB/32B 4-way write-through L1 Data cache
    vfp0 at cpu0: VFP11
    vfp0: mvfr: [0]=0x11111111 [1]=0
    ifpga0 at mainbus0: Build 0, Rev A, Manufacturer Unknown, ASB, Little-endian,
    ifpga0: FPGA unknown, SYSCLK 2.00MHz
    ifpga0: vendor 0x0000 product 0x0000 (miscellaneous prehistoric)
    pci_configure_bus done
    sm0 at ifpga0 addr 0xb8000000 irq 27
    sm0: SMC91C111, revision 1, buffer size: 8192
    sm0: MAC address 52:54:00:12:34:56, default media MII (internal PHY)
    plcom0 at ifpga0 addr 0x6000000 irq 1
    plcom0: console
    plcom1 at ifpga0 addr 0x7000000 irq 2
    plrtc0 at ifpga0 addr 0x5000000
    pci0 at ifpga0 bus 0
    pci0: i/o space, memory space enabled
    timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
    clock: hz=100 stathz = 100 profhz = 500
    timecounter: Timecounter "ifpga" frequency 62500 Hz quality 100
    boot device: <unknown>
    root device: sm0
    dump device: 
    file system (default generic): 
    root on sm0
    nfs_boot: trying DHCP/BOOTP
    nfs_boot: DHCP next-server:
    nfs_boot: my_addr=
    nfs_boot: my_mask=
    nfs_boot: gateway=
    root on
    root file system type: nfs
    init path (default /sbin/init): 
    init: trying /sbin/init

You will see many error messages from src/sys/arch/evbarm/ifpga/ifpga_clock.c.

    statclockhandler: Statclock overrun

After NetBSD is booted, you can setup sm0 network interface with dhcpcd command.

    # dhcpcd sm0

# Using QEMU to debug the kernel
 - there is info elsewhere on the wiki about this; maybe adapt to ARM
   and link?

# Additional links

# What works

# What needs work

# more info

CVSweb for NetBSD wikisrc <> software: FreeBSD-CVSweb