README.qemu-mips 6.5 KB

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