Install packages required
apt-get install build-essential curl git zlibc zlib1g zlib1g-dev dosfstools mtools
We also need to use a special build qemu-system-arm to emulate raspi2.
git clone https://github.com/0xabu/qemu.git -b raspi git submodule update --init dtc ./configure make -j$(nproc) sudo make install
In this compile process we may need to install some packages.
git submodule update --init pixman apt-get install autoconf apt-get install libglib2.0-dev zlib1g-dev apt-get install dh-autoreconf
More info at:
http://blog.3mdeb.com/2015/12/30/emulate-rapberry-pi-2-in-qemu/
Back to the main target, there is 2 samples to compile:
- minix-rpi3
- minix-rpi_clean
Samples build summary
minix-rpi3 – https://github.com/boricj/minix/tree/rpi3
Problem: Break on rpi-firmware checkout firmware
Solution: Got it from https://github.com/boricj/rpi-firmware, unpack it and copy to releasetools/rpi-firmware
End result
Disk image at /root/minix/minix-rpi3/minix-rpi3/minix_arm_sd_rpi2.img
To boot this image on kvm:
qemu-system-arm -M raspi2 -drive if=sd,cache=writeback,format=raw,file=/root/minix/minix-rpi3/minix-rpi3/minix_arm_sd_rpi2.img -bios /root/minix/minix-rpi3/obj.evbearm-el-rpi/work/fs/minix_rpi2.bin
Using local compiled qemu 2.6
/usr/local/bin/qemu-system-arm -M raspi2 -nographic -drive if=sd,cache=writeback,format=raw,file=/root/minix/minix-rpi3/minix-rpi3/minix_arm_sd_rpi2.img -bios /root/minix/minix-rpi3/obj.evbearm-el-rpi/work/fs/minix_rpi2.bin
Runing result
root@debian:~/minix/qemu# /usr/local/bin/qemu-system-arm -M raspi2 -nographic -drive if=sd,cache=writeback,format=raw,file=/root/minix/minix-rpi3/minix-rpi3/minix_arm_sd_rpi2.img -bios /root/minix/minix-rpi3/obj.evbearm-el-rpi/work/fs/minix_rpi2.bin
MINIX 3 unpacker for Raspberry Pi
Current mode: supervisor
Extracting modules…
kernel.bin size:0x0004CA10 address:0x00200000
mod01_ds.elf size:0x00021377 address:0x02000000
mod02_rs.elf size:0x00028AE0 address:0x02800000
mod03_pm.elf size:0x0007983B address:0x03000000
mod04_sched.elf size:0x000163B8 address:0x03800000
mod05_vfs.elf size:0x00113278 address:0x04000000
mod06_memory.elf size:0x0059086C address:0x04800000
mod07_tty.elf size:0x00040279 address:0x05000000
mod08_mfs.elf size:0x00027894 address:0x05800000
mod09_vm.elf size:0x000F6D77 address:0x06000000
mod10_pfs.elf size:0x0001987C address:0x06800000
mod11_init.elf size:0x0006C13C address:0x07000000
Jumping into kernel, argv[1]=”board_name=RPI_2_B console=tty00″
MINIX 3.3.0. Copyright 2014, Vrije Universiteit, Amsterdam, The Netherlands
MINIX is open source software, see http://www.minix3.org
pagefault in kernel at pc 0xf0425678 address 0x8
cpu 0 is_nested = 1 scheduled was: process -4 (idle0), pc = 0x0
idle0 -4 0x0
kernel panic: Unhandled kernel exception
kernel on CPU 0: 0xf04369c4 0xf0427488 0xf042726c 0xf0426f24 0xf0425dc4 0xf042fde8 0xf042de1c 0xf042e860 0x2028c0
MINIX will now reset.
Reset not supported
minix-rpi_clean – https://github.com/boricj/minix/tree/rpi_clean
End result
Disk image at /root/minix/minix-rpi_clean/minix-rpi_clean/minix_arm_sd_rpi.img
To boot this image on kvm:
qemu-system-arm -M raspi2 -drive if=sd,cache=writeback,format=raw,file=/root/minix/minix-rpi_clean/minix-rpi_clean/minix_arm_sd_rpi.img -bios /root/minix/minix-rpi_clean/obj.evbearm-el-rpi/work/fs/minix_rpi2.bin
Using local compiled qemu 2.6
/usr/local/bin/qemu-system-arm -M raspi2 -nographic -drive if=sd,cache=writeback,format=raw,file=/root/minix/minix-rpi_clean/minix-rpi_clean/minix_arm_sd_rpi.img -bios /root/minix/minix-rpi_clean/obj.evbearm-el-rpi/work/fs/minix_rpi2.bin
Runing result
root@debian:~/minix/qemu# /usr/local/bin/qemu-system-arm -M raspi2 -nographic -drive if=sd,cache=writeback,format=raw,file=/root/minix/minix-rpi_clean/minix-rpi_clean/minix_arm_sd_rpi.img -bios /root/minix/minix-rpi_clean/obj.evbearm-el-rpi/work/fs/minix_rpi2.bin
MINIX 3 unpacker for Raspberry Pi
Current mode: supervisor
Extracting modules…
kernel.bin size:0x0003FD50 address:0x00200000
mod01_ds.elf size:0x00017B4F address:0x02000000
mod02_rs.elf size:0x00021398 address:0x02800000
mod03_pm.elf size:0x000197F6 address:0x03000000
mod04_sched.elf size:0x0000EBE2 address:0x03800000
mod05_vfs.elf size:0x00030E57 address:0x04000000
mod06_memory.elf size:0x0029FF70 address:0x04800000
mod07_tty.elf size:0x000142DA address:0x05000000
mod08_mib.elf size:0x00018296 address:0x05800000
mod09_vm.elf size:0x0003513E address:0x06000000
mod10_pfs.elf size:0x0001222E address:0x06800000
mod11_mfs.elf size:0x000203BC address:0x07000000
mod12_init.elf size:0x00059B70 address:0x07800000
Jumping into kernel, argv[1]=”board_name=RPI_2_B console=tty00″
MINIX 3.4.0. Copyright 2014, Vrije Universiteit, Amsterdam, The Netherlands
MINIX is open source software, see http://www.minix3.org
Started VFS: 9 worker thread(s)
# ls
ls: not found