Support Fritzbox 7490

Usually that works fine in my experience. Haven't installed a release version on my 5490 yet though, I should try soon.

Hey, thanks you are right!
Using the binary from the FritzOS release it works all just fine!

Now i've got the perfect modem, with LLDP, Zabbix agent DSL custom script etc.

Would you share the dsl binary with us or me?

The one i am using for Germany/UK.

Version: 5.9.1.4.0.7
URL: https://download.avm.de/fritzbox/fritzbox-7490/deutschland/fritz.os/FRITZ.Box_7490-07.60.image

md5 0a6391dea6f929699c481dd026e91cf7 vr9-B-dsl.bin

Extraction:

7z e *.image -r filesystem.image
7z e filesystem.image filesystem_core.squashfs
unsquashfs4-avm-be filesystem_core.squashfs -e lib/modules/dsp_vr9/
cd lib/modules/dsp_vr9/

I am using the vr9-B-dsl.bin Annex B

What’s missing to get it ported to upstream?

What are VLAN 10 and 20? I only know VLAN 7 (Internet) and VLAN 8 (Entertain).

How do you handle VoIP (QoS/Traffic Shaping)?

Ahoy.

Yeah in my case it’s different. My ISP is based in Germany, NetCologne. They use VLAN 10 for Internet and VLAN 20 for VoIP.

Unfortunately i didn’t have time and motivation to implement QoS for VoIP, but it works fine as far when my connection is not congested.

Woah gonna test it out once I'm home, what are the next steps to make this official.
Edit: Just saw that they need to communicate and no reboot lol

Does anybody need a 7490 for testing/development purposes? I don't need mine anymore as I use the similar 3490.

I followed above instruction from Zappception for building the lantiq image till the order: "Flash the Lantiq image" .
But don't know exactly what is meant by that:
After flashing the initramfs with eva_ramboot.py, I copied the squashfs and made a >sysupgrade ...
But as NilZone mentioned ...
(https://nilzone.de/openwrt-auf-fritzboxen-flashen-7490-und-7430.html)
a failure message is thrown, INFO Led pulses and FritzBox no more reachable and must be revoered by AVM Windows Recovery program

What am I doing wrong ?

Are you flashing the correct version? Micron or non-micron?
https://openwrt.org/toh/avm/fritz.box.7490#installation

Thanks for the fast answer !
So I was not sure what version I had, I opened the box, and it is superficially identic to the pictures in

(though I did not see the printings on the chip, cause they were covered, and I did not want to break them)

I made a second try for building the Lantiq image , this time for Micron NAND .
Same behaviour: (I prefixed the openwrt*.bin with Z_ )

root@OpenWrt:/tmp# sysupgrade -F Z_openwrt-lantiq-xrx200-avm_fritz7490-micron-squashfs-sysupgrade.bin
Cannot save config while running from ramdisk.
Thu Jan 1 00:05:23 UTC 1970 upgrade: Commencing upgrade. Closing all shell sessions.
Command failed: Connection failed
root@OpenWrt:/tmp# Connection to 192.168.1.1 closed by remote host.
Connection to 192.168.1.1 closed.

Has "Cannot save config ..." some meaning ? !
Do you have any tips how I could isolate the issue ?

Thanks and greetings

"Cannot save config ..." should be normal. I think it's about saving the OpenWrt Configuration, but since you are inside a ramdisk and thus running from ram, there is no flash to save the config to. Try restoring the stock firmware and check the support.lua page. There you can see the version

Good morning (from Europe)
I downloaded a ~ 1.3 MByte .txt file from <fritz.box>/support.lua
Its starting with

#### TITLE Version 113.07.60
##### TITLE SubVersion 
##### TITLE Produkt Fritz_Box_HW185
##### TITLE Datum Thu Jan  1 01:04:55 CET 1970
##### BEGIN SECTION Support_Data Supportdata Linux fritz.box 3.10.107 #1 SMP 2023-05-04 mips Version 113.07.60 
Support Data
------------
Thu Jan  1 01:04:58 CET 1970
uptime: 01:04:58 up 4 min,  load average: 0.77, 0.81, 0.39
3.10.107
HWRevision	185
HWSubRevision	4
ProductID	Fritz_Box_HW185
SerialNumber	0000000000000000
annex	B
autoload	yes
bootloaderVersion	1.1964
bootserport	tty0
country	049
cpufrequency	500000000
firstfreeaddress	0x81116240
firmware_info	113.07.60
firmware_version	avm
flashsize	nor_size=0MB sflash_size=1024KB nand_size=512MB

and then ... 
   14.100000] Creating 6 MTD partitions on "ifx_hsnand":
