generic.mk 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. #
  2. # Copyright (C) 2008-2012 OpenWrt.org
  3. #
  4. # This is free software, licensed under the GNU General Public License v2.
  5. # See /LICENSE for more information.
  6. #
  7. ### DO NOT INDENT LINES CONTAINING $(call xyz) AS THIS MAY CHANGE THE CONTEXT
  8. ### OF THE FIRST LINE IN THE CALLED VARIABLE (NOTE: variable!)
  9. ### see http://www.gnu.org/software/make/manual/html_node/Call-Function.html#Call-Function
  10. ### ACTUALLY IT IS A SIMPLE MACRO EXPANSION
  11. ### use round brackets for make variables, and curly brackets for shell variables
  12. ## Kernel mtd partition size in KiB
  13. KERNEL_MTD_SIZE:=1024
  14. # Netgear WNR854T: erase size is 128KiB = 0x00020000 = 131072
  15. ERASE_SIZE_128K:=128
  16. # Linksys WRT350N v2: erase size is 64KiB = 0x00010000 = 65536
  17. ERASE_SIZE_64K:=64
  18. # define JFFS2 sizes for include/image.mk
  19. JFFS2_BLOCKSIZE:=64k 128k
  20. ###
  21. ### Image/Prepare
  22. ###
  23. define Image/Prepare
  24. ### Dummy comment for indented calls of Image/Prepare
  25. cp '$(LINUX_DIR)/arch/arm/boot/zImage' '$(BIN_DIR)/$(IMG_PREFIX)-zImage'
  26. endef
  27. ###
  28. ### Image/BuildKernel
  29. ###
  30. define Image/BuildKernel
  31. ### Dummy comment for indented calls of Image/BuildKernel
  32. ## Netgear WN802T: mach id 3306 (0x0cea)
  33. $(call Image/BuildKernel/ARM/zImage,wn802t,"\x0c\x1c\xa0\xe3\xea\x10\x81\xe3")
  34. $(call Image/BuildKernel/ARM/uImage,wn802t)
  35. ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) # nothing more to do for a ramdisk build
  36. $(call Image/BuildKernel/JFFS2uImage,wn802t,$(ERASE_SIZE_64K),uImage)
  37. $(call Image/Default/FileSizeCheck,$(KDIR)/wn802t-uImage.jffs2,$(shell expr $(KERNEL_MTD_SIZE) \* 1024))
  38. endif
  39. ## Netgear WNR854T: mach id 1801 (0x0709)
  40. $(call Image/BuildKernel/ARM/zImage,wnr854t,"\x07\x1c\xa0\xe3\x09\x10\x81\xe3")
  41. $(call Image/BuildKernel/ARM/uImage,wnr854t)
  42. ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) # nothing more to do for a ramdisk build
  43. $(call Image/BuildKernel/JFFS2uImage,wnr854t,$(ERASE_SIZE_128K),uImage)
  44. $(call Image/Default/FileSizeCheck,$(KDIR)/wnr854t-uImage.jffs2,$(shell expr $(KERNEL_MTD_SIZE) \* 1024))
  45. endif
  46. ## Linksys WRT350N v2: mach id 1633 (0x0661)
  47. $(call Image/BuildKernel/ARM/zImage,wrt350nv2,"\x06\x1c\xa0\xe3\x61\x10\x81\xe3")
  48. $(call Image/BuildKernel/ARM/uImage,wrt350nv2)
  49. ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) # nothing more to do for a ramdisk build
  50. $(call Image/Default/FileSizeCheck,$(KDIR)/wrt350nv2-uImage,$(shell expr $(KERNEL_MTD_SIZE) \* 1024))
  51. endif
  52. endef
  53. define Image/BuildKernel/ARM/zImage
  54. # merge machine id and regular zImage into one file
  55. # parameters: 1 = machine name, 2 = machine id as string in quotes
  56. # $(BOARD) kernel zImage for $(1)
  57. echo -en $(2) > '$(KDIR)/$(1)-zImage'
  58. cat '$(LINUX_DIR)/arch/arm/boot/zImage' >> '$(KDIR)/$(1)-zImage'
  59. cp '$(KDIR)/$(1)-zImage' '$(BIN_DIR)/openwrt-$(1)-zImage'
  60. endef
  61. define Image/BuildKernel/ARM/uImage
  62. # create uImage from zImage
  63. # parameters: 1 = machine name
  64. # $(BOARD) kernel uImage for $(1)
  65. '$(STAGING_DIR_HOST)/bin/mkimage' -A arm -O linux -T kernel \
  66. -C none -a 0x00008000 -e 0x00008000 -n 'Linux-$(LINUX_VERSION)' \
  67. -d '$(KDIR)/$(1)-zImage' '$(KDIR)/$(1)-uImage'
  68. cp '$(KDIR)/$(1)-uImage' '$(BIN_DIR)/openwrt-$(1)-uImage'
  69. endef
  70. define Image/BuildKernel/JFFS2uImage
  71. # create JFFS2 partition with uImage file (result is already padded to erase size)
  72. # parameters: 1 = machine name, 2 = erase size in KiB, 3 = uImage file name
  73. # $(BOARD) kernel uImage for $(1) in JFFS2-$(2)k partition
  74. rm -rf '$(TMP_DIR)/$(1)_jffs2_uimage'
  75. mkdir '$(TMP_DIR)/$(1)_jffs2_uimage'
  76. cp '$(KDIR)/$(1)-uImage' '$(TMP_DIR)/$(1)_jffs2_uimage/$(3)'
  77. $(STAGING_DIR_HOST)/bin/mkfs.jffs2 --compression-mode=none --pad --little-endian --squash -e $(2)KiB -o '$(KDIR)/$(1)-uImage.jffs2' -d '$(TMP_DIR)/$(1)_jffs2_uimage'
  78. rm -rf '$(TMP_DIR)/$(1)_jffs2_uimage'
  79. endef
  80. define Image/Default/FileSizeCheck
  81. # parameters: 1 = file path, 2 = maximum size in bytes
  82. [ `stat -c %s '$(1)'` -le $(2) ] || { echo ' ERROR: $(1) too big (> $(2) bytes)'; exit 1; }
  83. endef
  84. ###
  85. ### Image/Build
  86. ###
  87. define Image/Build
  88. ### Dummy comment for indented calls of Image/Build with $(1)
  89. ## Prepare rootfs
  90. $(call Image/Build/$(1),$(1))
  91. ## Netgear WN802T
  92. $(call Image/Build/Default,$(1),wn802t,$(ERASE_SIZE_64K),$(KERNEL_MTD_SIZE),.jffs2,NG_WN802T)
  93. ## Netgear WNR854T
  94. $(call Image/Build/Default,$(1),wnr854t,$(ERASE_SIZE_128K),$(KERNEL_MTD_SIZE),.jffs2,NG_WNR854T)
  95. ## Linksys WRT350N v2
  96. $(call Image/Build/Linksys/wrt350nv2,$(1),wrt350nv2,$(ERASE_SIZE_64K),$(KERNEL_MTD_SIZE),)
  97. endef
  98. define Image/Build/squashfs
  99. $(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
  100. cp '$(KDIR)/root.squashfs' '$(BIN_DIR)/$(IMG_PREFIX)-root.squashfs'
  101. endef
  102. ## generate defines for all JFFS2 block sizes
  103. define Image/Build/jffs2/sub
  104. $(eval define Image/Build/jffs2-$(1)
  105. cp '$$(KDIR)/root.jffs2-$(1)' '$$(BIN_DIR)/$$(IMG_PREFIX)-root.jffs2-$(1)'
  106. endef)
  107. endef
  108. $(foreach SZ,$(JFFS2_BLOCKSIZE),$(call Image/Build/jffs2/sub,$(SZ)))
  109. define Image/Build/Default
  110. # parameters: 1 = rootfs type, 2 = machine name, 3 = erase size in KiB, 4 = kernel mtd size in KiB, 5 = kernel file suffix, 6 = header
  111. ifeq ($(findstring jffs2-,$(1)),jffs2-) # JFFS2: build only image fitting to erase size
  112. ifeq ($(1),jffs2-$(3)k)
  113. $(call Image/Build/Default/sysupgrade,$(1),$(2),$(4),$(5))
  114. $(call Image/Build/Default/factory,$(1),$(2),$(6))
  115. endif
  116. else
  117. ifeq ($(1),ext4) # EXT4: ignore
  118. # do nothing
  119. else # do all other images
  120. $(call Image/Build/Default/sysupgrade,$(1),$(2),$(4),$(5))
  121. $(call Image/Build/Default/factory,$(1),$(2),$(6))
  122. endif
  123. endif
  124. endef
  125. define Image/Build/Default/sysupgrade
  126. # parameters: 1 = rootfs type, 2 = machine name, 3 = pad size in KiB (kernel mtd size or erase size), 4 = kernel file suffix
  127. # $(BOARD) $(1) sysupgrade image for $(2)
  128. ( \
  129. dd if='$(KDIR)/$(2)-uImage$(4)' bs=$(3)k conv=sync; \
  130. dd if='$(KDIR)/root.$(1)'; \
  131. ) > '$(BIN_DIR)/openwrt-$(2)-$(1)-sysupgrade.img'
  132. endef
  133. define Image/Build/Default/factory
  134. # parameters: 1 = rootfs type, 2 = machine name, 3 = header
  135. # $(BOARD) $(1) factory upgrade image for $(2)
  136. '$(STAGING_DIR_HOST)/bin/add_header' $(3) '$(BIN_DIR)/openwrt-$(2)-$(1)-sysupgrade.img' '$(BIN_DIR)/openwrt-$(2)-$(1)-factory.img'
  137. endef
  138. ##
  139. ## Image/Build/Linksys
  140. ##
  141. define Image/Build/Linksys/wrt350nv2
  142. # parameters: 1 = rootfs type, 2 = machine name, 3 = erase size in KiB, 4 = kernel mtd size in KiB, 5 = kernel file suffix
  143. ifeq ($(findstring jffs2-,$(1)),jffs2-) # JFFS2: build only image fitting to erase size
  144. ifeq ($(1),jffs2-$(3)k)
  145. $(call Image/Build/Default/sysupgrade,$(1),$(2),$(4),$(5))
  146. $(call Image/Build/Linksys/wrt350nv2-builder,$(1),$(2))
  147. endif
  148. else
  149. ifeq ($(1),ext4) # EXT4: ignore
  150. # do nothing
  151. else # do all other images
  152. $(call Image/Build/Default/sysupgrade,$(1),$(2),$(4),$(5))
  153. $(call Image/Build/Linksys/wrt350nv2-builder,$(1),$(2))
  154. endif
  155. endif
  156. endef
  157. define Image/Build/Linksys/wrt350nv2-builder
  158. # parameters: 1 = rootfs type, 2 = machine name
  159. # $(BOARD) $(1) factory and recovery image for $(2) via wrt350nv2-builder
  160. rm -rf '$(TMP_DIR)/$(2)_factory'
  161. mkdir '$(TMP_DIR)/$(2)_factory'
  162. # create parameter file
  163. echo ':image 0 $(BIN_DIR)/openwrt-$(2)-$(1)-sysupgrade.img' > '$(TMP_DIR)/$(2)_factory/$(2).par'
  164. [ ! -f '$(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin' ] || ( \
  165. echo ':u-boot 0 $(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin' >> '$(TMP_DIR)/$(2)_factory/$(2).par'; \
  166. )
  167. echo '#version 0x2020' >> '$(TMP_DIR)/$(2)_factory/$(2).par'
  168. # create bin file for recovery and factory image
  169. ( \
  170. cd '$(TMP_DIR)/$(2)_factory'; \
  171. '$(STAGING_DIR_HOST)/bin/wrt350nv2-builder' -b '$(TMP_DIR)/$(2)_factory/$(2).par'; \
  172. )
  173. # copy bin file as recovery image
  174. $(CP) '$(TMP_DIR)/$(2)_factory/wrt350n.bin' '$(BIN_DIR)/openwrt-$(2)-$(1)-recovery.bin'
  175. # create factory image for stock firmware update mechanism
  176. ( \
  177. cd '$(TMP_DIR)/$(2)_factory'; \
  178. zip 'wrt350n.zip' 'wrt350n.bin'; \
  179. )
  180. '$(STAGING_DIR_HOST)/bin/wrt350nv2-builder' -z '$(TMP_DIR)/$(2)_factory/wrt350n.zip' '$(BIN_DIR)/openwrt-$(2)-$(1)-factory.img'
  181. rm -rf '$(TMP_DIR)/$(2)_factory'
  182. endef
  183. ###
  184. ### Image/PreReq
  185. ###
  186. ## Dependency for WRT350N v2 factory image
  187. $(eval $(call RequireCommand,zip, \
  188. Please install zip. \
  189. ))