If you like BoxMatrix then please contribute Supportdata, Supportdata2, Firmware and/or Hardware (get in touch).
My firstname.lastname@example.org is not reachable by me since september. Please use email@example.com instead.
|BoxMatrix >> Lexicon >> FRITZ-Terms >> ADAM2||@ BoxMatrix - IRC-Chat - Translate: de es fr it nl pl|
|Short for:||Avalanche Device Application Manager 2?|
|Location:||Lexicon >> FRITZ-Terms|
|Description:||Proprietary AR7 only Bootloader by Texas Instruments|
Goto: FRITZ!OS - Versions - Features - Environment - Compression - Weblinks - SMW-Browser
ADAM2 is a proprietary Bootloader developed by Texas Instruments. It was only used for their AR7 SoCs.
ADAM2 was used in AR7 routers from many Companies, since it was part of the AR7 SDK by TI.
Each company adapted it to their needs. There were some leaks, but the source was never officially released.
This article covers the original ADAM2, for the successor see the EVA article.
AVM used an adapted version of ADAM2 on all their early Kernel 2.4 based models up to 7170v1.
With the introduction of Kernel 2.6 they replaced it with the backward compatible EVA, which AVM developed from scratch.
ADAM2 always allocates the first 64 kB partition of the Flash, located at 0x90000000 - 0x90010000, see mtd2 (bootenv).
This partition always starts with the MIPS initialisation code, which is mandatory to be executed first after reset.
This code could be used as a signature, to locate MIPS based ADAM2 or EVA images in binaries like the Recovery.exe.
Excerpt from the FRITZ!Box SL boot log captured by the Serial-Console:
ADAM2 Revision TI:0.18.01 AVM:$ProjectRevision: 1.20 $ (C) Copyright 1996-2003 Texas Instruments Inc. All Rights Reserved. (C) Copyright 2003 Telogy Networks, Inc. (C) Copyright 2003 AVM
ADAM2 used by AVM is always derived from the 0.18.01 version, which is stored in the bootloaderVersion variable.
This means Texas Instruments version 0.18, Telogy Networks version 01.
The minor part of the AVM ProjectRevision is stored in the urlader-version variable.
From the Shell:
# grep -e bootloader -e urlader -e prompt /proc/avalanche/env bootloaderVersion 0.18.01 prompt AVM_Ar7 urlader-version 20
The values of these 3 variables differ for EVA.
Tasks and components of ADAM2:
- Initialisation of the MIPS CPU (avreset.S)
- Initialisation of the PLL and clock generators (avalanche.S, ar7.c)
- Configuration of the EMIF memory interface (avalanche.S)
- Detection of the SDRAM chip and size (avalanche.S)
- Configuration of the SDRAM controller (refresh, latency, banks - avalanche.S)
- Installation of the CPU Exception handler (exception.c)
- Memory Management System (alloc, free, etc - mms.c)
- Formatted text output (printf.c)
- Initialisation and handling of the Bootloader-Environment (init_env.S, env.c)
- Flash driver (flashop_*.c)
- EMAC and MDIO Ethernet PHY drivers (emacphy.c)
- CPMAC network driver (cpmac.c)
- UART serial drivers (sio.c)
- ICMP ping (tinyicmp.c)
- TinyTCP - minimalistic TCP stack (arp.c, sed.c, sed_ar7.c, tinytcp.c, tinyip.c)
- TinyFTP - minimalistic FTP server (tinyftp.c)
- ADAM2-Shell - minimalistic Shell (shell.c)
AVM specific extensions:
- Drivers for the TFFS partitions containing the Environment (create, erase, write)
- GPIO and LED drivers
- Initialisation of Switch and PHY chips (see avalanche_cpmac.ko, later avm_cpmac.ko)
Options by TI which were not used by AVM:
- UDP support (tinyudp.c)
- TFTP server (tftp.c)
- DHCP client (tinydhcp.c, options.c)
- WLAN support (wlan.c)
- S-Record loader (srloader.c)
- Flash filesystem (ffs.c, ffs_util.c, fcb.c, files.c)
The initial ADAM2 by TI reserved a 10 kB (10240 bytes) portion of the Bootloader for the Environment, splitting the space into
80 variables with a maximum size of 128 bytes each. This has many disadvantages, like the need of write access to the
bootloader partition, with the risk of data loss and aging or even bricking the entire device.
AVM decided to develop something more reliable, which does not touch the bootloader partition. The result was the TFFS
filesystem, which stores both, the Bootloader-Environment and the TFFS-Configuration.
The TFFS uses 2 partitions of the same size, directly following the bootloader partition, each using between 32 kB (fbsl) and
256 kB (7170v1). See mtd3 (bootenv) and mtd4 (bootenv). TFFS is transaction safe, which means there's always a sane copy
of a file, even if electricity breaks down during write. Besides this it does wear leveling, which reduces aging of the Flash.
If the TFFS is empty at boot time builtin defaults for the Bootloader-Environment are preloaded.
urlader.Fritz_Box_2MB.97.adam2.image which is part of the
reserved 00:04:0E:FF:FF:00 maca 00:04:0E:FF:FF:01 macb 00:04:0E:FF:FF:02 macwlan 00:04:0E:FF:FF:03 macdsl 00:04:0E:FF:FF:04 usb_board_mac 00:04:0E:FF:FF:05 usb_rndis_mac 00:04:0E:FF:FF:06 bluetooth 00:04:0E:FF:FF:07 prompt Adam2_AVM HWRevision F SerialNumber 0000000000000000 my_ipaddress 192.168.178.1 ProductID Fritz_Box_2MB usb_device_id 0x3701 usb_revision_id 0x0100 usb_device_name USB DSL Device usb_manufacturer_name AVM annex B autoload yes
cpufrequency 150000000 (computed, %d) memsize 0x00800000 (computed, 0x%08x) flashsize 0x00200000 (computed, 0x%08x) modetty0 38400,n,8,1,hw modetty1 38400,n,8,1,hw bootserport tty0 urlader-version 97 bootloaderVersion 0.18.01 (computed, %d.%d.%02d) mtd0 0x900B0000,0x901F0000 (computed, 0x%X,0x%X) mtd1 0x90010000,0x900B0000 (computed, 0x%X,0x%X) mtd2 0x90000000,0x90010000 (computed, 0x%X,0x%X) mtd3 0x901F0000,0x901F8000 (computed, 0x%X,0x%X) mtd4 0x901F8000,0x90200000 (computed, 0x%X,0x%X) firstfreeaddress 0x947310a8 (computed) req_fullrate_freq 125000000 (computed) sysfrequency 125000000 (computed)
This covers the complete environment except firmware_version and firmware_info.
Besides this all MAC addresses and a possible wlan_key are lost.
Another fallback in ADAM2 if maca is unset is to use
00:e0:a0:a6:66:70, an OUI of Wiltron Co, Morgan Hill, CA.
Never clear the TFFS partitions even if 1000 postings and tools recommend it. It always was a stupid messup!
Using the same MAC addresses everywhere is as stupid as opening an unprotected WLAN because of clearing the key.
ADAM2 never supported any Kernel compression, that's why a compressed Kernel needed its own decompression code.
This typically was a
zimage decompressor which was prepended to the compressed Kernel and executed by ADAM2.
The smallest Flash size ever was 2 MB used in the FRITZ!Box SL, partitioned like this:
- mtd0 - 1,280 KB - filesystem - squashfs
- mtd1 - 640 KB - kernel - zimage
- mtd2 - 64 KB - ADAM2
- mtd3 - 32 KB - TFFS1
- mtd4 - 32 KB - TFFS2
The oldest known Firmware (1.63) which is completely based on the TI SDK compiles to:
- 1,511,424 bytes kernel (1,476 KB, uncompressed)
- 1,294,344 bytes filesystem (1,264 KB, squashfs)
zimage compressed kernel needs 655,368 bytes (640 KB) including decompressor,
- Wehavemorefun ADAM2/EVA article (archived, german, mainly by me)
- Freetz ADAM2/EVA article (german, in depth info by me)
- OpenWRT ADAM2 article
- SeattleWireless ADAM2 article (archived)
- AR7 Routers ADAM2 article (archived)
- ENotes ADAM2 article (archived)
- WikiDevi TNETD7200 (AR7) article
Showing 1 related property.