[   14.110000] 0x000000000000-0x000000400000 : "kernel"
[   14.110000] 0x000000400000-0x000003400000 : "filesystem"
[   14.120000] 0x000003400000-0x000003800000 : "reserved-kernel"
[   14.130000] 0x000003800000-0x000006800000 : "reserved-filesystem"
[   14.140000] 0x000006800000-0x000006a00000 : "config"
[   14.140000] 0x000006a00000-0x000020000000 : "nand-filesystem"
[   14.150000] [TFFS3_Register_Panic_CB] registering panic callback for mtd ifx_hsnand

So - I suppose it is the Micron NAND version

I tried to flash initramfs + sysupgrade with the versions in
https://downloads.openwrt.org/snapshots/targets/lantiq/xrx200/
and with yours compiled.
NAND as well as the other image (4 trials in sum)

Same result; fritzbox hangs after sysupgrade; initramfs with no problem
How to continue ?

Can you give me the output of

$ grep "NAND device" support-file.txt

Mine shows this:

$ grep "NAND device" support\ FRITZ.Box_7490_113.07.60_14.11.25_1809.txt 
[    1.760000] NAND device: Manufacturer ID: 0x2c, Chip ID: 0xdc (Micron MT29F4G08ABADAWP), 512MiB, page size: 2048, OOB size: 64
[    1.760000] NAND device: Manufacturer ID: 0x2c, Chip ID: 0xdc (Micron MT29F4G08ABADAWP), 512MiB, page size: 2048, OOB size: 64

That's how you know it's the Micron Version. IF there is no Micron in the Output, it should be the other NAND

I just tried again with the snapshot images and it works. My Box has the IP 192.168.1.1 instead of 192.168.178.1, because that's what is set in the EVA bootload for some reason. It took almost 5 minutes for the sysupgrade to complete. Maybe you are not waiting long enough?

user@host:~$ ./eva_ramboot.py 192.168.1.1 ./openwrt-lantiq-xrx200-avm_fritz7490-micron-initramfs-kernel.bin 
> SETENV memsize 0x07963000
< 200 SETENV command successful
> SETENV kernel_args_tmp mtdram1=0x87963000,0x88000000
< 200 SETENV command successful
> MEDIA SDRAM
< 200 Media set to MEDIA_SDRAM
user@host:~$ ping -c3 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.472 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.430 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.411 ms

--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2045ms
rtt min/avg/max/mdev = 0.411/0.437/0.472/0.025 ms
user@host:~$ scp -O openwrt-lantiq-xrx200-avm_fritz7490-micron-squashfs-sysupgrade.bin root@192.168.1.1:/tmp/
openwrt-lantiq-xrx200-avm_fritz7490-micron-squashfs-sysupgrade.bin                            100% 6901KB   5.8MB/s   00:01    
user@host:~$ ssh root@192.168.1.1


