Makefile 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # tools
  2. GRUB_DIR := grub-2.04
  3. OS_NAME := rtthread
  4. QEMU := qemu-system-i386
  5. GDB := gdb
  6. TRUNC := truncate
  7. MCOPY := mcopy
  8. # file name
  9. DISK0 := disk0.img
  10. DISK1 := disk1.img
  11. SZ_DISK0 := 64M
  12. SZ_DISK1 := 64M
  13. MKFS := mkfs.fat
  14. ROM_DIR := ../../../userapps/root
  15. RTTHREAD_ELF:= rtthread.elf
  16. # config graphic window ? (y/n)
  17. QEMU_WINDOW ?= n
  18. # config netcard ? (y/n)
  19. QEMU_NETCARD ?= y
  20. # netcard name: rtl8139/pcnet
  21. QEMU_NETCARD_NAME ?=pcnet
  22. # netcard type: tap/user
  23. QEMU_NET_MODE ?=user
  24. # qemu args
  25. QEMU_ARGS := -m 256m \
  26. -rtc base=localtime \
  27. -boot d \
  28. -cdrom $(OS_NAME).iso
  29. ifeq ($(QEMU_WINDOW),y)
  30. QEMU_ARGS += -serial stdio
  31. else
  32. QEMU_ARGS += -nographic
  33. endif
  34. ifeq ($(QEMU_NETCARD),y)
  35. QEMU_ARGS += -net nic,model=$(QEMU_NETCARD_NAME)
  36. ifeq ($(QEMU_NET_MODE),tap)
  37. QEMU_ARGS += -net tap,ifname=tap0,script=no,downscript=no
  38. else
  39. QEMU_ARGS += -net user
  40. endif
  41. endif
  42. QEMU_ARGS +=-drive id=disk0,file=$(DISK0),format=raw,if=none \
  43. -drive id=disk1,file=$(DISK1),format=raw,if=none \
  44. -device ahci,id=ahci \
  45. -device ide-hd,drive=disk0,bus=ahci.0 \
  46. -device ide-hd,drive=disk1,bus=ahci.1
  47. all: makeiso makedisk
  48. makeiso: $(RTTHREAD_ELF)
  49. @$(MAKE) -s -C $(GRUB_DIR) KERNEL=$(RTTHREAD_ELF) OS_NAME=$(OS_NAME)
  50. makedisk:
  51. $(TRUNC) --size $(SZ_DISK0) $(DISK0)
  52. $(TRUNC) --size $(SZ_DISK1) $(DISK1)
  53. $(MKFS) -F32 $(DISK0)
  54. -$(MCOPY) -i $(DISK0) $(ROM_DIR)/bin/*.elf ::
  55. run: makedisk makeiso
  56. $(QEMU) $(QEMU_ARGS)
  57. qemudbg:
  58. $(QEMU) -S -gdb tcp::10001,ipv4 $(QEMU_ARGS)
  59. # 连接gdb server: target remote localhost:10001
  60. gdb:
  61. $(GDB) $(RTTHREAD_ELF)
  62. clean:
  63. @$(MAKE) -s -C $(GRUB_DIR) clean