mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-04 05:50:17 +00:00 
			
		
		
		
	Update description to use the MIPS Malta board for Qemu. Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
		
			
				
	
	
		
			130 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
.. SPDX-License-Identifier: GPL-2.0+
 | 
						|
.. sectionauthor:: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 | 
						|
 | 
						|
QEMU MIPS
 | 
						|
=========
 | 
						|
 | 
						|
Qemu for MIPS is based on the MIPS Malta board. The built Malta U-Boot
 | 
						|
images can be used for Qemu and on physical hardware. The Malta board
 | 
						|
supports all combinations of Little and Big Endian as well as 32 bit
 | 
						|
and 64 bit.
 | 
						|
 | 
						|
Limitations & comments
 | 
						|
----------------------
 | 
						|
The memory size for Qemu is hard-coded to 256 MiB. For Malta Little Endian
 | 
						|
targets an extra endianness swapped image named *u-boot-swap.bin* is
 | 
						|
generated and required for Qemu.
 | 
						|
 | 
						|
Example usage
 | 
						|
-------------
 | 
						|
 | 
						|
Build for 32 bit, big endian:
 | 
						|
 | 
						|
.. code-block:: bash
 | 
						|
 | 
						|
  make malta_defconfig
 | 
						|
  make
 | 
						|
  UBOOT_BIN=u-boot.bin
 | 
						|
  QEMU_BIN=qemu-system-mips
 | 
						|
  QEMU_CPU=24Kc
 | 
						|
 | 
						|
Build for 32 bit, little endian:
 | 
						|
 | 
						|
.. code-block:: bash
 | 
						|
 | 
						|
  make maltael_defconfig
 | 
						|
  make
 | 
						|
  UBOOT_BIN=u-boot-swap.bin
 | 
						|
  QEMU_BIN=qemu-system-mipsel
 | 
						|
  QEMU_CPU=24Kc
 | 
						|
 | 
						|
Build for 64 bit, big endian:
 | 
						|
 | 
						|
.. code-block:: bash
 | 
						|
 | 
						|
  make malta64_defconfig
 | 
						|
  make
 | 
						|
  UBOOT_BIN=u-boot.bin
 | 
						|
  QEMU_BIN=qemu-system-mips64
 | 
						|
  QEMU_CPU=MIPS64R2-generic
 | 
						|
 | 
						|
Build for 64 bit, little endian:
 | 
						|
 | 
						|
.. code-block:: bash
 | 
						|
 | 
						|
  make malta64el_defconfig
 | 
						|
  make
 | 
						|
  UBOOT_BIN=u-boot-swap.bin
 | 
						|
  QEMU_BIN=qemu-system-mips64el
 | 
						|
  QEMU_CPU=MIPS64R2-generic
 | 
						|
 | 
						|
Generate NOR flash image with U-Boot binary:
 | 
						|
 | 
						|
.. code-block:: bash
 | 
						|
 | 
						|
  dd if=/dev/zero bs=1M count=4 | tr '\000' '\377' > pflash.img
 | 
						|
  dd if=${UBOOT_BIN} of=pflash.img conv=notrunc
 | 
						|
 | 
						|
Start Qemu:
 | 
						|
 | 
						|
.. code-block:: bash
 | 
						|
 | 
						|
  mkdir tftproot
 | 
						|
  ${QEMU_BIN} -nographic -cpu ${QEMU_CPU} -m 256 -drive if=pflash,file="$(pwd)/pflash.img",format=raw -netdev user,id=net0,tftp="$(pwd)/tftproot" -device pcnet,netdev=net0
 | 
						|
 | 
						|
.. code-block:: bash
 | 
						|
 | 
						|
  U-Boot 2021.04-00963-g60279a2b1d (Apr 21 2021 - 19:54:32 +0200)
 | 
						|
 | 
						|
  Board: MIPS Malta CoreLV
 | 
						|
  DRAM:  256 MiB
 | 
						|
  Flash: 4 MiB
 | 
						|
  Loading Environment from Flash... *** Warning - bad CRC, using default environment
 | 
						|
 | 
						|
  In:    serial@3f8
 | 
						|
  Out:   serial@3f8
 | 
						|
  Err:   serial@3f8
 | 
						|
  Net:   pcnet#0
 | 
						|
  IDE:   Bus 0: not available
 | 
						|
  maltael #
 | 
						|
 | 
						|
How to debug U-Boot
 | 
						|
-------------------
 | 
						|
 | 
						|
In order to debug U-Boot you need to start qemu with gdb server support (-s)
 | 
						|
and waiting the connection to start the CPU (-S). Start Qemu in the first console:
 | 
						|
 | 
						|
.. code-block:: bash
 | 
						|
 | 
						|
  mkdir tftproot
 | 
						|
  ${QEMU_BIN} -s -S -nographic -cpu ${QEMU_CPU} -m 256 -drive if=pflash,file="$(pwd)/pflash.img",format=raw -netdev user,id=net0,tftp="$(pwd)/tftproot" -device pcnet,netdev=net0
 | 
						|
 | 
						|
In the second console start gdb:
 | 
						|
 | 
						|
.. code-block:: bash
 | 
						|
 | 
						|
  gdb-multiarch --eval-command "target remote :1234" u-boot
 | 
						|
 | 
						|
.. code-block:: bash
 | 
						|
 | 
						|
  GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
 | 
						|
  Copyright (C) 2020 Free Software Foundation, Inc.
 | 
						|
  License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
 | 
						|
  This is free software: you are free to change and redistribute it.
 | 
						|
  There is NO WARRANTY, to the extent permitted by law.
 | 
						|
  Type "show copying" and "show warranty" for details.
 | 
						|
  This GDB was configured as "x86_64-linux-gnu".
 | 
						|
  Type "show configuration" for configuration details.
 | 
						|
  For bug reporting instructions, please see:
 | 
						|
  <http://www.gnu.org/software/gdb/bugs/>.
 | 
						|
  Find the GDB manual and other documentation resources online at:
 | 
						|
      <http://www.gnu.org/software/gdb/documentation/>.
 | 
						|
 | 
						|
  For help, type "help".
 | 
						|
  Type "apropos word" to search for commands related to "word"...
 | 
						|
  Reading symbols from u-boot...
 | 
						|
  Remote debugging using :1234
 | 
						|
  0xbfc00000 in ?? ()
 | 
						|
  (gdb) c
 | 
						|
  Continuing.
 |