The attached patch adds building of firmware images for more routers based on the brcm63xx chipset.

Signed-Off By: Daniel Dickinson <crazycshore@gmail.com>

SVN-Revision: 16396
This commit is contained in:
Florian Fainelli 2009-06-10 08:24:13 +00:00
parent e9c22f7939
commit ca16accfbb
5 changed files with 154 additions and 86 deletions

View file

@ -163,16 +163,16 @@ static int parse_cfe_partitions( struct mtd_info *master, struct mtd_partition *
boardid = &(buf->ag306.boardid[0]); boardid = &(buf->ag306.boardid[0]);
break; break;
case 3: case 3:
matchtagid = "bc308"; matchtagid = "bc221";
tagid = &(buf->bc308.tagId[0]); tagid = &(buf->bc221.tagId[0]);
sscanf(buf->bc308.rootAddress,"%u", &rootfsaddr); sscanf(buf->bc221.rootAddress,"%u", &rootfsaddr);
sscanf(buf->bc308.rootLength, "%u", &rootfslen); sscanf(buf->bc221.rootLength, "%u", &rootfslen);
sscanf(buf->bc308.kernelAddress, "%u", &kerneladdr); sscanf(buf->bc221.kernelAddress, "%u", &kerneladdr);
sscanf(buf->bc308.kernelLength, "%u", &kernellen); sscanf(buf->bc221.kernelLength, "%u", &kernellen);
sscanf(buf->bc308.totalLength, "%u", &totallen); sscanf(buf->bc221.totalLength, "%u", &totallen);
tagidcrc = buf->bc308.tagIdCRC; tagidcrc = buf->bc221.tagIdCRC;
tagversion = &(buf->bc308.tagVersion[0]); tagversion = &(buf->bc221.tagVersion[0]);
boardid = &(buf->bc308.boardid[0]); boardid = &(buf->bc221.boardid[0]);
break; break;
case 4: case 4:
matchtagid = "bc310"; matchtagid = "bc310";

View file

@ -6,6 +6,7 @@
#define TAGID_LEN 6 /* Length of tag ID */ #define TAGID_LEN 6 /* Length of tag ID */
#define TAGINFO_LEN 20 /* Length of vendor information field in tag */ #define TAGINFO_LEN 20 /* Length of vendor information field in tag */
#define TAGVER_LEN 4 /* Length of Tag Version */ #define TAGVER_LEN 4 /* Length of Tag Version */
#define TAGLAYOUT_LEN 4 /* Length of FlashLayoutVer */
#define NUM_TAGID 5 #define NUM_TAGID 5
#define IMAGETAG_CRC_START 0xFFFFFFFF #define IMAGETAG_CRC_START 0xFFFFFFFF
@ -15,18 +16,18 @@ struct tagiddesc_t {
char tagiddesc[80]; char tagiddesc[80];
}; };
// what is called bc308 may actually be BT Voyager-specific // bc221 is used by BT Voyager and should be right
// bc310 should be right // bc310 should be right, and may apply to 3.08 code as well
#define TAGID_DEFINITIONS { \ #define TAGID_DEFINITIONS { \
{ "bccfe", "Broadcom CFE flash image" }, \ { "bccfe", "Broadcom CFE flash image" }, \
{ "bc300", "Broadcom code version 3.00-3.06 and all ftp/tftp flash" }, \ { "bc300", "Broadcom code version 3.00-3.06 and all ftp/tftp flash" }, \
{ "ag306", "Alice Gate (Pirelli, based on Broadcom 3.06)" }, \ { "ag306", "Alice Gate (Pirelli, based on Broadcom 3.06)" }, \
{ "bc308", "Broadcom code version 3.08" }, \ { "bc221", "Broadcom code version 2.21" }, \
{ "bc310", "Broadcom code version 3.10-3.12" }, \ { "bc310", "Broadcom code version 3.10-3.12" }, \
} }
struct bcm_tag_bccfe { struct bcm_tag_bccfe {
unsigned char tagVersion[TAGVER_LEN]; // 0-3: Version of the image tag unsigned char tagVersion[TAGVER_LEN]; // 0-3: Version of the image tag
unsigned char sig_1[20]; // 4-23: Company Line 1 unsigned char sig_1[20]; // 4-23: Company Line 1
unsigned char sig_2[14]; // 24-37: Company Line 2 unsigned char sig_2[14]; // 24-37: Company Line 2
unsigned char chipid[6]; // 38-43: Chip this image is for unsigned char chipid[6]; // 38-43: Chip this image is for
@ -52,7 +53,7 @@ struct bcm_tag_bccfe {
}; };
struct bcm_tag_bc300 { struct bcm_tag_bc300 {
unsigned char tagVersion[4]; // 0-3: Version of the image tag unsigned char tagVersion[TAGVER_LEN]; // 0-3: Version of the image tag
unsigned char sig_1[20]; // 4-23: Company Line 1 unsigned char sig_1[20]; // 4-23: Company Line 1
unsigned char sig_2[14]; // 24-37: Company Line 2 unsigned char sig_2[14]; // 24-37: Company Line 2
unsigned char chipid[6]; // 38-43: Chip this image is for unsigned char chipid[6]; // 38-43: Chip this image is for
@ -80,7 +81,7 @@ struct bcm_tag_bc300 {
}; };
struct bcm_tag_ag306 { struct bcm_tag_ag306 {
unsigned char tagVersion[4]; // 0-3: Version of the image tag unsigned char tagVersion[TAGVER_LEN]; // 0-3: Version of the image tag
unsigned char sig_1[20]; // 4-23: Company Line 1 unsigned char sig_1[20]; // 4-23: Company Line 1
unsigned char sig_2[14]; // 24-37: Company Line 2 unsigned char sig_2[14]; // 24-37: Company Line 2
unsigned char chipid[6]; // 38-43: Chip this image is for unsigned char chipid[6]; // 38-43: Chip this image is for
@ -105,8 +106,8 @@ struct bcm_tag_ag306 {
unsigned char tagId[TAGID_LEN]; // 250-255: Identifies which type of tag this is, currently two-letter company code, and then three digits for version of broadcom code in which this tag was first introduced unsigned char tagId[TAGID_LEN]; // 250-255: Identifies which type of tag this is, currently two-letter company code, and then three digits for version of broadcom code in which this tag was first introduced
}; };
struct bcm_tag_bc308 { struct bcm_tag_bc221 {
unsigned char tagVersion[4]; // 0-3: Version of the image tag unsigned char tagVersion[TAGVER_LEN]; // 0-3: Version of the image tag
unsigned char sig_1[20]; // 4-23: Company Line 1 unsigned char sig_1[20]; // 4-23: Company Line 1
unsigned char sig_2[14]; // 24-37: Company Line 2 unsigned char sig_2[14]; // 24-37: Company Line 2
unsigned char chipid[6]; // 38-43: Chip this image is for unsigned char chipid[6]; // 38-43: Chip this image is for
@ -121,12 +122,12 @@ struct bcm_tag_bc308 {
unsigned char kernelLength[IMAGE_LEN]; // 128-137: Size of kernel unsigned char kernelLength[IMAGE_LEN]; // 128-137: Size of kernel
unsigned char dualImage[2]; // 138-139: Unused at present unsigned char dualImage[2]; // 138-139: Unused at present
unsigned char inactiveFlag[2]; // 140-141: Unused at present unsigned char inactiveFlag[2]; // 140-141: Unused at present
unsigned char information1[TAGINFO_LEN+2]; // 142-163: Unused at present unsigned char rsa_signature[TAGINFO_LEN]; // 142-161: RSA Signature (unused at present; some vendors may use this)
unsigned char reserved5[2]; // 162-163: Unused at present
unsigned char tagId[TAGID_LEN]; // 164-169: Identifies which type of tag this is, currently two-letter company code, and then three digits for version of broadcom code in which this tag was first introduced unsigned char tagId[TAGID_LEN]; // 164-169: Identifies which type of tag this is, currently two-letter company code, and then three digits for version of broadcom code in which this tag was first introduced
unsigned char rootAddress[ADDRESS_LEN]; // 170-181: Address in memory of rootfs partition unsigned char rootAddress[ADDRESS_LEN]; // 170-181: Address in memory of rootfs partition
unsigned char rootLength[IMAGE_LEN]; // 182-191: Size of rootfs partition unsigned char rootLength[IMAGE_LEN]; // 182-191: Size of rootfs partition
unsigned char flashLayoutVer[2]; // 192-193: Version flash layout unsigned char flashLayoutVer[4]; // 192-195: Version flash layout
unsigned char curflashLayoutVer[2]; // 194-195: Unused at present
unsigned char kernelCRC[4]; // 196-199: Guessed to be kernel CRC unsigned char kernelCRC[4]; // 196-199: Guessed to be kernel CRC
unsigned char reserved4[16]; // 200-215: Reserved area; unused at present unsigned char reserved4[16]; // 200-215: Reserved area; unused at present
unsigned char imageCRC[4]; // 216-219: CRC32 of images unsigned char imageCRC[4]; // 216-219: CRC32 of images
@ -170,7 +171,7 @@ union bcm_tag {
struct bcm_tag_bccfe bccfe; struct bcm_tag_bccfe bccfe;
struct bcm_tag_bc300 bc300; struct bcm_tag_bc300 bc300;
struct bcm_tag_ag306 ag306; struct bcm_tag_ag306 ag306;
struct bcm_tag_bc308 bc308; struct bcm_tag_bc221 bc221;
struct bcm_tag_bc310 bc310; struct bcm_tag_bc310 bc310;
}; };

View file

@ -34,7 +34,7 @@ define Image/Build/CFE
$(STAGING_DIR_HOST)/bin/imagetag -i $(KDIR)/vmlinux.lzma.cfe -f $(KDIR)/root.$(1) \ $(STAGING_DIR_HOST)/bin/imagetag -i $(KDIR)/vmlinux.lzma.cfe -f $(KDIR)/root.$(1) \
-o $(BIN_DIR)/openwrt-$(2)-$(1)-$(6)-cfe.bin \ -o $(BIN_DIR)/openwrt-$(2)-$(1)-$(6)-cfe.bin \
-b $(2) -c $(3) -e $(LOADADDR) -l $(LOADADDR) \ -b $(2) -c $(3) -e $(LOADADDR) -l $(LOADADDR) \
-t $(4) -d "$(5)" -t $(4) -d "$(5)" $(7)
# -b $(2) -c $(3) -e $(KERNEL_ENTRY) -l $(LOADADDR) # -b $(2) -c $(3) -e $(KERNEL_ENTRY) -l $(LOADADDR)
endef endef
@ -99,14 +99,28 @@ define Image/Build
$(STAGING_DIR_HOST)/bin/trx -o $(BIN_DIR)/openwrt-$(BOARD)-$(1).trx -f $(KDIR)/loader.gz -f $(KDIR)/vmlinux.lzma $(call trxalign/$(1)) -f $(KDIR)/root.$(1) $(STAGING_DIR_HOST)/bin/trx -o $(BIN_DIR)/openwrt-$(BOARD)-$(1).trx -f $(KDIR)/loader.gz -f $(KDIR)/vmlinux.lzma $(call trxalign/$(1)) -f $(KDIR)/root.$(1)
dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/openwrt-$(BOARD)-root.$(1) bs=128k conv=sync dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/openwrt-$(BOARD)-root.$(1) bs=128k conv=sync
# Various routers # Various routers
$(call Image/Build/CFE,$(1),96345GW2,6345,bccfe,,bccfe) $(call Image/Build/CFE,$(1),96345GW2,6345,bccfe,,bccfe,)
$(call Image/Build/CFE,$(1),96345GW2,6345,bc300,,bc300) $(call Image/Build/CFE,$(1),96345GW2,6345,bc221,,bc221,-y 5)
$(call Image/Build/CFE,$(1),96345GW2,6345,bc310,OpenWRT-$(SVN_REVISION),bc310) $(call Image/Build/CFE,$(1),96345GW2,6345,bc300,,bc300,)
$(call Image/Build/CFE,$(1),96348GW,6348,bccfe,,bcfe) $(call Image/Build/CFE,$(1),96345GW2,6345,bc310,OpenWRT-$(SVN_REVISION),bc310,)
# BT Voyager V2500V $(call Image/Build/CFE,$(1),96348GW,6348,bccfe,,bcfe,)
$(call Image/Build/CFE,$(1),V2500V_BB,6348,bc308,,btvgr) $(call Image/Build/CFE,$(1),96348GW,6348,bc221,,bc221,-y 5)
# BT Voyager V210_BTR
$(call Image/Build/CFE,$(1),V210_BB,6348,bc221,,btvgr,-y 5)
# BT Voyager V210_ROI, V210_WB
$(call Image/Build/CFE,$(1),V210,6348,bc221,,btvgr,-y 5)
# BT Voyager V2091_BTR
$(call Image/Build/CFE,$(1),V2091_BB,6348,bc221,,btvgr,-y 5)
# BT Voyager V2091_ROI, V2091_WB
$(call Image/Build/CFE,$(1),V2091,6348,bc221,,btvgr,-y 5)
# BT Voyager V220V, V220V_MGCP_BTR
$(call Image/Build/CFE,$(1),RTA1052V,6348,bc221,,btvgr,-y 5)
# BT Voyager V2110, V2110_AA, V2110_ROI
$(call Image/Build/CFE,$(1),V2110,6348,bc221,,btvgr,-y 5)
# BT Voyager V2500V, V2500V_SIP_CLUB, V2500V_AA
$(call Image/Build/CFE,$(1),V2500V_BB,6348,bc221,,btvgr,-y 5)
# Tecom GW6000 # Tecom GW6000
$(call Image/Build/CFE,$(1),96348GW,6348,bc300,,bc300) $(call Image/Build/CFE,$(1),96348GW,6348,bc300,,bc300,)
# Tecom GW6200 # Tecom GW6200
$(call Image/Build/CFE,$(1),96348GW,6348,bc310,$(shell printf '\x99'),gw6200) $(call Image/Build/CFE,$(1),96348GW,6348,bc310,$(shell printf '\x99'),gw6200)
# Neufbox4 # Neufbox4
@ -115,15 +129,23 @@ define Image/Build
# Comtrend 536, 5621 # Comtrend 536, 5621
$(call Image/Build/CFE,$(1),96348GW-11,6348,bccfe,,bccfe) $(call Image/Build/CFE,$(1),96348GW-11,6348,bccfe,,bccfe)
$(call Image/Build/CFE,$(1),96348GW-11,6348,bc300,,bc300) $(call Image/Build/CFE,$(1),96348GW-11,6348,bc300,,bc300)
# TP-Link 8900GB
$(call Image/Build/CFE,$(1),96348GW-11,6348,bc310,$(shell printf 'PRID\x89\x10\x00\x02'),td8900GB)
# Davolink DV201AMR # Davolink DV201AMR
$(call Image/Build/CFEOLD,$(1),DV201AMR,6348) $(call Image/Build/CFEOLD,$(1),DV201AMR,6348)
# USR 9108 # USR 9108
$(call Image/Build/CFE,$(1),96348GW-A,6348,bccfe,,bccfe) $(call Image/Build/CFE,$(1),96348GW-A,6348,bccfe,,bccfe)
$(call Image/Build/CFE,$(1),96348GW-A,6348,bc300,,bc300) $(call Image/Build/CFE,$(1),96348GW-A,6348,bc300,,bc300)
$(call Image/Build/CFE,$(1),96348GW-A,6348,bc310,OpenWRT-$(SVN_REVISION),bc310) # NetGear DG834GT, DG834PN
# NetGear DG834GT
$(call Image/Build/CFE,$(1),96348GW-10,6348,bccfe,,bccfe) $(call Image/Build/CFE,$(1),96348GW-10,6348,bccfe,,bccfe)
$(call Image/Build/CFE,$(1),96348GW-10,6348,bc300,,bc300) $(call Image/Build/CFE,$(1),96348GW-10,6348,bc300,,bc300)
# Belkin f5d7633
$(call Image/Build/CFE,$(1),96348GW-10,6348,bc310,,bc310)
# D-Link DSL-2640B
$(call Image/Build/CFE,$(1),D-4P-W,6348,bc310,,bc310)
# TP-Link TD-8810A, TD-8810B, TD-8811A, TD-8811B
$(call Image/Build/CFE,$(1),8L-2M-8M,6338,bc300,,bc300)
# Sagem F@ST2404 # Sagem F@ST2404
$(call Image/Build/CFE,$(1),F@ST2404,6348,bccfe,,bccfe) $(call Image/Build/CFE,$(1),F@ST2404,6348,bccfe,,bccfe)
@ -131,6 +153,8 @@ define Image/Build
$(call Image/Build/CFE,$(1),F@ST2404,6348,bc310,OpenWRT-$(SVN_REVISION),bc310) $(call Image/Build/CFE,$(1),F@ST2404,6348,bc310,OpenWRT-$(SVN_REVISION),bc310)
# Inventel Livebox # Inventel Livebox
$(call Image/Build/RedBoot,livebox) $(call Image/Build/RedBoot,livebox)
# D-Link DSL-2740B
$(call Image/Build/CFE,$(1),96358GW,6358,bc310,,dsl2740b)
# Pirelli Alice Gate VoIP 2 Plus Wi-Fi AGPF-S0 # Pirelli Alice Gate VoIP 2 Plus Wi-Fi AGPF-S0
$(call Image/Build/CFEAGPF,$(1),AGPF-S0,6358,0x20000,bccfe,,bccfe) $(call Image/Build/CFEAGPF,$(1),AGPF-S0,6358,0x20000,bccfe,,bccfe)
$(call Image/Build/CFEAGPF,$(1),AGPF-S0,6358,0x20000,ag306,,agv2+w) $(call Image/Build/CFEAGPF,$(1),AGPF-S0,6358,0x20000,ag306,,agv2+w)

View file

@ -44,25 +44,43 @@ Some boards share the same tag format, but require vendor-specific fields in
the board. In that case the tagid is shared, but the filename of the generated the board. In that case the tagid is shared, but the filename of the generated
image reflects the router for which the image was created. image reflects the router for which the image was created.
router |method| codever |tagid |filename router |method| codever |tagid |filename
+----------+------+---------+------+------------------------------------------- +-------------+------+---------+------+----------------------------------------
|any |cfe | any |bccfe |openwrt-<board>-<filesystem>-bccfe-cfe.bin |any |cfe | any |bccfe |openwrt-<board>-<fs>-bccfe-cfe.bin
|any |t/ftp | any |bc300 |openwrt-<board>-<filesystem>-bc300-cfe.bin |any |t/ftp | any |bc300 |openwrt-<board>-<fs>-bc300-cfe.bin
| |web |3.00-3.06|bc300 |openwrt-<board>-<filesystem>-bc300-cfe.bin | |web |3.00-3.06|bc300 |openwrt-<board>-<fs>-bc300-cfe.bin
| |web |3.08 |bc308 |openwrt-<board>-<filesystem>-bc308-cfe.bin | |web |3.10-3.12|bc310 |openwrt-<board>-<fs>-bc310-cfe.bin
| |web |3.10-3.12|bc310 |openwrt-<board>-<filesystem>-bc310-cfe.bin |AGVoIP2+WiFi |web |alice3.06|ag306 |openwrt-AGPF-S0-<fs>-agv2+w-cfe.bin
|CT536 |web |3.02 |bc300 |openwrt-<board>-<filesystem>-bc300-cfe.bin |CT536 |web |3.02 |bc300 |openwrt-96348GW-11-<fs>-bc300-cfe.bin
|CT5621 |web |3.02 |bc300 |openwrt-<board>-<filesystem>-bc300-cfe.bin |CT5621 |web |3.02 |bc300 |openwrt-96348GW-11-<fs>-bc300-cfe.bin
|GW6000 |web |3.00 |bc300 |openwrt-<board>-<filesystem>-bc300-cfe.bin |DG834GT |web |3.02 |bc300 |openwrt-96348GW-10-<fs>-bc300-cfe.bin
|USR9108? |web |? |bc300 |openwrt-<board>-<filesystem>-bc300-cfe.bin |DG834PN |web |3.02 |bc300 |openwrt-96348GW-10-<fs>-bc300-cfe.bin
|USR9108? |web |? |bc310 |openwrt-<board>-<filesystem>-bc310-cfe.bin |DSL-2640B |web |3.10 |bc310 |openwrt-D-4P-W-<fs>-bc310-cfe.bin
|DG834GT |web |3.02 |bc300 |openwrt-<board>-<filesystem>-bc300-cfe.bin |DSL-2740B |web |3.10 |bc310 |openwrt-96358GW-<fs>-dsl2740b-cfe.bin
|V2500V |web |3.08 |bc308 |openwrt-<board>-<filesystem>-btvgr-cfe.bin |F5D7633 |web |3.10 |bc310 |openwrt-96348GW-10-<fs>-bc310-cfe.bin
|GW6200 |web |3.10 |bc310 |openwrt-<board>-<filesystem>-gw6200-cfe.bin |F@ST2404 |web |? |bc300 |openwrt-F@ST2404-<fs>-bc300-cfe.bin
|Neufbox4 |web |3.12 |bc310 |openwrt-<board>-<filesystem>-nb4-cfe.bin |F@ST2404 |web |? |bc310 |openwrt-F@ST2404-<fs>-bc310-cfe.bin
|F@ST2404 |web |? |bc300 |openwrt-<board>-<filesystem>-bc300-cfe.bin |GW6000 |web |3.00 |bc300 |openwrt-96348GW-<fs>-bc300-cfe.bin
|F@ST2404 |web |? |bc310 |openwrt-<board>-<filesystem>-bc310-cfe.bin |GW6200 |web |3.10 |bc310 |openwrt-96348GW-<fs>-gw6200-cfe.bin
|AGVoIP2+Wi|web |alice3.06|ag306 |openwrt-<board>-<filesystem>-agv2+w-cfe.bin |Neufbox4 |web |3.12 |bc310 |openwrt-96358VW-<fs>-nb4-cfe.bin
|TD8810A |web |3.06 |bc300 |openwrt-8L-2M-8M-<fs>-bc306-cfe.bin
|TD8810B |web |3.06 |bc300 |openwrt-8L-2M-8M-<fs>-bc306-cfe.bin
|TD8811A |web |3.06 |bc300 |openwrt-8L-2M-8M-<fs>-bc306-cfe.bin
|TD8811B |web |3.06 |bc300 |openwrt-8L-2M-8M-<fs>-bc306-cfe.bin
|TD8900GB |web |3.06 |bc300 |openwrt-96348GW-11-<fs>-td8900gb-cfe.bin
|USR9108 |web |? |bc300 |openwrt-96348GW-A-<fs>-bc300-cfe.bin
|V2091_BTR |web |2.21 |bc221 |openwrt-V2091_BB-<fs>-btvgr-cfe.bin
|V2091_ROI |web |2.21 |bc221 |openwrt-V2091-<fs>-btvgr-cfe.bin
|V2091_WB |web |2.21 |bc221 |openwrt-V2091-<fs>-btvgr-cfe.bin
|V210_BTR |web |2.21 |bc221 |openwrt-V210_BB-<fs>-btvgr-cfe.bin
|V210_ROI |web |2.21 |bc221 |openwrt-V210-<fs>-btvgr-cfe.bin
|V210_WB |web |2.21 |bc221 |openwrt-V210-<fs>-btvgr-cfe.bin
|V2110 |web |2.21 |bc221 |openwrt-V2110-<fs>-btvgr-cfe.bin
|V2110_AA |web |2.21 |bc221 |openwrt-V2110-<fs>-btvgr-cfe.bin
|V2110_ROI |web |2.21 |bc221 |openwrt-V2110-<fs>-btvgr-cfe.bin
|V2500V |web |2.21 |bc221 |openwrt-V2500V_BB-<fs>-btvgr-cfe.bin
|V2500V_AA |web |2.21 |bc221 |openwrt-V2500V_BB-<fs>-btvgr-cfe.bin
|V2500V_SIP_CLUB |web|2.21 |bc221 |openwrt-V2500V_BB-<fs>-btvgr-cfe.bin
Old imagetag routers Old imagetag routers
-------------------- --------------------
@ -77,15 +95,34 @@ Known router->code versions
Vendor |Model |Code Ver Vendor |Model |Code Ver
---------------------------+------------------------------------------+-------- ---------------------------+------------------------------------------+--------
Belkin |F5D7633 |3.10
British Telecom (BT) |Voyager V2091_BTR |2.21
British Telecom (BT) |Voyager V2091_ROI |2.21
British Telecom (BT) |Voyager V2091_WB |2.21
British Telecom (BT) |Voyager V210_BTR |2.21
British Telecom (BT) |Voyager V210_ROI |2.21
British Telecom (BT) |Voyager V210_WB |2.21
British Telecom (BT) |Voyager V2110 |2.21
British Telecom (BT) |Voyager V2110_AA |2.21
British Telecom (BT) |Voyager V2110_ROI |2.21
British Telecom (BT) |Voyager V220V |2.21
British Telecom (BT) |Voyager V2500V |2.21
British Telecom (BT) |Voyager V2500V_AA |2.21
British Telecom (BT) |Voyager V2500V_SIP_CLUB |2.21
Comtrend |CT-5261 |3.02 Comtrend |CT-5261 |3.02
Comtrend |CT-536 |3.02 Comtrend |CT-536 |3.02
D-Link |DSL-2640B |3.10
D-Link |DSL-2670B |3.10
NetGear |DG834GT |3.02
NetGear |DG834PN |3.02
Neuf Cegetel |Neufbox 4 |3.12
Pirelli |Alice Gate Wi-Fi (+VoIP models?) |ag 3.06
Sagem |F@ST2404 |?
TP-Link |TD-8810A |3.06
TP-Link |TD-8810B |3.06
TP-Link |TD-8811A |3.06
TP-Link |TD-8811B |3.06
TP-Link |TD-W8900GB |3.06
Tecom |GW6000 |3.00 Tecom |GW6000 |3.00
Tecom |GW6200 |3.10 Tecom |GW6200 |3.10
Pirelli |Alice Gate Wi-Fi (+VoIP models?) |ag 3.06
? |TD-88xx |3.06
BT |Voyager V2500V |3.08 (?)
Belkin |F5D7633 |3.10
Neuf ? |Neufbox 4 |3.12
NetGear |DG834GT |3.02
Sagem |F@ST2404 |?
USR |9108 |? USR |9108 |?

View file

@ -130,7 +130,7 @@ int tagfile(const char *kernel, const char *rootfs, const char *bin,
const char *boardid, const char *chipid, const uint32_t fwaddr, const char *boardid, const char *chipid, const uint32_t fwaddr,
const uint32_t loadaddr, const uint32_t entry, const uint32_t loadaddr, const uint32_t entry,
const char *ver, const char *magic2, const uint32_t flash_bs, const char *ver, const char *magic2, const uint32_t flash_bs,
const char *tagid, const char *information) const char *tagid, const char *information, const char *layoutver)
{ {
union bcm_tag tag; union bcm_tag tag;
struct kernelhdr khdr; struct kernelhdr khdr;
@ -226,7 +226,7 @@ int tagfile(const char *kernel, const char *rootfs, const char *bin,
} else if ( tagid && (strncmp(tagid, "ag306", TAGID_LEN) == 0)) { } else if ( tagid && (strncmp(tagid, "ag306", TAGID_LEN) == 0)) {
/* Compute the crc32 of the kernel and padding between kernel and rootfs) */ /* Compute the crc32 of the kernel and padding between kernel and rootfs) */
kernelcrc = compute_crc32(kernelcrc, binfile, kerneloff - fwaddr, kernellen + rootfsoffpadlen); kernelcrc = compute_crc32(kernelcrc, binfile, kerneloff - fwaddr, kernellen + rootfsoffpadlen);
} else if ( tagid && ( (strncmp(tagid, "bc308", TAGID_LEN) == 0))) { } else if ( tagid && ( (strncmp(tagid, "bc221", TAGID_LEN) == 0))) {
/* Compute the crc32 of the entire image (deadC0de included) */ /* Compute the crc32 of the entire image (deadC0de included) */
imagecrc = compute_crc32(imagecrc, binfile, kerneloff - fwaddr, imagelen); imagecrc = compute_crc32(imagecrc, binfile, kerneloff - fwaddr, imagelen);
/* Compute the crc32 of the kernel and padding between kernel and rootfs) */ /* Compute the crc32 of the kernel and padding between kernel and rootfs) */
@ -343,39 +343,41 @@ int tagfile(const char *kernel, const char *rootfs, const char *bin,
int2tag(tag.ag306.tagIdCRC, crc32(IMAGETAG_CRC_START, (uint8_t*)&(tag.ag306.tagId[0]), TAGID_LEN)); int2tag(tag.ag306.tagIdCRC, crc32(IMAGETAG_CRC_START, (uint8_t*)&(tag.ag306.tagId[0]), TAGID_LEN));
int2tag(tag.ag306.kernelCRC, kernelcrc); int2tag(tag.ag306.kernelCRC, kernelcrc);
int2tag(tag.ag306.headerCRC, crc32(IMAGETAG_CRC_START, (uint8_t*)&tag, sizeof(tag) - 20)); int2tag(tag.ag306.headerCRC, crc32(IMAGETAG_CRC_START, (uint8_t*)&tag, sizeof(tag) - 20));
} else if ( tagid && (strcmp(tagid, "bc308") == 0)) { } else if ( tagid && (strcmp(tagid, "bc221") == 0)) {
/* Build the tag */ /* Build the tag */
strncpy(tag.bc308.tagVersion, ver, TAGVER_LEN); strncpy(tag.bc221.tagVersion, ver, TAGVER_LEN);
strncpy(tag.bc308.sig_1, IMAGETAG_MAGIC1, sizeof(tag.bc308.sig_1) - 1); strncpy(tag.bc221.sig_1, IMAGETAG_MAGIC1, sizeof(tag.bc221.sig_1) - 1);
strncpy(tag.bc308.sig_2, magic2, sizeof(tag.bc308.sig_2) - 1); strncpy(tag.bc221.sig_2, magic2, sizeof(tag.bc221.sig_2) - 1);
strcpy(tag.bc308.chipid, chipid); strcpy(tag.bc221.chipid, chipid);
strcpy(tag.bc308.boardid, boardid); strcpy(tag.bc221.boardid, boardid);
strcpy(tag.bc308.big_endian, "1"); strcpy(tag.bc221.big_endian, "1");
sprintf(tag.bc308.totalLength, "%lu", imagelen); sprintf(tag.bc221.totalLength, "%lu", imagelen);
/* We don't include CFE */ /* We don't include CFE */
strcpy(tag.bc308.cfeAddress, "0"); strcpy(tag.bc221.cfeAddress, "0");
strcpy(tag.bc308.cfeLength, "0"); strcpy(tag.bc221.cfeLength, "0");
if (kernelfile) { if (kernelfile) {
sprintf(tag.bc308.kernelAddress, "%lu", kerneloff); sprintf(tag.bc221.kernelAddress, "%lu", kerneloff);
sprintf(tag.bc308.kernelLength, "%lu", kernellen + rootfsoffpadlen); sprintf(tag.bc221.kernelLength, "%lu", kernellen + rootfsoffpadlen);
} }
if (rootfsfile) { if (rootfsfile) {
sprintf(tag.bc308.flashImageStart, "%lu", kerneloff); sprintf(tag.bc221.flashImageStart, "%lu", kerneloff);
sprintf(tag.bc308.flashRootLength, "%lu", rootfslen + sizeof(deadcode)); sprintf(tag.bc221.flashRootLength, "%lu", rootfslen + sizeof(deadcode));
sprintf(tag.bc308.rootAddress, "%lu", rootfsoff); sprintf(tag.bc221.rootAddress, "%lu", rootfsoff);
sprintf(tag.bc308.rootLength, "%lu", rootfslen); sprintf(tag.bc221.rootLength, "%lu", rootfslen);
} }
strncpy(tag.bc308.tagId, "bc308", TAGID_LEN); strncpy(tag.bc221.tagId, "bc221", TAGID_LEN);
strcpy(tag.bc308.flashLayoutVer, "5"); // This is needed at least for BT Voyager if (layoutver) {
strncpy(tag.bc221.flashLayoutVer, layoutver, TAGLAYOUT_LEN);
}
int2tag(tag.bc308.tagIdCRC, crc32(IMAGETAG_CRC_START, (uint8_t*)&(tag.bc308.tagId[0]), TAGID_LEN)); int2tag(tag.bc221.tagIdCRC, crc32(IMAGETAG_CRC_START, (uint8_t*)&(tag.bc221.tagId[0]), TAGID_LEN));
int2tag(tag.bc308.imageCRC, imagecrc); int2tag(tag.bc221.imageCRC, imagecrc);
int2tag(tag.bc308.kernelCRC, kernelcrc); int2tag(tag.bc221.kernelCRC, kernelcrc);
int2tag(tag.bc308.headerCRC, crc32(IMAGETAG_CRC_START, (uint8_t*)&tag, sizeof(tag) - 20)); int2tag(tag.bc221.headerCRC, crc32(IMAGETAG_CRC_START, (uint8_t*)&tag, sizeof(tag) - 20));
} else if ( tagid && (strcmp(tagid, "bc310") == 0)) { } else if ( tagid && (strcmp(tagid, "bc310") == 0)) {
/* Build the tag */ /* Build the tag */
strncpy(tag.bc310.tagVersion, ver, TAGVER_LEN); strncpy(tag.bc310.tagVersion, ver, TAGVER_LEN);
@ -425,12 +427,12 @@ int tagfile(const char *kernel, const char *rootfs, const char *bin,
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int c, i; int c, i;
char *kernel, *rootfs, *bin, *boardid, *chipid, *magic2, *ver, *tagid, *information; char *kernel, *rootfs, *bin, *boardid, *chipid, *magic2, *ver, *tagid, *information, *layoutver;
uint32_t flashstart, fwoffset, loadaddr, entry; uint32_t flashstart, fwoffset, loadaddr, entry;
uint32_t fwaddr, flash_bs; uint32_t fwaddr, flash_bs;
int tagidfound = 0; int tagidfound = 0;
kernel = rootfs = bin = boardid = chipid = magic2 = ver = tagid = information = NULL; kernel = rootfs = bin = boardid = chipid = magic2 = ver = tagid = information = layoutver = NULL;
entry = 0; entry = 0;
flashstart = DEFAULT_FLASH_START; flashstart = DEFAULT_FLASH_START;
@ -442,7 +444,7 @@ int main(int argc, char **argv)
printf("Copyright (C) 2008 Axel Gembe\n"); printf("Copyright (C) 2008 Axel Gembe\n");
printf("Copyright (C) 2009 Daniel Dickinson\n"); printf("Copyright (C) 2009 Daniel Dickinson\n");
while ((c = getopt(argc, argv, "i:f:o:b:c:s:n:v:m:k:l:e:h:t:d:")) != -1) { while ((c = getopt(argc, argv, "i:f:o:b:c:s:n:v:m:k:l:e:h:t:d:y:")) != -1) {
switch (c) { switch (c) {
case 'i': case 'i':
kernel = optarg; kernel = optarg;
@ -486,6 +488,9 @@ int main(int argc, char **argv)
case 'd': case 'd':
information = optarg; information = optarg;
break; break;
case 'y':
layoutver = optarg;
break;
case 'h': case 'h':
default: default:
fprintf(stderr, "Usage: imagetag <parameters>\n\n"); fprintf(stderr, "Usage: imagetag <parameters>\n\n");
@ -503,6 +508,7 @@ int main(int argc, char **argv)
fprintf(stderr, " -e <entry> - Address where the kernel entry point will end up\n"); fprintf(stderr, " -e <entry> - Address where the kernel entry point will end up\n");
fprintf(stderr, " -t <tagid> - type if imagetag to create, use 'list' to see available choices"); fprintf(stderr, " -t <tagid> - type if imagetag to create, use 'list' to see available choices");
fprintf(stderr, " -d <information> - vendor specific information, for those that need it"); fprintf(stderr, " -d <information> - vendor specific information, for those that need it");
fprintf(stderr, " -y <layoutver> - Flash Layout Version (2.2x code versions need this)");
fprintf(stderr, " -h - Displays this text\n\n"); fprintf(stderr, " -h - Displays this text\n\n");
return 1; return 1;
} }
@ -573,5 +579,5 @@ int main(int argc, char **argv)
} }
return tagfile(kernel, rootfs, bin, boardid, chipid, fwaddr, loadaddr, entry, ver, magic2, flash_bs, tagid, information); return tagfile(kernel, rootfs, bin, boardid, chipid, fwaddr, loadaddr, entry, ver, magic2, flash_bs, tagid, information, layoutver);
} }