Merge git://git.denx.de/u-boot into u-boot
[platform/kernel/u-boot.git] / doc / README.qemu_mips
1
2 Notes for the Qemu MIPS port
3
4 I) Example usage:
5
6 # ln -s u-boot.bin mips_bios.bin
7 start it:
8 qemu-system-mips -L . /dev/null -nographic
9
10 or
11
12 if you use a qemu version after commit 4224
13
14 create image:
15 # dd of=flash bs=1k count=4k if=/dev/zero
16 # dd of=flash bs=1k conv=notrunc if=u-boot.bin
17 start it:
18 # qemu-system-mips -M mips -pflash flash -monitor null -nographic
19
20 2) Download kernel + initrd
21
22 On ftp://ftp.denx.de/pub/contrib/Jean-Christophe_Plagniol-Villard/qemu_mips/
23 you can downland
24
25 #config to build the kernel
26 qemu_mips_defconfig
27 #patch to fix mips interupt init on 2.6.24.y kernel
28 qemu_mips_kernel.patch
29 initrd.gz
30 vmlinux
31 vmlinux.bin
32 System.map
33
34 4) Generate uImage
35
36 # 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
37
38 5) Copy uImage to Flash
39 # dd if=uImage bs=1k conv=notrunc seek=224 of=flash
40
41 6) Generate Ide Disk
42
43 # dd of=ide bs=1k cout=100k if=/dev/zero
44
45 # sfdisk -C 261 -d ide
46 # partition table of ide
47 unit: sectors
48
49      ide1 : start=       63, size=    32067, Id=83
50      ide2 : start=    32130, size=    32130, Id=83
51      ide3 : start=    64260, size=  4128705, Id=83
52      ide4 : start=        0, size=        0, Id= 0
53
54 7) Copy to ide
55
56 # dd if=uImage bs=512 conv=notrunc seek=63 of=ide
57
58 8) Generate ext2 on part 2 on Copy uImage and initrd.gz
59
60 # Attached as loop device ide offset = 32130 * 512
61 # losetup -o 16450560 -f ide
62 # Format as ext2 ( arg2 : nb blocks)
63 # mke2fs /dev/loop0 16065
64 # losetup -d /dev/loop0
65 # Mount and copy uImage and initrd.gz to it
66 # mount -o loop,offset=16450560 -t ext2 ide /mnt
67 # mkdir /mnt/boot
68 # cp {initrd.gz,uImage} /mnt/boot/
69 # Umount it
70 # umount /mnt
71
72 9) Set Environment
73
74 setenv rd_start 0x80800000
75 setenv rd_size 2663940
76 setenv kernel BFC38000
77 setenv oad_addr 80500000
78 setenv load_addr2 80F00000
79 setenv kernel_flash BFC38000
80 setenv load_addr_hello 80200000
81 setenv bootargs 'root=/dev/ram0 init=/bin/sh'
82 setenv load_rd_ext2 'ide res; ext2load ide 0:2 ${rd_start} /boot/initrd.gz'
83 setenv load_rd_tftp 'tftp ${rd_start} /initrd.gz'
84 setenv load_kernel_hda 'ide res; diskboot ${load_addr} 0:2'
85 setenv load_kernel_ext2 'ide res; ext2load ide 0:2 ${load_addr} /boot/uImage'
86 setenv load_kernel_tftp 'tftp ${load_addr} /qemu_mips/uImage'
87 setenv boot_ext2_ext2 'run load_rd_ext2; run load_kernel_ext2; run addmisc; bootm ${load_addr}'
88 setenv boot_ext2_flash 'run load_rd_ext2; run addmisc; bootm ${kernel_flash}'
89 setenv boot_ext2_hda 'run load_rd_ext2; run load_kernel_hda; run addmisc; bootm ${load_addr}'
90 setenv boot_ext2_tftp 'run load_rd_ext2; run load_kernel_tftp; run addmisc; bootm ${load_addr}'
91 setenv boot_tftp_hda 'run load_rd_tftp; run load_kernel_hda; run addmisc; bootm ${load_addr}'
92 setenv boot_tftp_ext2 'run load_rd_tftp; run load_kernel_ext2; run addmisc; bootm ${load_addr}'
93 setenv boot_tftp_flash 'run load_rd_tftp; run addmisc; bootm ${kernel_flash}'
94 setenv boot_tftp_tftp 'run load_rd_tftp; run load_kernel_tftp; run addmisc; bootm ${load_addr}'
95 setenv load_hello_tftp 'tftp ${load_addr_hello} /examples/hello_world.bin'
96 setenv go_tftp 'run load_hello_tftp; go ${load_addr_hello}'
97 setenv addmisc 'setenv bootargs ${bootargs} console=ttyS0,${baudrate} rd_start=${rd_start} rd_size=${rd_size} ethaddr=${ethaddr}'
98 setenv bootcmd 'run boot_tftp_flash'
99
100 10) Now you can boot from flash, ide, ide+ext2 and tfp
101
102 # qemu-system-mips -M mips -pflash flash -monitor null -nographic -net nic -net user -tftp `pwd` -hda ide
103
104 II) How to debug U-Boot
105
106 In order to debug U-Boot you need to start qemu with gdb server support (-s)
107 and waiting the connection to start the CPU (-S)
108
109 # qemu-system-mips -S -s -M mips -pflash flash -monitor null -nographic -net nic -net user -tftp `pwd` -hda ide
110
111 in an other console you start gdb
112
113 1) Debugging of U-Boot Before Relocation
114
115 Before relocation, the addresses in the ELF file can be used without any problems
116 by connecting to the gdb server localhost:1234
117
118 # mipsel-unknown-linux-gnu-gdb u-boot
119 GNU gdb 6.6
120 Copyright (C) 2006 Free Software Foundation, Inc.
121 GDB is free software, covered by the GNU General Public License, and you are
122 welcome to change it and/or distribute copies of it under certain conditions.
123 Type "show copying" to see the conditions.
124 There is absolutely no warranty for GDB.  Type "show warranty" for details.
125 This GDB was configured as "--host=i486-linux-gnu --target=mipsel-unknown-linux-gnu"...
126 (gdb)  target remote localhost:1234
127 Remote debugging using localhost:1234
128 _start () at start.S:64
129 64              RVECENT(reset,0)        /* U-boot entry point */
130 Current language:  auto; currently asm
131 (gdb)  b board.c:289
132 Breakpoint 1 at 0xbfc00cc8: file board.c, line 289.
133 (gdb) c
134 Continuing.
135
136 Breakpoint 1, board_init_f (bootflag=<value optimized out>) at board.c:290
137 290             relocate_code (addr_sp, id, addr);
138 Current language:  auto; currently c
139 (gdb) p/x addr
140 $1 = 0x87fa0000
141
142 2) Debugging of U-Boot After Relocation
143
144 For debugging U-Boot after relocation we need to know the address to which
145 U-Boot relocates itself to 0x87fa0000 by default.
146 And replace the symbol table to this offset.
147
148 (gdb) symbol-file
149 Discard symbol table from `/private/u-boot-arm/u-boot'? (y or n) y
150 Error in re-setting breakpoint 1:
151 No symbol table is loaded.  Use the "file" command.
152 No symbol file now.
153 (gdb) add-symbol-file u-boot 0x87fa0000
154 add symbol table from file "u-boot" at
155         .text_addr = 0x87fa0000
156 (y or n) y
157 Reading symbols from /private/u-boot-arm/u-boot...done.
158 Breakpoint 1 at 0x87fa0cc8: file board.c, line 289.
159 (gdb) c
160 Continuing.
161
162 Program received signal SIGINT, Interrupt.
163 0xffffffff87fa0de4 in udelay (usec=<value optimized out>) at time.c:78
164 78              while ((tmo - read_c0_count()) < 0x7fffffff)