1 By Vlad Lungu vlad.lungu@windriver.com 2007-Oct-01
2 ----------------------------------------
3 Qemu is a full system emulator. See
5 http://www.nongnu.org/qemu/
9 Supports the "-M mips" configuration of qemu: serial,NE2000,IDE.
10 Supports little and big endian as well as 32 bit and 64 bit.
11 Derived from au1x00 with a lot of things cut out.
13 Supports emulated flash (patch Jean-Christophe PLAGNIOL-VILLARD) with
14 recent qemu versions. When using emulated flash, launch with
15 -pflash <filename> and erase mips_bios.bin.
18 Notes for the Qemu MIPS port
19 ----------------------------
23 Using u-boot.bin as ROM (replaces Qemu monitor):
27 # qemu-system-mips -M mips -bios u-boot.bin -nographic
29 32 bit, little endian:
31 # qemu-system-mipsel -M mips -bios u-boot.bin -nographic
35 # qemu-system-mips64 -cpu MIPS64R2-generic -M mips -bios u-boot.bin -nographic
37 64 bit, little endian:
39 # qemu-system-mips64el -cpu MIPS64R2-generic -M mips -bios u-boot.bin -nographic
41 or using u-boot.bin from emulated flash:
43 if you use a qemu version after commit 4224
46 # dd of=flash bs=1k count=4k if=/dev/zero
47 # dd of=flash bs=1k conv=notrunc if=u-boot.bin
49 # qemu-system-mips[64][el] [-cpu MIPS64R2-generic] -M mips -pflash flash -nographic
51 2) Download kernel + initrd
53 On ftp://ftp.denx.de/pub/contrib/Jean-Christophe_Plagniol-Villard/qemu_mips/
56 #config to build the kernel
58 #patch to fix mips interrupt init on 2.6.24.y kernel
59 qemu_mips_kernel.patch
67 # 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
69 5) Copy uImage to Flash
70 # dd if=uImage bs=1k conv=notrunc seek=224 of=flash
74 # dd of=ide bs=1k cout=100k if=/dev/zero
76 # sfdisk -C 261 -d ide
77 # partition table of ide
80 ide1 : start= 63, size= 32067, Id=83
81 ide2 : start= 32130, size= 32130, Id=83
82 ide3 : start= 64260, size= 4128705, Id=83
83 ide4 : start= 0, size= 0, Id= 0
87 # dd if=uImage bs=512 conv=notrunc seek=63 of=ide
89 8) Generate ext2 on part 2 on Copy uImage and initrd.gz
91 # Attached as loop device ide offset = 32130 * 512
92 # losetup -o 16450560 -f ide
93 # Format as ext2 ( arg2 : nb blocks)
94 # mke2fs /dev/loop0 16065
95 # losetup -d /dev/loop0
96 # Mount and copy uImage and initrd.gz to it
97 # mount -o loop,offset=16450560 -t ext2 ide /mnt
99 # cp {initrd.gz,uImage} /mnt/boot/
105 setenv rd_start 0x80800000
106 setenv rd_size 2663940
107 setenv kernel BFC38000
108 setenv oad_addr 80500000
109 setenv load_addr2 80F00000
110 setenv kernel_flash BFC38000
111 setenv load_addr_hello 80200000
112 setenv bootargs 'root=/dev/ram0 init=/bin/sh'
113 setenv load_rd_ext2 'ide res; ext2load ide 0:2 ${rd_start} /boot/initrd.gz'
114 setenv load_rd_tftp 'tftp ${rd_start} /initrd.gz'
115 setenv load_kernel_hda 'ide res; diskboot ${load_addr} 0:2'
116 setenv load_kernel_ext2 'ide res; ext2load ide 0:2 ${load_addr} /boot/uImage'
117 setenv load_kernel_tftp 'tftp ${load_addr} /qemu_mips/uImage'
118 setenv boot_ext2_ext2 'run load_rd_ext2; run load_kernel_ext2; run addmisc; bootm ${load_addr}'
119 setenv boot_ext2_flash 'run load_rd_ext2; run addmisc; bootm ${kernel_flash}'
120 setenv boot_ext2_hda 'run load_rd_ext2; run load_kernel_hda; run addmisc; bootm ${load_addr}'
121 setenv boot_ext2_tftp 'run load_rd_ext2; run load_kernel_tftp; run addmisc; bootm ${load_addr}'
122 setenv boot_tftp_hda 'run load_rd_tftp; run load_kernel_hda; run addmisc; bootm ${load_addr}'
123 setenv boot_tftp_ext2 'run load_rd_tftp; run load_kernel_ext2; run addmisc; bootm ${load_addr}'
124 setenv boot_tftp_flash 'run load_rd_tftp; run addmisc; bootm ${kernel_flash}'
125 setenv boot_tftp_tftp 'run load_rd_tftp; run load_kernel_tftp; run addmisc; bootm ${load_addr}'
126 setenv load_hello_tftp 'tftp ${load_addr_hello} /examples/hello_world.bin'
127 setenv go_tftp 'run load_hello_tftp; go ${load_addr_hello}'
128 setenv addmisc 'setenv bootargs ${bootargs} console=ttyS0,${baudrate} rd_start=${rd_start} rd_size=${rd_size} ethaddr=${ethaddr}'
129 setenv bootcmd 'run boot_tftp_flash'
131 10) Now you can boot from flash, ide, ide+ext2 and tfp
133 # qemu-system-mips -M mips -pflash flash -monitor null -nographic -net nic -net user -tftp `pwd` -hda ide
135 II) How to debug U-Boot
137 In order to debug U-Boot you need to start qemu with gdb server support (-s)
138 and waiting the connection to start the CPU (-S)
140 # qemu-system-mips -S -s -M mips -pflash flash -monitor null -nographic -net nic -net user -tftp `pwd` -hda ide
142 in an other console you start gdb
144 1) Debugging of U-Boot Before Relocation
146 Before relocation, the addresses in the ELF file can be used without any problems
147 by connecting to the gdb server localhost:1234
149 # mipsel-unknown-linux-gnu-gdb u-boot
151 Copyright (C) 2006 Free Software Foundation, Inc.
152 GDB is free software, covered by the GNU General Public License, and you are
153 welcome to change it and/or distribute copies of it under certain conditions.
154 Type "show copying" to see the conditions.
155 There is absolutely no warranty for GDB. Type "show warranty" for details.
156 This GDB was configured as "--host=i486-linux-gnu --target=mipsel-unknown-linux-gnu"...
157 (gdb) target remote localhost:1234
158 Remote debugging using localhost:1234
159 _start () at start.S:64
160 64 RVECENT(reset,0) /* U-Boot entry point */
161 Current language: auto; currently asm
163 Breakpoint 1 at 0xbfc00cc8: file board.c, line 289.
167 Breakpoint 1, board_init_f (bootflag=<value optimized out>) at board.c:290
168 290 relocate_code (addr_sp, id, addr);
169 Current language: auto; currently c
173 2) Debugging of U-Boot After Relocation
175 For debugging U-Boot after relocation we need to know the address to which
176 U-Boot relocates itself to 0x87fa0000 by default.
177 And replace the symbol table to this offset.
180 Discard symbol table from `/private/u-boot-arm/u-boot'? (y or n) y
181 Error in re-setting breakpoint 1:
182 No symbol table is loaded. Use the "file" command.
184 (gdb) add-symbol-file u-boot 0x87fa0000
185 add symbol table from file "u-boot" at
186 .text_addr = 0x87fa0000
188 Reading symbols from /private/u-boot-arm/u-boot...done.
189 Breakpoint 1 at 0x87fa0cc8: file board.c, line 289.
193 Program received signal SIGINT, Interrupt.
194 0xffffffff87fa0de4 in udelay (usec=<value optimized out>) at time.c:78
195 78 while ((tmo - read_c0_count()) < 0x7fffffff)