Merge branch 'master' of git://git.denx.de/u-boot-mmc
[oweals/u-boot.git] / doc / README.qemu-mips
1 By Vlad Lungu vlad.lungu@windriver.com 2007-Oct-01
2 ----------------------------------------
3 Qemu is a full system emulator. See
4
5 http://www.nongnu.org/qemu/
6
7 Limitations & comments
8 ----------------------
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.
12
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.
16
17
18 Notes for the Qemu MIPS port
19 ----------------------------
20
21 I) Example usage:
22
23 Using u-boot.bin as ROM (replaces Qemu monitor):
24
25 32 bit, big endian:
26 # make qemu_mips
27 # qemu-system-mips -M mips -bios u-boot.bin -nographic
28
29 32 bit, little endian:
30 # make qemu_mipsel
31 # qemu-system-mipsel -M mips -bios u-boot.bin -nographic
32
33 64 bit, big endian:
34 # make qemu_mips64
35 # qemu-system-mips64 -cpu MIPS64R2-generic -M mips -bios u-boot.bin -nographic
36
37 64 bit, little endian:
38 # make qemu_mips64el
39 # qemu-system-mips64el -cpu MIPS64R2-generic -M mips -bios u-boot.bin -nographic
40
41 or using u-boot.bin from emulated flash:
42
43 if you use a qemu version after commit 4224
44
45 create image:
46 # dd of=flash bs=1k count=4k if=/dev/zero
47 # dd of=flash bs=1k conv=notrunc if=u-boot.bin
48 start it (see above):
49 # qemu-system-mips[64][el] [-cpu MIPS64R2-generic] -M mips -pflash flash -nographic
50
51 2) Download kernel + initrd
52
53 On ftp://ftp.denx.de/pub/contrib/Jean-Christophe_Plagniol-Villard/qemu_mips/
54 you can downland
55
56 #config to build the kernel
57 qemu_mips_defconfig
58 #patch to fix mips interrupt init on 2.6.24.y kernel
59 qemu_mips_kernel.patch
60 initrd.gz
61 vmlinux
62 vmlinux.bin
63 System.map
64
65 4) Generate uImage
66
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
68
69 5) Copy uImage to Flash
70 # dd if=uImage bs=1k conv=notrunc seek=224 of=flash
71
72 6) Generate Ide Disk
73
74 # dd of=ide bs=1k cout=100k if=/dev/zero
75
76 # sfdisk -C 261 -d ide
77 # partition table of ide
78 unit: sectors
79
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
84
85 7) Copy to ide
86
87 # dd if=uImage bs=512 conv=notrunc seek=63 of=ide
88
89 8) Generate ext2 on part 2 on Copy uImage and initrd.gz
90
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
98 # mkdir /mnt/boot
99 # cp {initrd.gz,uImage} /mnt/boot/
100 # Umount it
101 # umount /mnt
102
103 9) Set Environment
104
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'
130
131 10) Now you can boot from flash, ide, ide+ext2 and tfp
132
133 # qemu-system-mips -M mips -pflash flash -monitor null -nographic -net nic -net user -tftp `pwd` -hda ide
134
135 II) How to debug U-Boot
136
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)
139
140 # qemu-system-mips -S -s -M mips -pflash flash -monitor null -nographic -net nic -net user -tftp `pwd` -hda ide
141
142 in an other console you start gdb
143
144 1) Debugging of U-Boot Before Relocation
145
146 Before relocation, the addresses in the ELF file can be used without any problems
147 by connecting to the gdb server localhost:1234
148
149 # mipsel-unknown-linux-gnu-gdb u-boot
150 GNU gdb 6.6
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
162 (gdb)  b board.c:289
163 Breakpoint 1 at 0xbfc00cc8: file board.c, line 289.
164 (gdb) c
165 Continuing.
166
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
170 (gdb) p/x addr
171 $1 = 0x87fa0000
172
173 2) Debugging of U-Boot After Relocation
174
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.
178
179 (gdb) symbol-file
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.
183 No symbol file now.
184 (gdb) add-symbol-file u-boot 0x87fa0000
185 add symbol table from file "u-boot" at
186         .text_addr = 0x87fa0000
187 (y or n) y
188 Reading symbols from /private/u-boot-arm/u-boot...done.
189 Breakpoint 1 at 0x87fa0cc8: file board.c, line 289.
190 (gdb) c
191 Continuing.
192
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)