首先下载对应的imagebuilder
以newifiD2为例, 是 https://mirrors.aliyun.com/openwrt/releases/23.05.4/targets/ramips/mt762...
展开后, 在top目录下.targetinfo文件里, 可以找到 profile名字叫DEVICE_d-team_newifi-d2
然后 make image PROFILE="DEVICE_d-team_newifi-d2" 就可以了,
要修改ipk列表,
make image PROFILE="DEVICE_d-team_newifi-d2" \
	PACKAGES=“-wpad-basic-mbedtl wpad dnsmasq_route"
如果要包含一些自己配置文件,
make image PROFILE="DEVICE_d-team_newifi-d2" \
	PACKAGES=“-wpad-basic-mbedtl wpad dnsmasq_route" \
	FILES="/home/liushiwei/openwrt/myset"
具体的打包过程是用make的宏来做的,
到target/linux/ramips/images下搜索d-team_newifi-d2, 就可以找到对应的make文件
grep d-team_newifi-d2 target/linux/ramips/images/*
	mt7621.mk:define Device/d-team_newifi-d2
	mt7621.mk:TARGET_DEVICES += d-team_newifi-d2
	 
	vi mt7621.mk
	
		define Device/d-team_newifi-d2
	
		  $(Device/dsa-migration)
	
		  $(Device/uimage-lzma-loader)
	
		  IMAGE_SIZE := 32448k
	
		  DEVICE_VENDOR := D-Team
	
		  DEVICE_MODEL := Newifi D2
	
		  DEVICE_PACKAGES := kmod-mt7603 kmod-mt76x2 kmod-usb3 \
	
		        kmod-usb-ledtrig-usbport -uboot-envtools
	
		endef
	
		上面没有定义IMAGE*, 所以是没有特殊要求,使用的是Makefile里的define Device/Default:
	
		
			define Device/Default
		
			  IMAGES := sysupgrade.bin
		
			  IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | check-size | append-metadata
		
			endef
		
			append-kernel, append-rootfs, pad-rootfs, check-size, append-metadata 这些个宏, 都在顶层目录的include/image-commands.mk里定义,
		
			分别作用如下:
			append-kernel: 增加内核到目标文件。
			append-rootfs: 增加rootfs到目标文件
		
			pad-rootfs: 对齐到4096,rom擦除块, 因为rootfs后面是jffs2的overlay, 也就是分区的分界点,必须对齐擦除块
	 
	
		check-size: 检查体积是否超过rom大小
	
		append-metadata: 增加metadata信息,json格式的,型号版本等。
	
		以上来看,newifid2的rom还是很简单的。
	
		 
	
		下面是netgear-3800ch的生成过程:
		3800ch的定义在target/linux/ath79/image/generic.mk文件:
		
			define Device/netgear_wndr3800
		
			  $(Device/netgear_wndr3x00)
		
			  DEVICE_MODEL := WNDR3800
		
			  UIMAGE_MAGIC := 0x33373031
		
			  NETGEAR_BOARD_ID := WNDR3800
		
			  NETGEAR_HW_ID := 29763654+16+128
		
			  IMAGE_SIZE := 15872k
		
			  SUPPORTED_DEVICES += wndr3700
		
			endef
	 
	
		真正的打包过程, 在
netgear_wndr3x00 中:
		
			define Device/netgear_wndr3x00
		
			  $(Device/netgear_generic)
		
			  SOC := ar7161
		
			  DEVICE_PACKAGES := kmod-usb-ohci kmod-usb2 kmod-usb-ledtrig-usbport \
		
			        kmod-leds-reset kmod-owl-loader kmod-switch-rtl8366s
		
			endef
		
			继续找
netgear_generic的宏定义在common-netgear.mk文件中:
			
				define Device/netgear_generic
			
				  IMAGE/default := append-kernel | pad-to $$$$(BLOCKSIZE) | \
			
				        netgear-squashfs | append-rootfs | pad-rootfs
			
				  IMAGE/sysupgrade.bin := $$(IMAGE/default) | check-size | append-metadata
			
				  IMAGE/factory.img := $$(IMAGE/default) | netgear-dni | check-size
			
				endef
			
				它的rom就比较特殊, 增加了一些步骤, 具体的操作, 可以去找这些宏的定义,看一下。
				
				
				下面是一些常见的宏:
				(top)/include/image-commands.mk:
				
					define Build/append-kernel
				
					        dd if=$(IMAGE_KERNEL) >> $@
				
					endef
				
					
						 
					
						define Build/append-rootfs
					
						        dd if=$(IMAGE_ROOTFS) >> $@
					
						endef
					
						
							 
						
							define Build/pad-rootfs
						
							        $(STAGING_DIR_HOST)/bin/padjffs2 $@ $(1) \
						
							                $(if $(BLOCKSIZE),$(BLOCKSIZE:%k=%),4 8 16 64 128 256)
						
							endef
						
							 
					 
					
						
							define Build/netgear-dni
						
							        $(STAGING_DIR_HOST)/bin/mkdniimg \
						
							                -B $(NETGEAR_BOARD_ID) -v $(shell cat $(VERSION_DIST)| sed -e 's/[[:space:]]/-/g').$(firstword $(subst -, ,$(REVISION))) \
						
							                $(if $(NETGEAR_HW_ID),-H $(NETGEAR_HW_ID)) \
						
							                -r "$(1)" \
						
							                -i $@ -o $@.new
						
							        mv $@.new $@
						
							endef
						
							 
					 
					
						
							 
						
							define Build/pad-rootfs
						
							        $(STAGING_DIR_HOST)/bin/padjffs2 $@ $(1) \
						
							                $(if $(BLOCKSIZE),$(BLOCKSIZE:%k=%),4 8 16 64 128 256)
						
							endef