firmware-utils: mkdlinkfw: add kernel image offset
Some boards with JBOOT have partiton between bootloader and kernel image. This patch add possibility to change kernel partition start address. Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
This commit is contained in:
		 Pawel Dembicki
					Pawel Dembicki
				
			
				
					committed by
					
						 Petr Štetiar
						Petr Štetiar
					
				
			
			
				
	
			
			
			 Petr Štetiar
						Petr Štetiar
					
				
			
						parent
						
							5f40b519f3
						
					
				
				
					commit
					1f149fcad3
				
			| @@ -114,6 +114,7 @@ define Build/mkdlinkfw | |||||||
| 		-k $(IMAGE_KERNEL) \ | 		-k $(IMAGE_KERNEL) \ | ||||||
| 		-r $(IMAGE_ROOTFS) \ | 		-r $(IMAGE_ROOTFS) \ | ||||||
| 		-o $@ \ | 		-o $@ \ | ||||||
|  | 		$(if $(DLINK_IMAGE_OFFSET), -O $(DLINK_IMAGE_OFFSET)) \ | ||||||
| 		-s $(DLINK_FIRMWARE_SIZE) | 		-s $(DLINK_FIRMWARE_SIZE) | ||||||
| endef | endef | ||||||
|  |  | ||||||
| @@ -122,6 +123,7 @@ define Build/mkdlinkfw-factory | |||||||
| 		-m $(DLINK_ROM_ID) -f $(DLINK_FAMILY_MEMBER) \ | 		-m $(DLINK_ROM_ID) -f $(DLINK_FAMILY_MEMBER) \ | ||||||
| 		-F $@ \ | 		-F $@ \ | ||||||
| 		-o $@.new \ | 		-o $@.new \ | ||||||
|  | 		$(if $(DLINK_IMAGE_OFFSET), -O $(DLINK_IMAGE_OFFSET)) \ | ||||||
| 		-s $(DLINK_FIRMWARE_SIZE) | 		-s $(DLINK_FIRMWARE_SIZE) | ||||||
| 	mv $@.new $@ | 	mv $@.new $@ | ||||||
| endef | endef | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
| # | # | ||||||
|  |  | ||||||
| DEVICE_VARS += TPLINK_FLASHLAYOUT TPLINK_HWID TPLINK_HWREV TPLINK_HWREVADD TPLINK_HVERSION \ | DEVICE_VARS += TPLINK_FLASHLAYOUT TPLINK_HWID TPLINK_HWREV TPLINK_HWREVADD TPLINK_HVERSION \ | ||||||
| 	DLINK_ROM_ID DLINK_FAMILY_MEMBER DLINK_FIRMWARE_SIZE | 	DLINK_ROM_ID DLINK_FAMILY_MEMBER DLINK_FIRMWARE_SIZE DLINK_IMAGE_OFFSET | ||||||
|  |  | ||||||
| define Build/elecom-header | define Build/elecom-header | ||||||
| 	cp $@ $(KDIR)/v_0.0.0.bin | 	cp $@ $(KDIR)/v_0.0.0.bin | ||||||
| @@ -60,6 +60,15 @@ define Device/alfa-network_tube-e4g | |||||||
| endef | endef | ||||||
| TARGET_DEVICES += alfa-network_tube-e4g | TARGET_DEVICES += alfa-network_tube-e4g | ||||||
|  |  | ||||||
|  | define Device/amit_jboot | ||||||
|  |   DLINK_IMAGE_OFFSET := 0x10000 | ||||||
|  |   KERNEL := $(KERNEL_DTB) | ||||||
|  |   IMAGES += factory.bin | ||||||
|  |   IMAGE/sysupgrade.bin := mkdlinkfw | pad-rootfs | append-metadata | ||||||
|  |   IMAGE/factory.bin := mkdlinkfw | pad-rootfs | mkdlinkfw-factory | ||||||
|  |   DEVICE_PACKAGES := jboot-tools kmod-usb2 kmod-usb-ohci | ||||||
|  | endef | ||||||
|  |  | ||||||
| define Device/Archer | define Device/Archer | ||||||
|   TPLINK_HWREVADD := 0 |   TPLINK_HWREVADD := 0 | ||||||
|   TPLINK_HVERSION := 3 |   TPLINK_HVERSION := 3 | ||||||
| @@ -182,60 +191,46 @@ endef | |||||||
| TARGET_DEVICES += dir-810l | TARGET_DEVICES += dir-810l | ||||||
|  |  | ||||||
| define Device/dlink_dwr-116-a1 | define Device/dlink_dwr-116-a1 | ||||||
|  |   $(Device/amit_jboot) | ||||||
|   DTS := DWR-116-A1 |   DTS := DWR-116-A1 | ||||||
|   DEVICE_TITLE := D-Link DWR-116 A1/A2 |   DEVICE_TITLE := D-Link DWR-116 A1/A2 | ||||||
|   DEVICE_PACKAGES := kmod-usb2 kmod-usb-ohci jboot-tools |  | ||||||
|   DLINK_ROM_ID := DLK6E3803001 |   DLINK_ROM_ID := DLK6E3803001 | ||||||
|   DLINK_FAMILY_MEMBER := 0x6E38 |   DLINK_FAMILY_MEMBER := 0x6E38 | ||||||
|   DLINK_FIRMWARE_SIZE := 0x7E0000 |   DLINK_FIRMWARE_SIZE := 0x7E0000 | ||||||
|   KERNEL := $(KERNEL_DTB) |  | ||||||
|   IMAGES += factory.bin |  | ||||||
|   IMAGE/sysupgrade.bin := mkdlinkfw | pad-rootfs | append-metadata |  | ||||||
|   IMAGE/factory.bin := mkdlinkfw | pad-rootfs | mkdlinkfw-factory |  | ||||||
| endef | endef | ||||||
| TARGET_DEVICES += dlink_dwr-116-a1 | TARGET_DEVICES += dlink_dwr-116-a1 | ||||||
|  |  | ||||||
| define Device/dlink_dwr-118-a1 | define Device/dlink_dwr-118-a1 | ||||||
|  |   $(Device/amit_jboot) | ||||||
|   DTS := DWR-118-A1 |   DTS := DWR-118-A1 | ||||||
|   DEVICE_TITLE := D-Link DWR-118 A1 |   DEVICE_TITLE := D-Link DWR-118 A1 | ||||||
|   DEVICE_PACKAGES := kmod-usb2 kmod-usb-ohci jboot-tools kmod-mt76x0e |   DEVICE_PACKAGES += kmod-mt76x0e | ||||||
|   DLINK_ROM_ID := DLK6E3811001 |   DLINK_ROM_ID := DLK6E3811001 | ||||||
|   DLINK_FAMILY_MEMBER := 0x6E38 |   DLINK_FAMILY_MEMBER := 0x6E38 | ||||||
|   DLINK_FIRMWARE_SIZE := 0xFE0000 |   DLINK_FIRMWARE_SIZE := 0xFE0000 | ||||||
|   KERNEL := $(KERNEL_DTB) |  | ||||||
|   IMAGES += factory.bin |  | ||||||
|   IMAGE/sysupgrade.bin := mkdlinkfw | pad-rootfs | append-metadata |  | ||||||
|   IMAGE/factory.bin := mkdlinkfw | pad-rootfs | mkdlinkfw-factory |  | ||||||
| endef | endef | ||||||
| TARGET_DEVICES += dlink_dwr-118-a1 | TARGET_DEVICES += dlink_dwr-118-a1 | ||||||
|  |  | ||||||
| define Device/dlink_dwr-118-a2 | define Device/dlink_dwr-118-a2 | ||||||
|  |   $(Device/amit_jboot) | ||||||
|   DTS := DWR-118-A2 |   DTS := DWR-118-A2 | ||||||
|   DEVICE_TITLE := D-Link DWR-118 A2 |   DEVICE_TITLE := D-Link DWR-118 A2 | ||||||
|   DEVICE_PACKAGES := kmod-mt76x2 kmod-usb2 kmod-usb-ohci jboot-tools |   DEVICE_PACKAGES += kmod-mt76x2 | ||||||
|   DLINK_ROM_ID := DLK6E3814001 |   DLINK_ROM_ID := DLK6E3814001 | ||||||
|   DLINK_FAMILY_MEMBER := 0x6E38 |   DLINK_FAMILY_MEMBER := 0x6E38 | ||||||
|   DLINK_FIRMWARE_SIZE := 0xFE0000 |   DLINK_FIRMWARE_SIZE := 0xFE0000 | ||||||
|   KERNEL := $(KERNEL_DTB) |  | ||||||
|   IMAGES += factory.bin |  | ||||||
|   IMAGE/sysupgrade.bin := mkdlinkfw | pad-rootfs | append-metadata |  | ||||||
|   IMAGE/factory.bin := mkdlinkfw | pad-rootfs | mkdlinkfw-factory |  | ||||||
| endef | endef | ||||||
| TARGET_DEVICES += dlink_dwr-118-a2 | TARGET_DEVICES += dlink_dwr-118-a2 | ||||||
|  |  | ||||||
| define Device/dlink_dwr-921-c1 | define Device/dlink_dwr-921-c1 | ||||||
|  |   $(Device/amit_jboot) | ||||||
|   DTS := DWR-921-C1 |   DTS := DWR-921-C1 | ||||||
|   IMAGE_SIZE := $(ralink_default_fw_size_16M) |   IMAGE_SIZE := $(ralink_default_fw_size_16M) | ||||||
|   DEVICE_TITLE := D-Link DWR-921 C1 |   DEVICE_TITLE := D-Link DWR-921 C1 | ||||||
|   DLINK_ROM_ID := DLK6E2414001 |   DLINK_ROM_ID := DLK6E2414001 | ||||||
|   DLINK_FAMILY_MEMBER := 0x6E24 |   DLINK_FAMILY_MEMBER := 0x6E24 | ||||||
|   DLINK_FIRMWARE_SIZE := 0xFE0000 |   DLINK_FIRMWARE_SIZE := 0xFE0000 | ||||||
|   KERNEL := $(KERNEL_DTB) |   DEVICE_PACKAGES += kmod-usb-net-qmi-wwan kmod-usb-serial-option uqmi | ||||||
|   IMAGES += factory.bin |  | ||||||
|   IMAGE/sysupgrade.bin := mkdlinkfw | pad-rootfs | append-metadata |  | ||||||
|   IMAGE/factory.bin := mkdlinkfw | pad-rootfs | mkdlinkfw-factory |  | ||||||
|   DEVICE_PACKAGES := jboot-tools \ |  | ||||||
| 	kmod-usb2 kmod-usb-net-qmi-wwan kmod-usb-serial-option uqmi |  | ||||||
| endef | endef | ||||||
| TARGET_DEVICES += dlink_dwr-921-c1 | TARGET_DEVICES += dlink_dwr-921-c1 | ||||||
|  |  | ||||||
| @@ -248,18 +243,14 @@ endef | |||||||
| TARGET_DEVICES += dlink_dwr-921-c3 | TARGET_DEVICES += dlink_dwr-921-c3 | ||||||
|  |  | ||||||
| define Device/dlink_dwr-922-e2 | define Device/dlink_dwr-922-e2 | ||||||
|  |   $(Device/amit_jboot) | ||||||
|   DTS := DWR-922-E2 |   DTS := DWR-922-E2 | ||||||
|   IMAGE_SIZE := $(ralink_default_fw_size_16M) |   IMAGE_SIZE := $(ralink_default_fw_size_16M) | ||||||
|   DEVICE_TITLE := D-Link DWR-922 E2 |   DEVICE_TITLE := D-Link DWR-922 E2 | ||||||
|   DLINK_ROM_ID := DLK6E2414005 |   DLINK_ROM_ID := DLK6E2414005 | ||||||
|   DLINK_FAMILY_MEMBER := 0x6E24 |   DLINK_FAMILY_MEMBER := 0x6E24 | ||||||
|   DLINK_FIRMWARE_SIZE := 0xFE0000 |   DLINK_FIRMWARE_SIZE := 0xFE0000 | ||||||
|   KERNEL := $(KERNEL_DTB) |   DEVICE_PACKAGES += kmod-usb-net-qmi-wwan kmod-usb-serial-option uqmi | ||||||
|   IMAGES += factory.bin |  | ||||||
|   IMAGE/sysupgrade.bin := mkdlinkfw | pad-rootfs | append-metadata |  | ||||||
|   IMAGE/factory.bin := mkdlinkfw | pad-rootfs | mkdlinkfw-factory |  | ||||||
|   DEVICE_PACKAGES := jboot-tools \ |  | ||||||
| 	kmod-usb2 kmod-usb-net-qmi-wwan kmod-usb-serial-option uqmi |  | ||||||
| endef | endef | ||||||
| TARGET_DEVICES += dlink_dwr-922-e2 | TARGET_DEVICES += dlink_dwr-922-e2 | ||||||
|  |  | ||||||
| @@ -430,16 +421,13 @@ endef | |||||||
| TARGET_DEVICES += microwrt | TARGET_DEVICES += microwrt | ||||||
|  |  | ||||||
| define Device/lava_lr-25g001 | define Device/lava_lr-25g001 | ||||||
|  |   $(Device/amit_jboot) | ||||||
|   DTS := LR-25G001 |   DTS := LR-25G001 | ||||||
|   DEVICE_TITLE := LAVA LR-25G001 |   DEVICE_TITLE := LAVA LR-25G001 | ||||||
|   DLINK_ROM_ID := LVA6E3804001 |   DLINK_ROM_ID := LVA6E3804001 | ||||||
|   DLINK_FAMILY_MEMBER := 0x6E38 |   DLINK_FAMILY_MEMBER := 0x6E38 | ||||||
|   DLINK_FIRMWARE_SIZE := 0xFE0000 |   DLINK_FIRMWARE_SIZE := 0xFE0000 | ||||||
|   KERNEL := $(KERNEL_DTB) |   DEVICE_PACKAGES += kmod-mt76x0e | ||||||
|   IMAGES += factory.bin |  | ||||||
|   IMAGE/sysupgrade.bin := mkdlinkfw | pad-rootfs | append-metadata |  | ||||||
|   IMAGE/factory.bin := mkdlinkfw | pad-rootfs | mkdlinkfw-factory |  | ||||||
|   DEVICE_PACKAGES := jboot-tools kmod-usb2 kmod-usb-ohci kmod-mt76x0e |  | ||||||
| endef | endef | ||||||
| TARGET_DEVICES += lava_lr-25g001 | TARGET_DEVICES += lava_lr-25g001 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -99,6 +99,7 @@ struct file_info image_info; | |||||||
| char *ofname; | char *ofname; | ||||||
| char *progname; | char *progname; | ||||||
| uint32_t firmware_size; | uint32_t firmware_size; | ||||||
|  | uint32_t image_offset; | ||||||
| uint16_t family_member; | uint16_t family_member; | ||||||
| char *rom_id[12] = { 0 }; | char *rom_id[12] = { 0 }; | ||||||
| char image_type; | char image_type; | ||||||
| @@ -403,7 +404,7 @@ int fill_sch2(struct sch2_header *header, char *kernel_ptr, char *rootfs_ptr) | |||||||
| 	header->image_crc32 = crc32(0, (uint8_t *) kernel_ptr, kernel_info.file_size); | 	header->image_crc32 = crc32(0, (uint8_t *) kernel_ptr, kernel_info.file_size); | ||||||
| 	header->start_addr = RAM_ENTRY_ADDR; | 	header->start_addr = RAM_ENTRY_ADDR; | ||||||
| 	header->rootfs_addr = | 	header->rootfs_addr = | ||||||
| 	    JBOOT_SIZE + STAG_SIZE + SCH2_SIZE + kernel_info.file_size; | 	    image_offset + STAG_SIZE + SCH2_SIZE + kernel_info.file_size; | ||||||
| 	header->rootfs_len = rootfs_info.file_size; | 	header->rootfs_len = rootfs_info.file_size; | ||||||
| 	header->rootfs_crc32 = crc32(0, (uint8_t *) rootfs_ptr, rootfs_info.file_size); | 	header->rootfs_crc32 = crc32(0, (uint8_t *) rootfs_ptr, rootfs_info.file_size); | ||||||
| 	header->header_crc32 = 0; | 	header->header_crc32 = 0; | ||||||
| @@ -446,9 +447,9 @@ int fill_auh(struct auh_header *header, uint32_t length) | |||||||
| 	header->lpvs = AUH_LVPS; | 	header->lpvs = AUH_LVPS; | ||||||
| 	header->mbz = 0; | 	header->mbz = 0; | ||||||
| 	header->time_stamp = jboot_timestamp(); | 	header->time_stamp = jboot_timestamp(); | ||||||
| 	header->erase_start = JBOOT_SIZE; | 	header->erase_start = image_offset; | ||||||
| 	header->erase_length = firmware_size; | 	header->erase_length = firmware_size; | ||||||
| 	header->data_offset = JBOOT_SIZE; | 	header->data_offset = image_offset; | ||||||
| 	header->data_length = length; | 	header->data_length = length; | ||||||
| 	header->space4 = 0; | 	header->space4 = 0; | ||||||
| 	header->space5 = 0; | 	header->space5 = 0; | ||||||
| @@ -603,11 +604,12 @@ int main(int argc, char *argv[]) | |||||||
| 	image_type = SYSUPGRADE; | 	image_type = SYSUPGRADE; | ||||||
| 	family_member = 0; | 	family_member = 0; | ||||||
| 	firmware_size = 0; | 	firmware_size = 0; | ||||||
|  | 	image_offset = JBOOT_SIZE; | ||||||
|  |  | ||||||
| 	while (1) { | 	while (1) { | ||||||
| 		int c; | 		int c; | ||||||
|  |  | ||||||
| 		c = getopt(argc, argv, "f:F:i:hk:m:o:r:s:"); | 		c = getopt(argc, argv, "f:F:i:hk:m:o:O:r:s:"); | ||||||
| 		if (c == -1) | 		if (c == -1) | ||||||
| 			break; | 			break; | ||||||
|  |  | ||||||
| @@ -632,6 +634,9 @@ int main(int argc, char *argv[]) | |||||||
| 		case 'r': | 		case 'r': | ||||||
| 			rootfs_info.file_name = optarg; | 			rootfs_info.file_name = optarg; | ||||||
| 			break; | 			break; | ||||||
|  | 		case 'O': | ||||||
|  | 			sscanf(optarg, "0x%x", &image_offset); | ||||||
|  | 			break; | ||||||
| 		case 'o': | 		case 'o': | ||||||
| 			ofname = optarg; | 			ofname = optarg; | ||||||
| 			break; | 			break; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user