• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.. SPDX-License-Identifier: GPL-2.0+
2.. sectionauthor:: Vlad Lungu <vlad.lungu@windriver.com>
3
4QEMU MIPS
5=========
6
7Qemu is a full system emulator. See http://www.nongnu.org/qemu/
8
9Limitations & comments
10----------------------
11Supports the "-M mips" configuration of qemu: serial,NE2000,IDE.
12Supports little and big endian as well as 32 bit and 64 bit.
13Derived from au1x00 with a lot of things cut out.
14
15Supports emulated flash (patch Jean-Christophe PLAGNIOL-VILLARD) with
16recent qemu versions. When using emulated flash, launch with
17-pflash <filename> and erase mips_bios.bin.
18
19
20Notes for the Qemu MIPS port
21----------------------------
22
23Example usage
24^^^^^^^^^^^^^
25
26Using u-boot.bin as ROM (replaces Qemu monitor):
27
2832 bit, big endian::
29
30   # make qemu_mips
31   # qemu-system-mips -M mips -bios u-boot.bin -nographic
32
3332 bit, little endian::
34
35   # make qemu_mipsel
36   # qemu-system-mipsel -M mips -bios u-boot.bin -nographic
37
3864 bit, big endian::
39
40   # make qemu_mips64
41   # qemu-system-mips64 -cpu MIPS64R2-generic -M mips -bios u-boot.bin -nographic
42
4364 bit, little endian::
44
45   # make qemu_mips64el
46   # qemu-system-mips64el -cpu MIPS64R2-generic -M mips -bios u-boot.bin -nographic
47
48or using u-boot.bin from emulated flash:
49
50if you use a qemu version after commit 4224
51
52.. code-block:: none
53
54   create image:
55   # dd of=flash bs=1k count=4k if=/dev/zero
56   # dd of=flash bs=1k conv=notrunc if=u-boot.bin
57   start it (see above):
58   # qemu-system-mips[64][el] [-cpu MIPS64R2-generic] -M mips -pflash flash -nographic
59
60Download kernel + initrd
61^^^^^^^^^^^^^^^^^^^^^^^^
62
63On ftp://ftp.denx.de/pub/contrib/Jean-Christophe_Plagniol-Villard/qemu_mips/
64you can downland::
65
66   #config to build the kernel
67   qemu_mips_defconfig
68   #patch to fix mips interrupt init on 2.6.24.y kernel
69   qemu_mips_kernel.patch
70   initrd.gz
71   vmlinux
72   vmlinux.bin
73   System.map
74
75Generate uImage
76^^^^^^^^^^^^^^^
77
78.. code-block:: none
79
80   # tools/mkimage -A mips -O linux -T kernel -C gzip -a 0x80010000 -e 0x80245650 -n "Linux 2.6.24.y" -d vmlinux.bin.gz uImage
81
82Copy uImage to Flash
83^^^^^^^^^^^^^^^^^^^^
84
85.. code-block:: none
86
87   # dd if=uImage bs=1k conv=notrunc seek=224 of=flash
88
89Generate Ide Disk
90^^^^^^^^^^^^^^^^^
91
92.. code-block:: none
93
94   # dd of=ide bs=1k cout=100k if=/dev/zero
95
96   # sfdisk -C 261 -d ide
97   # partition table of ide
98   unit: sectors
99
100        ide1 : start=       63, size=    32067, Id=83
101        ide2 : start=    32130, size=    32130, Id=83
102        ide3 : start=    64260, size=  4128705, Id=83
103        ide4 : start=        0, size=        0, Id= 0
104
105Copy to ide
106^^^^^^^^^^^
107
108.. code-block:: none
109
110   # dd if=uImage bs=512 conv=notrunc seek=63 of=ide
111
112Generate ext2 on part 2 on Copy uImage and initrd.gz
113^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
114
115.. code-block:: none
116
117   # Attached as loop device ide offset = 32130 * 512
118   # losetup -o 16450560 -f ide
119   # Format as ext2 ( arg2 : nb blocks)
120   # mke2fs /dev/loop0 16065
121   # losetup -d /dev/loop0
122   # Mount and copy uImage and initrd.gz to it
123   # mount -o loop,offset=16450560 -t ext2 ide /mnt
124   # mkdir /mnt/boot
125   # cp {initrd.gz,uImage} /mnt/boot/
126   # Umount it
127   # umount /mnt
128
129Set Environment
130^^^^^^^^^^^^^^^
131
132.. code-block:: none
133
134   setenv rd_start 0x80800000
135   setenv rd_size 2663940
136   setenv kernel BFC38000
137   setenv oad_addr 80500000
138   setenv load_addr2 80F00000
139   setenv kernel_flash BFC38000
140   setenv load_addr_hello 80200000
141   setenv bootargs 'root=/dev/ram0 init=/bin/sh'
142   setenv load_rd_ext2 'ide res; ext2load ide 0:2 ${rd_start} /boot/initrd.gz'
143   setenv load_rd_tftp 'tftp ${rd_start} /initrd.gz'
144   setenv load_kernel_hda 'ide res; diskboot ${load_addr} 0:2'
145   setenv load_kernel_ext2 'ide res; ext2load ide 0:2 ${load_addr} /boot/uImage'
146   setenv load_kernel_tftp 'tftp ${load_addr} /qemu_mips/uImage'
147   setenv boot_ext2_ext2 'run load_rd_ext2; run load_kernel_ext2; run addmisc; bootm ${load_addr}'
148   setenv boot_ext2_flash 'run load_rd_ext2; run addmisc; bootm ${kernel_flash}'
149   setenv boot_ext2_hda 'run load_rd_ext2; run load_kernel_hda; run addmisc; bootm ${load_addr}'
150   setenv boot_ext2_tftp 'run load_rd_ext2; run load_kernel_tftp; run addmisc; bootm ${load_addr}'
151   setenv boot_tftp_hda 'run load_rd_tftp; run load_kernel_hda; run addmisc; bootm ${load_addr}'
152   setenv boot_tftp_ext2 'run load_rd_tftp; run load_kernel_ext2; run addmisc; bootm ${load_addr}'
153   setenv boot_tftp_flash 'run load_rd_tftp; run addmisc; bootm ${kernel_flash}'
154   setenv boot_tftp_tftp 'run load_rd_tftp; run load_kernel_tftp; run addmisc; bootm ${load_addr}'
155   setenv load_hello_tftp 'tftp ${load_addr_hello} /examples/hello_world.bin'
156   setenv go_tftp 'run load_hello_tftp; go ${load_addr_hello}'
157   setenv addmisc 'setenv bootargs ${bootargs} console=ttyS0,${baudrate} rd_start=${rd_start} rd_size=${rd_size} ethaddr=${ethaddr}'
158   setenv bootcmd 'run boot_tftp_flash'
159
160Now you can boot from flash, ide, ide+ext2 and tfp::
161
162   # qemu-system-mips -M mips -pflash flash -monitor null -nographic -net nic -net user -tftp `pwd` -hda ide
163
164
165How to debug U-Boot
166-------------------
167
168In order to debug U-Boot you need to start qemu with gdb server support (-s)
169and waiting the connection to start the CPU (-S)
170
171.. code-block:: none
172
173   # qemu-system-mips -S -s -M mips -pflash flash -monitor null -nographic -net nic -net user -tftp `pwd` -hda ide
174
175in an other console you start gdb
176
177Debugging of U-Boot Before Relocation
178^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
179
180Before relocation, the addresses in the ELF file can be used without any problems
181by connecting to the gdb server localhost:1234
182
183.. code-block:: none
184
185   # mipsel-unknown-linux-gnu-gdb u-boot
186   GNU gdb 6.6
187   Copyright (C) 2006 Free Software Foundation, Inc.
188   GDB is free software, covered by the GNU General Public License, and you are
189   welcome to change it and/or distribute copies of it under certain conditions.
190   Type "show copying" to see the conditions.
191   There is absolutely no warranty for GDB.  Type "show warranty" for details.
192   This GDB was configured as "--host=i486-linux-gnu --target=mipsel-unknown-linux-gnu"...
193   (gdb)  target remote localhost:1234
194   Remote debugging using localhost:1234
195   _start () at start.S:64
196   64		RVECENT(reset,0)	/* U-Boot entry point */
197   Current language:  auto; currently asm
198   (gdb)  b board.c:289
199   Breakpoint 1 at 0xbfc00cc8: file board.c, line 289.
200   (gdb) c
201   Continuing.
202
203   Breakpoint 1, board_init_f (bootflag=<value optimized out>) at board.c:290
204   290		relocate_code (addr_sp, id, addr);
205   Current language:  auto; currently c
206   (gdb) p/x addr
207   $1 = 0x87fa0000
208
209Debugging of U-Boot After Relocation
210^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
211
212For debugging U-Boot after relocation we need to know the address to which
213U-Boot relocates itself to 0x87fa0000 by default.
214And replace the symbol table to this offset.
215
216.. code-block:: none
217
218   (gdb) symbol-file
219   Discard symbol table from `/private/u-boot-arm/u-boot'? (y or n) y
220   Error in re-setting breakpoint 1:
221   No symbol table is loaded.  Use the "file" command.
222   No symbol file now.
223   (gdb) add-symbol-file u-boot 0x87fa0000
224   add symbol table from file "u-boot" at
225   	.text_addr = 0x87fa0000
226   (y or n) y
227   Reading symbols from /private/u-boot-arm/u-boot...done.
228   Breakpoint 1 at 0x87fa0cc8: file board.c, line 289.
229   (gdb) c
230   Continuing.
231
232   Program received signal SIGINT, Interrupt.
233   0xffffffff87fa0de4 in udelay (usec=<value optimized out>) at time.c:78
234   78		while ((tmo - read_c0_count()) < 0x7fffffff)
235