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.