QEMU Emulation - OpenNoah/OpenNoah.github.io GitHub Wiki

QEMU Noah device emulation

For building QEMU for Windows, check out this page: QEMU for Windows

Supported boards:
NP1380

Here using NP1380 as an example:

Build bootrom

Download source code from:
https://github.com/OpenNoah/nandboot/tree/bootrom_jz4740

Build file build/bootrom.bin:

make clean
make

Build NoahSplit tool

Download source code from:
https://github.com/OpenNoah/NoahSplit

Build mkpkg tool:

make mkpkg

This tool is used to extract upgrade.bin.

Create disk images

Download upgrade.bin from official website:
https://downloads.youxuepai.com/source/list.shtml#80&name=NP1380

Get scripts from:
https://github.com/OpenNoah/tools

Create initial NAND image

See: qemu/upgrade_to_nand_dump.sh

#!/bin/bash -x
src=upgrade.bin
pkg=upgrade.pkg
nand=nand_dump_oob.bin
qcow2=nand_dump_oob.qcow2

# Extract data sections from upgrade.bin
./mkpkg --type=np1000 --extract $src $pkg

# Create NAND image
# Ignore errors as it does not support ubifs file system format yet
./create_nand_dump.py -s $((2*1024*1024*1024)) -p 4096 -o 128 $pkg $nand

# (Optional) Convert NAND image to qcow2 format
qemu-img convert -f raw -O qcow2 $nand $qcow2

Create SD card image

See: qemu/create_mmc_image.sh

Script needs to be run as root.

#!/bin/bash -ex
in=upgrade.bin
out=mmc.bin
out_qcow2=mmc.qcow2

# Create sparse image file
rm -f $out
touch $out
truncate -s 4G $out

# Create partition table
sfdisk $out <<SFDISK
label: dos
start=2048, size=8386560, type=0c
SFDISK

# Format drive
lo=$(losetup -f --show $out -o $((512*2048)))
mkfs.vfat -F 32 $lo
mkdir -p mnt
mount -t vfat $lo mnt

# Copy files to mmc
cp $in mnt/upgrade.bin

# Done, clean up
df -h mnt
umount mnt
rmdir mnt
/sbin/losetup -d $lo

# (Optional) Convert to qcow2
qemu-img convert -f raw -O qcow2 $out $out_qcow2

Create qcow2 overlay files

Optionally create qcow2 overlay files, as snapshots.

qemu-img create -f qcow2 -F qcow2 -b nand_dump_oob.qcow2 nand_overlay.qcow2
qemu-img create -f qcow2 -F qcow2 -b mmc.qcow2 mmc_overlay.qcow2

Build QEMU

Download source code from:
https://github.com/OpenNoah/qemu

./configure --target-list=mipsel-softmmu --disable-docs
make -j8

Start QEMU

./qemu-system-mipsel \
    -M noah_np1380 -cpu JZ4740 \
    -d guest_errors,unimp \
    -bios bootrom.bin \
    -parallel null \
    -serial vc \
    -monitor vc \
    -blockdev driver=file,node-name=nand_qcow2,filename=nand_overlay.qcow2 \
    -blockdev qcow2,node-name=nand,file=nand_qcow2 \
    -global ingenic-emc-nand.drive=nand \
    -blockdev driver=file,node-name=mmc_qcow2,filename=mmc_overlay.qcow2 \
    -blockdev qcow2,node-name=mmc,file=mmc_qcow2 \
    -device sd-card,spec_version=3,drive=mmc \
    -display vnc=:10

This starts a VNC server at port 5910.

Connect to VNC server, run c command in QEMU console to start booting.
(WIP) Press right arrow key within 1 second to start firmware flashing process.

VirtualNOAH project (deprecated)

See:
https://github.com/OpenNoah/virtualnoah