首先下载对应的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