image.mk 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. # SPDX-License-Identifier: GPL-2.0
  2. #==============================================================================
  3. # Build the SD/flash image for StarFive VisionFive V1.
  4. #==============================================================================
  5. #TF 卡分区信息:
  6. VISIONFIVE_V1_BOOT_TYPE = EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
  7. VISIONFIVE_V1_ROOTFS_TYPE = 0FC63DAF-8483-4772-8E79-3D69D8477DE4
  8. VISIONFIVE_V1_BOOTLOADER_TYPE = 5B193300-FC78-40CD-8002-E86C45580B47
  9. VISIONFIVE_V1_SD_IMAGE_DIR=$(SDK_OUTPUT_DIR)/image$(CONFIG_BOARD_SUBFIX)
  10. VISIONFIVE_V1_SD_IMAGE_FILE=flash$(CONFIG_BOARD_SUBFIX).img
  11. #for debug
  12. #CONFIG_VISIONFIVE_V1_UENV_PATH=$(SDK_PREBUILD_DIR)/image$(CONFIG_BOARD_SUBFIX)/uEnv.txt
  13. #CONFIG_VISIONFIVE_V1_ROOTFS_IMAGE_PATH=$(SDK_PREBUILD_DIR)/image$(CONFIG_BOARD_SUBFIX)/test.ext4
  14. #CONFIG_VISIONFIVE_V1_BOOT_START=4096
  15. #CONFIG_VISIONFIVE_V1_BOOT_SECTORS=466943
  16. #CONFIG_VISIONFIVE_V1_BOOTLOADER_START=471040
  17. #CONFIG_VISIONFIVE_V1_BOOTLOADER_SECTORS=2047
  18. #CONFIG_VISIONFIVE_V1_ROOTFS_START=475136
  19. #CONFIG_VISIONFIVE_V1_ROOTFS_SECTORS=409600
  20. #for debug
  21. __VISIONFIVE_V1_ROOTFS_IMAGE_PATH=$(shell cd $(VISIONFIVE_V1_SD_IMAGE_DIR); realpath $(CONFIG_VISIONFIVE_V1_ROOTFS_IMAGE_PATH))
  22. VISIONFIVE_V1_ROOTFS_IMAGE_SIZE=$(shell \
  23. expr `wc -c $(__VISIONFIVE_V1_ROOTFS_IMAGE_PATH) | awk '{print $$1}'` + 4096)
  24. VISIONFIVE_V1_ROOTFS_SECTORS=$(shell expr $(VISIONFIVE_V1_ROOTFS_IMAGE_SIZE) / 4096 \* 8)
  25. VISIONFIVE_V1_BOOT_END=$(shell expr \
  26. $(CONFIG_VISIONFIVE_V1_BOOT_START) + \
  27. $(CONFIG_VISIONFIVE_V1_BOOT_SECTORS))
  28. VISIONFIVE_V1_BOOTLOADER_END=$(shell expr \
  29. $(CONFIG_VISIONFIVE_V1_BOOTLOADER_START) + \
  30. $(CONFIG_VISIONFIVE_V1_BOOTLOADER_SECTORS))
  31. #VISIONFIVE_V1_ROOTFS_END=$(shell expr \
  32. # $(CONFIG_VISIONFIVE_V1_ROOTFS_START) + \
  33. # $(CONFIG_VISIONFIVE_V1_ROOTFS_SECTORS))
  34. #0 means 'to the end of image'
  35. VISIONFIVE_V1_ROOTFS_END=0
  36. VISIONFIVE_V1_SD_ROOTFS_PART_NUM=3
  37. VISIONFIVE_V1_SD_IMAGE_SECTORS_NUM=$(shell expr \
  38. $(CONFIG_VISIONFIVE_V1_ROOTFS_START) + \
  39. $(VISIONFIVE_V1_ROOTFS_SECTORS))
  40. #4K = 512 * 8
  41. VISIONFIVE_V1_SD_IMAGE_BLK_SECTORS=8
  42. VISIONFIVE_V1_SD_IMAGE_COUNT=$(shell expr \
  43. $(VISIONFIVE_V1_SD_IMAGE_SECTORS_NUM) / \
  44. $(VISIONFIVE_V1_SD_IMAGE_BLK_SECTORS) + \
  45. 5)
  46. visionfive_v1_create_image:
  47. mkdir -p $(VISIONFIVE_V1_SD_IMAGE_DIR)/
  48. dd iflag=fullblock bs=4K count=$(VISIONFIVE_V1_SD_IMAGE_COUNT) \
  49. if=/dev/zero \
  50. of=$(VISIONFIVE_V1_SD_IMAGE_DIR)/$(VISIONFIVE_V1_SD_IMAGE_FILE)
  51. tree -h --timefmt "%Y/%m/%d %H:%M:%S" $(VISIONFIVE_V1_SD_IMAGE_DIR)
  52. visionfive_v1_format_image: visionfive_v1_create_image
  53. sgdisk --clear -g \
  54. --new=1:$(CONFIG_VISIONFIVE_V1_BOOT_START):$(VISIONFIVE_V1_BOOT_END) \
  55. --change-name=1:"Vfat Boot" \
  56. --typecode=1:$(VISIONFIVE_V1_BOOT_TYPE) \
  57. --new=2:$(CONFIG_VISIONFIVE_V1_BOOTLOADER_START):$(VISIONFIVE_V1_BOOTLOADER_END) \
  58. --change-name=2:uboot \
  59. --typecode=2:$(VISIONFIVE_V1_BOOTLOADER_TYPE) \
  60. --new=3:$(CONFIG_VISIONFIVE_V1_ROOTFS_START):$(VISIONFIVE_V1_ROOTFS_END) \
  61. --change-name=3:root \
  62. --typecode=3:$(VISIONFIVE_V1_ROOTFS_TYPE) \
  63. $(VISIONFIVE_V1_SD_IMAGE_DIR)/$(VISIONFIVE_V1_SD_IMAGE_FILE)
  64. visionfive_v1_make_image: visionfive_v1_format_image
  65. pushd $(VISIONFIVE_V1_SD_IMAGE_DIR); \
  66. mkdir -p mnt;\
  67. LOOP_DEVS=`sudo kpartx -av $(VISIONFIVE_V1_SD_IMAGE_FILE) | awk 'NR==1' | awk '{print $$3}'`;\
  68. BOOT_LOOP_DEV=$${LOOP_DEVS%p1*}p1; \
  69. BL_LOOP_DEV=$${LOOP_DEVS%p1*}p2; \
  70. ROOT_LOOP_DEV=$${LOOP_DEVS%p1*}p3; \
  71. sudo mkfs.vfat /dev/mapper/$${BOOT_LOOP_DEV};\
  72. mkdir -p mnt/boot;\
  73. sudo mount /dev/mapper/$${BOOT_LOOP_DEV} mnt/boot; sleep 3; \
  74. sudo cp -rf $(SDK_OUTPUT_DIR)/$(CONFIG_CONFIG_FILE).fit \
  75. $(CONFIG_VISIONFIVE_V1_UENV_PATH) mnt/boot/ ;\
  76. tree -h --timefmt "%Y/%m/%d %H:%M:%S" mnt/boot/; \
  77. sync; sleep 3; sudo umount mnt/boot; rm -rf mnt; \
  78. sudo dd if=$(join $(UBOOT_INSTALL_DIR), $(CONFIG_BOARD_SUBFIX))/u-boot.bin \
  79. of=/dev/mapper/$${BL_LOOP_DEV} bs=4K; sync; \
  80. sudo dd if=$(__VISIONFIVE_V1_ROOTFS_IMAGE_PATH) \
  81. of=/dev/mapper/$${ROOT_LOOP_DEV} bs=4K; sync; sleep 3;\
  82. sudo kpartx -d $(VISIONFIVE_V1_SD_IMAGE_DIR)/$(VISIONFIVE_V1_SD_IMAGE_FILE); sync; \
  83. popd
  84. #CONFIG_VISIONFIVE_V1_SD_DEV=sdg
  85. visionfive_v1_flash_sd:
  86. @if [ -b /dev/$(CONFIG_VISIONFIVE_V1_SD_DEV) ]; then \
  87. whiptail \
  88. --title "!!!Warning: DISK data will be OVERWRITED!!!" \
  89. --yesno "Warning:\n\
  90. \nDo you really want to OVERWRITED /dev/$(CONFIG_VISIONFIVE_V1_SD_DEV)?\n\
  91. \nPlease make sure that you have backed up your data!" \
  92. 12 60 || exit 0;\
  93. else \
  94. echo /dev/$(CONFIG_VISIONFIVE_V1_SD_DEV) is not a block device.; exit 1;\
  95. fi;\
  96. sudo dd if=$(VISIONFIVE_V1_SD_IMAGE_DIR)/$(VISIONFIVE_V1_SD_IMAGE_FILE) \
  97. of=/dev/$(CONFIG_VISIONFIVE_V1_SD_DEV) bs=4M; sync;\
  98. sudo umount /dev/$(CONFIG_VISIONFIVE_V1_SD_DEV)$(VISIONFIVE_V1_SD_ROOTFS_PART_NUM);\
  99. sudo growpart /dev/$(CONFIG_VISIONFIVE_V1_SD_DEV) $(VISIONFIVE_V1_SD_ROOTFS_PART_NUM);\
  100. sudo e2fsck -f /dev/$(CONFIG_VISIONFIVE_V1_SD_DEV)$(VISIONFIVE_V1_SD_ROOTFS_PART_NUM);\
  101. sudo resize2fs /dev/$(CONFIG_VISIONFIVE_V1_SD_DEV)$(VISIONFIVE_V1_SD_ROOTFS_PART_NUM);\
  102. sudo fsck.ext4 /dev/$(CONFIG_VISIONFIVE_V1_SD_DEV)$(VISIONFIVE_V1_SD_ROOTFS_PART_NUM)