		Basic Firmware on Virt-v8 Guest

The basic firmware currently sets up PIC, Timer, and UART and emulates
a dummy terminal which reponds to various commands. It also includes an
extensive MMU test suite and dhrystone benchmark.

Hardware features tested by Basic Firmware:
  - Crucial EL1 instructions
  - Virtual IRQs
  - Generic Interrupt Controller (GIC)
  - ARMv8 Generic Timers
  - VirtIO console emergency write   

Please follow the steps below to build & run Basic Firmware on Virt-v8
Guest with Xvisor running on Foundation v8 Model (v11.xx or higher):

  [1. Build environment for Xvisor]
  # CROSS_COMPILE=aarch64-linux-gnu-

  [2. GoTo Xvisor source directory]
  # cd <xvisor_source_directory>

  [3. Initialize Xvisor submodules]
  # git submodule init
  # git submodule update
  (Note: This is required to be done only once in freshly cloned xvisor source)

  [4. Configure Xvisor with Generic-v8 default settings]
  # make ARCH=arm generic-v8-defconfig

  [5. Build Xvisor & DTBs]
  # make; make dtbs

  [6. Build Basic Firmware]
  # make -C tests/arm64/virt-v8/basic

  [7. Create disk image for Xvisor]
  # mkdir -p ./build/disk/tmp
  # mkdir -p ./build/disk/system
  # cp -f ./docs/banner/roman.txt ./build/disk/system/banner.txt
  # cp -f ./docs/logo/xvisor_logo_name.ppm ./build/disk/system/logo.ppm
  # mkdir -p ./build/disk/images/arm64/virt-v8
  # ./build/tools/dtc/bin/dtc -I dts -O dtb -o ./build/disk/images/arm64/virt-v8x2.dtb ./tests/arm64/virt-v8/virt-v8x2.dts
  # cp -f ./build/tests/arm64/virt-v8/basic/firmware.bin ./build/disk/images/arm64/virt-v8/firmware.bin
  # cp -f ./tests/arm64/virt-v8/basic/nor_flash.list ./build/disk/images/arm64/virt-v8/nor_flash.list
  # genext2fs -B 1024 -b 16384 -d ./build/disk ./build/disk.img

  [8. Launch Foundation v8 Model]
  # ${CROSS_COMPILE}gcc -nostdlib -nostdinc -e _start -Wl,--build-id=none -Wl,-Ttext=0x80000000 -DGENTIMER_FREQ=100000000 -DUART_PL011 -DUART_PL011_BASE=0x1c090000 -DGICv2 -DGIC_DIST_BASE=0x2c001000 -DGIC_CPU_BASE=0x2c002000 -DSPIN_LOOP_ADDR=0x8000fff8 -DIMAGE=./build/vmm.bin -DDTB=./build/arch/arm/board/generic/dts/foundation-v8/gicv2/one_guest_virt-v8.dtb -DINITRD=./build/disk.img ./docs/arm/foundation_v8_boot.S -o ./build/foundation_v8_boot.axf
  # <foundation_v8_install_directory>/models/Linux64_GCC-<xxxx>/Foundation_Platform --no-gicv3 --image ./build/foundation_v8_boot.axf --network=nat

  [9. Kick Guest0 for starting Basic Firmware]
  XVisor# guest kick guest0

  [10. Bind to virtual UART]
  XVisor# vserial bind guest0/uart0

  [11. Say 'hi' to Basic Firmware]
  [guest0/uart0] basic# hi

  [12. Say 'hello' to Basic Firmware]
  [guest0/uart0] basic# hello

  [13. Check various commands of Basic Firmware]
  [guest0/uart0] basic# help

  [14. Enter character seqence 'ESCAPE+x+q" return to Xvisor prompt]
  [guest0/uart0] basic# 

  (Note: replace all <> brackets based on your workspace)
  (Note: some of the above steps will need to be adapted for other
   types of ARM host)
  (Note: for more info on your desired ARM host refer docs/arm/)
  (Note: you are free to change the ordering of above steps based
   on your workspace)
