]> git.proxmox.com Git - mirror_qemu.git/blob - docs/system/arm/bananapi_m2u.rst
b09ba5c548680e924aa0ac280aa35461202dbc6f
[mirror_qemu.git] / docs / system / arm / bananapi_m2u.rst
1 Banana Pi BPI-M2U (``bpim2u``)
2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3
4 Banana Pi BPI-M2 Ultra is a quad-core mini single board computer built with
5 Allwinner A40i/R40/V40 SoC. It features 2GB of RAM and 8GB eMMC. It also
6 has onboard WiFi and BT. On the ports side, the BPI-M2 Ultra has 2 USB A
7 2.0 ports, 1 USB OTG port, 1 HDMI port, 1 audio jack, a DC power port,
8 and last but not least, a SATA port.
9
10 Supported devices
11 """""""""""""""""
12
13 The Banana Pi M2U machine supports the following devices:
14
15 * SMP (Quad Core Cortex-A7)
16 * Generic Interrupt Controller configuration
17 * SRAM mappings
18 * SDRAM controller
19 * Timer device (re-used from Allwinner A10)
20 * UART
21 * SD/MMC storage controller
22 * EMAC ethernet
23 * GMAC ethernet
24 * Clock Control Unit
25 * TWI (I2C)
26
27 Limitations
28 """""""""""
29
30 Currently, Banana Pi M2U does *not* support the following features:
31
32 - Graphical output via HDMI, GPU and/or the Display Engine
33 - Audio output
34 - Hardware Watchdog
35 - Real Time Clock
36 - USB 2.0 interfaces
37
38 Also see the 'unimplemented' array in the Allwinner R40 SoC module
39 for a complete list of unimplemented I/O devices: ``./hw/arm/allwinner-r40.c``
40
41 Boot options
42 """"""""""""
43
44 The Banana Pi M2U machine can start using the standard -kernel functionality
45 for loading a Linux kernel or ELF executable. Additionally, the Banana Pi M2U
46 machine can also emulate the BootROM which is present on an actual Allwinner R40
47 based SoC, which loads the bootloader from a SD card, specified via the -sd
48 argument to qemu-system-arm.
49
50 Running mainline Linux
51 """"""""""""""""""""""
52
53 To build a Linux mainline kernel that can be booted by the Banana Pi M2U machine,
54 simply configure the kernel using the sunxi_defconfig configuration:
55
56 .. code-block:: bash
57
58 $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
59 $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make sunxi_defconfig
60
61 To boot the newly build linux kernel in QEMU with the Banana Pi M2U machine, use:
62
63 .. code-block:: bash
64
65 $ qemu-system-arm -M bpim2u -nographic \
66 -kernel /path/to/linux/arch/arm/boot/zImage \
67 -append 'console=ttyS0,115200' \
68 -dtb /path/to/linux/arch/arm/boot/dts/sun8i-r40-bananapi-m2-ultra.dtb
69
70 Banana Pi M2U images
71 """"""""""""""""""""
72
73 Note that the mainline kernel does not have a root filesystem. You can choose
74 to build you own image with buildroot using the bananapi_m2_ultra_defconfig.
75 Also see https://buildroot.org for more information.
76
77 Another possibility is to run an OpenWrt image for Banana Pi M2U which
78 can be downloaded from:
79
80 https://downloads.openwrt.org/releases/22.03.3/targets/sunxi/cortexa7/
81
82 When using an image as an SD card, it must be resized to a power of two. This can be
83 done with the ``qemu-img`` command. It is recommended to only increase the image size
84 instead of shrinking it to a power of two, to avoid loss of data. For example,
85 to prepare a downloaded Armbian image, first extract it and then increase
86 its size to one gigabyte as follows:
87
88 .. code-block:: bash
89
90 $ qemu-img resize \
91 openwrt-22.03.3-sunxi-cortexa7-sinovoip_bananapi-m2-ultra-ext4-sdcard.img \
92 1G
93
94 Instead of providing a custom Linux kernel via the -kernel command you may also
95 choose to let the Banana Pi M2U machine load the bootloader from SD card, just like
96 a real board would do using the BootROM. Simply pass the selected image via the -sd
97 argument and remove the -kernel, -append, -dbt and -initrd arguments:
98
99 .. code-block:: bash
100
101 $ qemu-system-arm -M bpim2u -nic user -nographic \
102 -sd openwrt-22.03.3-sunxi-cortexa7-sinovoip_bananapi-m2-ultra-ext4-sdcard.img
103
104 Running U-Boot
105 """"""""""""""
106
107 U-Boot mainline can be build and configured using the Bananapi_M2_Ultra_defconfig
108 using similar commands as describe above for Linux. Note that it is recommended
109 for development/testing to select the following configuration setting in U-Boot:
110
111 Device Tree Control > Provider for DTB for DT Control > Embedded DTB
112
113 The BootROM of allwinner R40 loading u-boot from the 8KiB offset of sdcard.
114 Let's create an bootable disk image:
115
116 .. code-block:: bash
117
118 $ dd if=/dev/zero of=sd.img bs=32M count=1
119 $ dd if=u-boot-sunxi-with-spl.bin of=sd.img bs=1k seek=8 conv=notrunc
120
121 And then boot it.
122
123 .. code-block:: bash
124
125 $ qemu-system-arm -M bpim2u -nographic -sd sd.img
126
127 Banana Pi M2U integration tests
128 """""""""""""""""""""""""""""""
129
130 The Banana Pi M2U machine has several integration tests included.
131 To run the whole set of tests, build QEMU from source and simply
132 provide the following command:
133
134 .. code-block:: bash
135
136 $ cd qemu-build-dir
137 $ AVOCADO_ALLOW_LARGE_STORAGE=yes tests/venv/bin/avocado \
138 --verbose --show=app,console run -t machine:bpim2u \
139 ../tests/avocado/boot_linux_console.py