BusyBox v1.37.0 (2025-11-14 02:25:15 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt SNAPSHOT, r31813-971c058cf5
 -----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------

 OpenWrt recently switched to the "apk" package manager!

 OPKG Command           APK Equivalent      Description
 ------------------------------------------------------------------
 opkg install <pkg>     apk add <pkg>       Install a package
 opkg remove <pkg>      apk del <pkg>       Remove a package
 opkg upgrade           apk upgrade         Upgrade all packages
 opkg files <pkg>       apk info -L <pkg>   List package contents
 opkg list-installed    apk info            List installed packages
 opkg update            apk update          Update package lists
 opkg search <pkg>      apk search <pkg>    Search for packages
 ------------------------------------------------------------------

For more https://openwrt.org/docs/guide-user/additional-software/opkg-to-apk-cheatsheet

root@OpenWrt:~# sysupgrade -n /tmp/openwrt-lantiq-xrx200-avm_fritz7490-micron-squashfs-sysupgrade.bin 
Thu Jan  1 00:04:07 GMT 1970 upgrade: Commencing upgrade. Closing all shell sessions.
Command failed: Connection failed
root@OpenWrt:~# Connection to 192.168.1.1 closed by remote host.
Connection to 192.168.1.1 closed.

Now wait ~ 5 minutes

user@host:~$ ping -c3 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.514 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.427 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.455 ms

--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2087ms
rtt min/avg/max/mdev = 0.427/0.465/0.514/0.036 ms
user@host:~$ ssh root@192.168.1.1
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:PhDMqb4PRXynMtUpF3aiCjJabZ0pU/JqUKi0tV4bnVE.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in /home/user/.ssh/known_hosts:185
Host key for 192.168.1.1 has changed and you have requested strict checking.
Host key verification failed.
user@host:~$ ssh-keygen -f .ssh/known_hosts -R 192.168.1.1
# Host 192.168.1.1 found: line 185
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
user@host:~$ ssh root@192.168.1.1
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
ED25519 key fingerprint is SHA256:PhDMqb4PRXynMtUpF3aiCjJabZ0pU/JqUKi0tV4bnVE.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.1' (ED25519) to the list of known hosts.


BusyBox v1.37.0 (2025-11-14 02:25:15 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt SNAPSHOT, r31813-971c058cf5
 -----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------

 OpenWrt recently switched to the "apk" package manager!

 OPKG Command           APK Equivalent      Description
 ------------------------------------------------------------------
 opkg install <pkg>     apk add <pkg>       Install a package
 opkg remove <pkg>      apk del <pkg>       Remove a package
 opkg upgrade           apk upgrade         Upgrade all packages
 opkg files <pkg>       apk info -L <pkg>   List package contents
 opkg list-installed    apk info            List installed packages
 opkg update            apk update          Update package lists
 opkg search <pkg>      apk search <pkg>    Search for packages
 ------------------------------------------------------------------

For more https://openwrt.org/docs/guide-user/additional-software/opkg-to-apk-cheatsheet

root@OpenWrt:~#

Hmm,
grep -e "NAND" -e "Micron" support_7490.txt gives me

CONFIG_NAND=y
CONFIG_CONFIGSPACE_ONNAND=y
Channel 26 - Device HSNAND Rx - (RelChan 0)
Channel 27 - Device HSNAND Tx - (RelChan 0)

while
grep -e "NAND" -e "Micron" -i support_7490.txt prints a lot of output with
[ifx_hsnand_command] read block failed (column: 0x800 ...

I cloned source code from your repository: https://github.com/Zappception/openwrt/tree/v24.10.0-fritz.box.7490

My openwrt output is a little bit different:

BusyBox v1.36.1 (2025-02-03 23:09:37 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 24.10.0, r28427-6df0e3d02a
 -------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------

No advice to use apk instead of opkg, also not a SNAPSHOT version ?

After 20 min, I cannot ssh into root@192.168.1.1 - red LED is blinking continuously -
I will make another built with "other NAND version" ; tell you the result

I'm IN !!

After at least 30 min I wondered that the red LED stopped blinking and there was the solid comforting green light.
So I tried to SSH into ...
Should be mentioned that the waiting duration till consolidation can be immense !

Now I can continue with the further parts of your tutorial ; hopefully there are no more caveats

I made a mixture of shell script, and some annotations ...

#!/bin/bash

git clone https://github.com/Zappception/openwrt $1
cd $1
git branch -a
git tag > ./git.tag
git checkout v24.10.0-fritz.box.7490
./scripts/feeds update -a
./scripts/feeds install -a

#make menuconfig fĂŒr lantiq
# Save config
#cp .config .config-lantiq

# ASSUMPTION !! there exists a .config-lantiq with correct parameters
cp .config-lantiq .config
make -j$(nproc) defconfig download clean world

####################################################################################################################################
# flash image
# python eva_ramboot.py 192.168.178.1 ./bin/targets/lantiq/xrx200/openwrt-lantiq-xrx200-avm_fritz7490-micron-initramfs-kernel.bin
# scp -O ./bin/targets/lantiq/xrx200/openwrt-lantiq-xrx200-avm_fritz7490-micron-squashfs-sysupgrade.bin root@192.168.1.1:/tmp
####################################################################################################################################

# ASSUMPTION !! OpenWRT is already running on 192.168.1.1
scp -O root@192.168.1.1:/lib/firmware/ath9k-eeprom-ahb-18100000.wmac.bin ./
scp -O root@192.168.1.1:/lib/firmware/ath10k/cal-pci-0000:00:00.0.bin  ./

cp ath9k-eeprom-ahb-18100000.wmac.bin target/linux/ath79/generic/base-files/lib/firmware/
cp cal-pci-0000:00:00.0.bin target/linux/ath79/generic/base-files/lib/firmware/ath10k/

#make menuconfig fĂŒr wasp
# Save .config
#cp .config .config-wasp

#  ASSUMPTION !! there exists a .config-wasp with correct parameters
cp .config-wasp .config
make -j$(nproc) defconfig download clean world


mkdir Firmware
cd ../Firmware
wget https://ftp.avm.de/fritzbox/fritzbox-7490/deutschland/fritz.os/FRITZ.Box_7490-07.60.image

7z e -o. FRITZ.Box_7490-07.60.image ./var/tmp/filesystem.image

#################################################################
# install freetz-ng
# suppose it is installed unter ./FRITZ-Box_7490_freetz-ng
#################################################################

./FRITZ-Box_7490_freetz-ng/tools/unsquashfs4-avm-be -d test filesystem.image -e filesystem_core.squashfs
./FRITZ-Box_7490_freetz-ng/tools/unsquashfs4-avm-be    test/filesystem_core.squashfs -e lib/firmware/ath_tgt_fw1.fw


find ./ -name xhcifw.mem # not yet clear where to find ... 

# found two of them:
#./FRITZ-Box_7490_freetz-ng/build/original/filesystem/lib/firmware/xhcifw.mem
#./FRITZ-Box_7490_freetz-ng/build/modified/filesystem/lib/firmware/xhcifw.mem


cp ./FRITZ-Box_7490_freetz-ng/build/original/filesystem/lib/firmware/xhcifw.mem    $1/target/linux/lantiq/xrx200/base-files/lib/firmware/renesas_usb_fw.mem
cp ./Firmware/squashfs-root/lib/firmware/ath_tgt_fw1.fw    $1/target/linux/lantiq/xrx200/base-files/lib/firmware/netboot.fw
cp $1/bin/targets/ath79/generic/openwrt-ath79-generic-avm_fritzx490-wasp-initramfs-kernel.bin    $1/target/linux/lantiq/xrx200/base-files/lib/firmware/wasp-image.bin

# make lantiq again
cp .config-lantiq .config
make -j$(nproc) defconfig download clean world

##########################################################################
# flash lantiq image again
# Supposed that only copying the squashfs and sysupgrade is meant by that 
#
# The rest is not clear ... OpenWRT has no Wifi, I have no 192.168.1.2

ssh -o StrictHostKeyChecking=no root@192.168.1.2 "
  uci set system.cfg01e48a.hostname='AVM-FRITZ-Box-x490-WASP'
  uci set system.cfg01e48a.description='AVM-FRITZ-Box-x490-WASP'
  uci set uhttpd.main.redirect_https='1'
  uci del dhcp.lan.ra
  uci del dhcp.lan.ra_slaac
  uci del dhcp.lan.ra_flags
  uci del dhcp.lan.dhcpv6
  uci del dhcp.lan.domain
  uci set dhcp.lan.ignore='1'
  uci set wireless.radio1.htmode='HT40'
  uci set wireless.radio1.channel='auto'
  uci set wireless.radio1.country='DE'
  uci set wireless.radio1.cell_density='0'
  uci set wireless.default_radio1.encryption='sae-mixed'
  uci set wireless.default_radio1.key='Supersecurepassword'
  uci set wireless.default_radio1.ocv='0'
  uci del wireless.radio1.disabled
  uci set wireless.radio0.channel='auto'
  uci set wireless.radio0.country='DE'
  uci set wireless.radio0.cell_density='0'
  uci set wireless.default_radio0.encryption='sae-mixed'
  uci set wireless.default_radio0.key='Supersecurepassword'
  uci set wireless.default_radio0.ocv='0'
  uci del wireless.radio0.disabled
  uci commit
  reload_config
"

Don't know how to interpret and realize the
"Configure your Local Startup on the Lantiq to boot the WASP image and configure the WiFi. "
and the following code block in your tutorial

ok=0
while true; do
  if ip link show lan-wasp | grep -q "state UP"; then
    ok=$(($ok+1)) ...

So, right now, I can see no WIFI in LuCI

The Fritzbox 7490 consists of two SoCs, the Lantiq, which has the DSL Interface, LAN Ports, USB etc. and the Atheros (WASP), which is connected to LAN5 (internally) and handles the WiFi. Kind of like a Router without WiFi and an AP in one box. That's also why you have to assign a different default IP Address to the Atheros.
For some reason the driver to boot the atheros gets loaded too early - i think OpenWrt configures the LAN Interfaces and the boot process for the Atheros get's interrupted - and you have to unload and load it again for the Atheros to boot. The Atheros only runs in an initramfs, because the SoC has no Flash Memory, so everytime it boots, the config is reset to defaults. That's why you have to configure your Local Startup to reload the module, wait for the Atheros to boot and then configure it via ssh.
There is a LuCI on the Atheros, too, but the changes will be lost on a reboot. I use it to see which uci commands i have to add to the Local Startup on the Lantiq.

PS: I noticed when testing 802.11s, that the Atheros Initramfs Image has to stay below 10 MiB, otherwise it does not boot.
Afaik the Stock AVM Firmware does some kind of PCIe over Ethernet and the Atheros SoC only passes through it's WiFi Interfaces. Howevery for OpenWrt the current solution is to run two OpenWrt instances.