diff options
Diffstat (limited to 'target/linux/ar71xx/base-files')
20 files changed, 2210 insertions, 0 deletions
diff --git a/target/linux/ar71xx/base-files/etc/defconfig/wndr3700/network b/target/linux/ar71xx/base-files/etc/defconfig/wndr3700/network new file mode 100644 index 000000000..69d7dc712 --- /dev/null +++ b/target/linux/ar71xx/base-files/etc/defconfig/wndr3700/network @@ -0,0 +1,69 @@ +config interface loopback + option ifname lo + option proto static + option ipaddr 127.0.0.1 + option netmask 255.0.0.0 + +config interface lan + option ifname eth0.1 + option type bridge + option proto static + option ipaddr 192.168.1.1 + option netmask 255.255.255.0 + +config interface wan + option ifname eth1 + option proto dhcp + +config switch + option name rtl8366s + option reset 1 + option enable_vlan 1 + # Blinkrate: 0=43ms; 1=84ms; 2=120ms; 3=170ms; 4=340ms; 5=670ms + option blinkrate 2 + +config switch_vlan + option device rtl8366s + option vlan 1 + option ports "0 1 2 3 5t" + +config switch_port + # Port 1 controls the GREEN configuration of LEDs for + # the switch and the section does not correspond to a real + # switch port. + # + # 0=LED off; 1=Collision/FDX; 2=Link/activity; 3=1000 Mb/s; + # 4=100 Mb/s; 5=10 Mb/s; 6=1000 Mb/s+activity; 7=100 Mb/s+activity; + # 8=10 Mb/s+activity; 9=10/100 Mb/s+activity; 10: Fiber; + # 11: Fault; 12: Link/activity(tx); 13: Link/activity(rx); + # 14: Link (master); 15: separate register + + option device rtl8366s + option port 1 + option led 6 + +config switch_port + # Port 2 controls the ORANGE configuration of LEDs for + # the switch and the section does not correspond to a real + # switch port. + # + # See the key above for switch port 1 for the meaning of the + # 'led' setting below. + + option device rtl8366s + option port 2 + option led 9 + +config switch_port + # Port 5 controls the configuration of the WAN LED and the + # section does not correspond to a real switch port. + # + # To toggle the use of green or orange LEDs for the WAN port, + # see the LED setting for wndr3700:green:wan in /etc/config/system. + # + # See the key above for switch port 1 for the meaning of the + # 'led' setting below. + + option device rtl8366s + option port 5 + option led 2 diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh new file mode 100755 index 000000000..c3f97345c --- /dev/null +++ b/target/linux/ar71xx/base-files/etc/diag.sh @@ -0,0 +1,196 @@ +#!/bin/sh +# +# Copyright (C) 2009 OpenWrt.org +# +# + +. /lib/ar71xx.sh + +status_led="" + +led_set_attr() { + [ -f "/sys/class/leds/$1/$2" ] && echo "$3" > "/sys/class/leds/$1/$2" +} + +status_led_set_timer() { + led_set_attr $status_led "trigger" "timer" + led_set_attr $status_led "delay_on" "$1" + led_set_attr $status_led "delay_off" "$2" +} + +status_led_on() { + led_set_attr $status_led "trigger" "none" + led_set_attr $status_led "brightness" 255 +} + +status_led_off() { + led_set_attr $status_led "trigger" "none" + led_set_attr $status_led "brightness" 0 +} + +get_status_led() { + case $(ar71xx_board_name) in + alfa-nx) + status_led="alfa:green:led_8" + ;; + all0305) + status_led="eap7660d:green:ds4" + ;; + ap136) + status_led="ap136:green:status" + ;; + ap81) + status_led="ap81:green:status" + ;; + ap83) + status_led="ap83:green:power" + ;; + ap96) + status_led="ap96:green:led2" + ;; + aw-nr580) + status_led="aw-nr580:green:ready" + ;; + bullet-m | rocket-m | nano-m | nanostation-m) + status_led="ubnt:green:link4" + ;; + db120) + status_led="db120:green:status" + ;; + dir-600-a1 |\ + dir-615-e4) + status_led="d-link:green:power" + ;; + dir-615-c1) + status_led="d-link:green:status" + ;; + dir-825-b1) + status_led="d-link:orange:power" + ;; + eap7660d) + status_led="eap7660d:green:ds4" + ;; + hornet-ub) + status_led="alfa:blue:wps" + ;; + ja76pf | \ + ja76pf2) + status_led="jjplus:green:led1" + ;; + ls-sr71) + status_led="ubnt:green:d22" + ;; + mzk-w04nu | \ + mzk-w300nh) + status_led="planex:green:status" + ;; + nbg460n_550n_550nh) + status_led="nbg460n:green:power" + ;; + om2p | \ + om2p-lc) + status_led="om2p:blue:power" + ;; + pb44) + status_led="pb44:amber:jump1" + ;; + rb-411 | rb-411u | rb-433 | rb-433u | rb-450 | rb-450g | rb-493) + status_led="rb4xx:yellow:user" + ;; + rb-750) + status_led="rb750:green:act" + ;; + routerstation | routerstation-pro) + status_led="ubnt:green:rf" + ;; + rw2458n) + status_led="rw2458n:green:d3" + ;; + tew-632brp) + status_led="tew-632brp:green:status" + ;; + tew-673gru) + status_led="trendnet:blue:wps" + ;; + tew-712br) + status_led="trendnet:green:power" + ;; + tl-mr3020) + status_led="tp-link:green:wps" + ;; + tl-mr3220 | \ + tl-mr3420 | \ + tl-wa901nd | \ + tl-wa901nd-v2 | \ + tl-wr1041n-v2 | \ + tl-wr1043nd | \ + tl-wr741nd | \ + tl-wr741nd-v4 | \ + tl-wr841n-v1 | \ + tl-wr841n-v7 | \ + tl-wr841n-v8 | \ + tl-wr941nd) + status_led="tp-link:green:system" + ;; + tl-wdr4300 | \ + tl-wr703n) + status_led="tp-link:blue:system" + ;; + tl-wr2543n) + status_led="tp-link:green:wps" + ;; + unifi) + status_led="ubnt:green:dome" + ;; + whr-g301n | \ + whr-hp-g300n | \ + whr-hp-gn | \ + wzr-hp-g300nh) + status_led="buffalo:green:router" + ;; + wlae-ag300n) + status_led="buffalo:green:status" + ;; + wzr-hp-ag300h | \ + wzr-hp-g300nh2) + status_led="buffalo:red:diag" + ;; + wndr3700) + status_led="wndr3700:green:power" + ;; + wnr2000) + status_led="wnr2000:green:power" + ;; + wp543) + status_led="wp543:green:diag" + ;; + wrt400n) + status_led="wrt400n:blue:wps" + ;; + wrt160nl) + status_led="wrt160nl:blue:wps" + ;; + zcn-1523h-2 | zcn-1523h-5) + status_led="zcn-1523h:amber:init" + ;; + esac; +} + +set_state() { + get_status_led + + case "$1" in + preinit) + insmod leds-gpio + insmod ledtrig-default-on + insmod ledtrig-timer + status_led_set_timer 200 200 + ;; + failsafe) + status_led_set_timer 50 50 + ;; + done) + status_led_on + ;; + esac +} diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/net/10-ar922x-led-fix b/target/linux/ar71xx/base-files/etc/hotplug.d/net/10-ar922x-led-fix new file mode 100644 index 000000000..102415009 --- /dev/null +++ b/target/linux/ar71xx/base-files/etc/hotplug.d/net/10-ar922x-led-fix @@ -0,0 +1,51 @@ +#!/bin/sh + +# For AR9220 and AR9223, GPIO JTAG must explicit be disabled +# before LEDs start working. Do this when wifi device is +# detected. + +# +# $DEVPATH is not valid for some boards (including WZR-HP-AG300H). +# Manipulate the $DEVPATH to reach the corresponding phyN. +# + +devdir=`dirname $DEVPATH` +devdir=`dirname $devdir` +phydir=/sys$devdir/ieee80211 +phyname=`cat $phydir/phy*/name` + +if [ -z $phyname -o $ACTION != "add" ]; then exit 0; fi + +# +# ar922x_disable_gpio_jtag(): +# +# Emulate +# REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL, AR_GPIO_JTAG_DISABLE); +# for AR9220 and AR9223. +# + +ar922x_disable_gpio_jtag() +{ + local regidx=0x4054 + + [ -f /sys/kernel/debug/ieee80211/$1/ath9k/regidx ] && { + echo $regidx > /sys/kernel/debug/ieee80211/$1/ath9k/regidx + regval=`cat /sys/kernel/debug/ieee80211/$1/ath9k/regval` + regval=$((regval | 0x20000)) + echo regval $regval + echo $regval > /sys/kernel/debug/ieee80211/$1/ath9k/regval + } +} + +if [ $phyname -a $ACTION = "add" ]; then + + . /lib/ar71xx.sh + + case $(ar71xx_board_name) in + wzr-hp-ag300h) + ar922x_disable_gpio_jtag $phyname + ;; + esac; +fi + +exit 0 diff --git a/target/linux/ar71xx/base-files/etc/init.d/defconfig b/target/linux/ar71xx/base-files/etc/init.d/defconfig new file mode 100755 index 000000000..364fa4a6a --- /dev/null +++ b/target/linux/ar71xx/base-files/etc/init.d/defconfig @@ -0,0 +1,20 @@ +#!/bin/sh /etc/rc.common +# +# Copyright (C) 2009 OpenWrt.org +# + +START=05 + +start() { + . /lib/ar71xx.sh + + local board=$(ar71xx_board_name) + + [ ! -d /etc/defconfig/$board ] && return 0 + + for f in $( ls /etc/defconfig/$board ); do + if [ ! -e /etc/config/$f ]; then + cp /etc/defconfig/$board/$f /etc/config/ + fi + done +} diff --git a/target/linux/ar71xx/base-files/etc/inittab b/target/linux/ar71xx/base-files/etc/inittab new file mode 100644 index 000000000..17f829f6d --- /dev/null +++ b/target/linux/ar71xx/base-files/etc/inittab @@ -0,0 +1,2 @@ +::sysinit:/etc/init.d/rcS S boot +::shutdown:/etc/init.d/rcS K shutdown diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/inittab-console-fixup b/target/linux/ar71xx/base-files/etc/uci-defaults/inittab-console-fixup new file mode 100755 index 000000000..4098b37a7 --- /dev/null +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/inittab-console-fixup @@ -0,0 +1,27 @@ +#!/bin/sh +# +# Copyright (C) 2011 OpenWrt.org +# + +enable_console_login() { + local cons=$1 + local initline="$cons::askfirst:/bin/ash --login" + + grep -qs "^$initline" /etc/inittab || { + echo "$initline" >> /etc/inittab + sync + kill -HUP 1 + } +} + +inittab_console_fixup() { + for cons in ttyS0 ttyATH0; do + grep -qs "console=$cons" /proc/cmdline && { + enable_console_login $cons + } + done +} + +inittab_console_fixup + +exit 0 diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/leds b/target/linux/ar71xx/base-files/etc/uci-defaults/leds new file mode 100755 index 000000000..cb4b68299 --- /dev/null +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/leds @@ -0,0 +1,209 @@ +#!/bin/sh +# +# Copyright (C) 2011 OpenWrt.org +# + +. /lib/functions/uci-defaults.sh +. /lib/ar71xx.sh + +board=$(ar71xx_board_name) + +case "$board" in +alfa-nx) + ucidef_set_led_netdev "wan" "WAN" "alfa:green:led_2" "eth0" + ucidef_set_led_netdev "lan" "LAN" "alfa:green:led_3" "eth1" + ;; + +all0258n) + ucidef_set_rssimon "wlan0" "40000" "1" + ucidef_set_led_rssi "rssilow" "RSSILOW" "all0258n:red:rssilow" "wlan0" "1" "40" "0" "6" + ucidef_set_led_rssi "rssimedium" "RSSIMEDIUM" "all0258n:yellow:rssimedium" "wlan0" "30" "80" "-29" "5" + ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "all0258n:green:rssihigh" "wlan0" "70" "100" "-69" "8" + ;; + +all0315n) + ucidef_set_rssimon "wlan0" "40000" "1" + ucidef_set_led_rssi "rssilow" "RSSILOW" "all0315n:red:rssilow" "wlan0" "1" "40" "0" "6" + ucidef_set_led_rssi "rssimedium" "RSSIMEDIUM" "all0315n:yellow:rssimedium" "wlan0" "30" "80" "-29" "5" + ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "all0315n:green:rssihigh" "wlan0" "70" "100" "-69" "8" + ;; + +ap113) + ucidef_set_led_usbdev "usb" "USB" "ap113:green:usb" "1-1" + ;; + +db120) + ucidef_set_led_usbdev "usb" "USB" "db120:green:usb" "1-1" + ;; + +rb750) + ucidef_set_led_default "act" "act" "rb750:green:act" "1" + ucidef_set_led_netdev "port1" "port1" "rb750:green:port1" "eth1" + ucidef_set_led_switch "port2" "port2" "rb750:green:port2" "switch0" "0x10" + ucidef_set_led_switch "port3" "port3" "rb750:green:port3" "switch0" "0x08" + ucidef_set_led_switch "port4" "port4" "rb750:green:port4" "switch0" "0x04" + ucidef_set_led_switch "port5" "port5" "rb750:green:port5" "switch0" "0x02" + ;; + +dir-600-a1|\ +dir-615-e4) + ucidef_set_led_netdev "wan" "WAN" "d-link:green:wan" "eth1" + ucidef_set_led_switch "lan1" "LAN1" "d-link:green:lan1" "switch0" "0x02" + ucidef_set_led_switch "lan2" "LAN2" "d-link:green:lan2" "switch0" "0x04" + ucidef_set_led_switch "lan3" "LAN3" "d-link:green:lan3" "switch0" "0x08" + ucidef_set_led_switch "lan4" "LAN4" "d-link:green:lan4" "switch0" "0x10" + ;; + +dir-825-b1) + ucidef_set_led_usbdev "usb" "USB" "d-link:blue:usb" "1-1" + ;; + +hornet-ub) + ucidef_set_led_netdev "lan" "LAN" "alfa:blue:lan" "eth0" + ucidef_set_led_netdev "wan" "WAN" "alfa:blue:wan" "eth1" + ucidef_set_led_wlan "wlan" "WLAN" "alfa:blue:wlan" "phy0tpt" + ucidef_set_led_usbdev "usb" "USB" "alfa:blue:usb" "1-1" + ;; + +mzk-w04u) + ucidef_set_led_usbdev "usb" "USB" "planex:green:usb" "1-1" + ;; + +mzk-w300nh) + ucidef_set_led_wlan "wlan" "WLAN" "planex:green:wlan" "phy0tpt" + ;; + +nbg460n_550n_550nh) + ucidef_set_led_wlan "wlan" "WLAN" "nbg460n:green:wlan" "phy0tpt" + ;; + +om2p | \ +om2p-lc) + ucidef_set_led_netdev "port1" "port1" "om2p:blue:wan" "eth0" + ucidef_set_led_netdev "port2" "port2" "om2p:blue:lan" "eth1" + ;; + +tew-712br) + ucidef_set_led_netdev "wan" "WAN" "trendnet:green:wan" "eth1" + ucidef_set_led_switch "lan1" "LAN1" "trendnet:green:lan1" "switch0" "0x02" + ucidef_set_led_switch "lan2" "LAN2" "trendnet:green:lan2" "switch0" "0x04" + ucidef_set_led_switch "lan3" "LAN3" "trendnet:green:lan3" "switch0" "0x08" + ucidef_set_led_switch "lan4" "LAN4" "trendnet:green:lan4" "switch0" "0x10" + ucidef_set_led_wlan "wlan" "WLAN" "trendnet:green:wlan" "phy0tpt" + ;; + +tl-mr11u | \ +tl-mr3020 | \ +tl-mr3040) + ucidef_set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1" + ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt" + ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0" + ;; + +tl-mr3220 | \ +tl-mr3420 ) + ucidef_set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1" + ;; + +tl-wa901nd) + ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0" + ;; + +tl-wa901nd-v2) + ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt" + ;; + +tl-wdr4300) + ucidef_set_led_usbdev "usb1" "USB1" "tp-link:green:usb1" "1-1.1" + ucidef_set_led_usbdev "usb2" "USB2" "tp-link:green:usb2" "1-1.2" + ucidef_set_led_wlan "wlan2g" "WLAN2G" "tp-link:blue:wlan2g" "phy0tpt" + ;; + +tl-wr741nd) + ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1" + ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x02" + ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x04" + ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x08" + ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x10" + ;; + +tl-wr741nd-v4) + ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1" + ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x04" + ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x08" + ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x10" + ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02" + ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt" + ;; + +tl-wr841n-v8) + ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth0" + ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x04" + ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x08" + ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x10" + ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02" + ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt" + ;; + +tl-wr941nd | \ +tl-wr1041n-v2) + ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt" + ;; + +tl-wr1043nd) + ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1" + ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt" + ;; + +tl-wr2543n) + ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1" + ;; + +wrt160nl) + ucidef_set_led_wlan "wlan" "WLAN" "wrt160nl:blue:wlan" "phy0tpt" + ;; + +wndr3700) + ucidef_set_led_default "wan" "WAN LED (green)" "wndr3700:green:wan" "0" + ucidef_set_led_usbdev "usb" "USB" "wndr3700:green:usb" "1-1" + ;; + +whr-g301n |\ +whr-hp-g300n |\ +whr-hp-gn) + ucidef_set_led_netdev "wan" "WAN" "buffalo:green:wan" "eth1" + ucidef_set_led_switch "lan1" "LAN1" "buffalo:green:lan1" "switch0" "0x02" + ucidef_set_led_switch "lan2" "LAN2" "buffalo:green:lan2" "switch0" "0x04" + ucidef_set_led_switch "lan3" "LAN3" "buffalo:green:lan3" "switch0" "0x08" + ucidef_set_led_switch "lan4" "LAN4" "buffalo:green:lan4" "switch0" "0x10" + ;; + +wlae-ag300n) + ucidef_set_led_netdev "wireless" "WIRELESS" "buffalo:green:wireless" "wlan0" + ;; + +wzr-hp-ag300h) + ucidef_set_led_default "diag" "DIAG" "buffalo:red:diag" "0" + ucidef_set_led_netdev "router" "ROUTER" "buffalo:green:router" "eth1" + ucidef_set_led_usbdev "usb" "USB" "buffalo:green:usb" "1-1" + ;; + +wzr-hp-g300nh) + ucidef_set_led_wlan "wlan" "Wireless" "buffalo:green:wireless" "phy0tpt" + ucidef_set_led_netdev "router" "Router" "buffalo:green:router" "eth1" + ucidef_set_led_usbdev "usb" "USB" "buffalo:blue:usb" "1-1" + ;; + +zcn-1523h-2) + ucidef_set_led_netdev "lan1" "lan1" "zcn-1523h:green:lan1" "eth0" + ;; + +zcn-1523h-5) + ucidef_set_led_netdev "lan1" "lan1" "zcn-1523h:green:lan1" "eth0" + ucidef_set_led_netdev "lan2" "lan2" "zcn-1523h:green:lan2" "eth1" + ;; +esac + +ucidef_commit_leds + +exit 0 diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/network b/target/linux/ar71xx/base-files/etc/uci-defaults/network new file mode 100755 index 000000000..cd9e997d8 --- /dev/null +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/network @@ -0,0 +1,215 @@ +#!/bin/sh +# +# Copyright (C) 2011 OpenWrt.org +# + +[ -e /etc/config/network ] && exit 0 + +touch /etc/config/network + +. /lib/functions/uci-defaults.sh +. /lib/ar71xx.sh + +ucidef_set_interface_loopback + +board=$(ar71xx_board_name) + +case "$board" in +all0315n |\ +all0258n |\ +ja76pf2) + ucidef_set_interface_lan "eth0 eth1" + ;; + +db120 |\ +rb-2011l | \ +rb-2011uas-2hnd) + ucidef_set_interfaces_lan_wan "eth0.1 eth1" "eth0.2" + ucidef_add_switch "eth0" "1" "1" + ucidef_add_switch_vlan "eth0" "1" "0t 2 3 4 5" + ucidef_add_switch_vlan "eth0" "2" "0t 1" + ucidef_add_switch "eth1" "1" "1" + ucidef_add_switch_vlan "eth1" "1" "0 1 2 3 4 5" + ;; + +dir-825-b1|\ +tew-673gru) + ucidef_set_interfaces_lan_wan "eth0.1" "eth1" + ucidef_add_switch "rtl8366s" "1" "1" + ucidef_add_switch_vlan "rtl8366s" "1" "0 1 2 3 5t" + ;; + +nbg460n_550n_550nh) + ucidef_set_interfaces_lan_wan "eth0" "eth1" + ucidef_add_switch "rtl8366s" "1" "1" + ucidef_add_switch_vlan "rtl8366s" "0" "0 1 2 3 5" + ;; + +rb-433 |\ +rb-433u) + ucidef_set_interfaces_lan_wan "eth1" "eth0" + ucidef_add_switch "switch0" "1" "1" + ucidef_add_switch_vlan "switch0" "1" "1 2 5" + ;; + +rb-450) + ucidef_set_interfaces_lan_wan "eth1" "eth0" + ucidef_add_switch "eth1" "1" "1" + ucidef_add_switch_vlan "eth1" "1" "0 1 2 3 5" + ;; + +rb-450g |\ +routerstation-pro) + ucidef_set_interfaces_lan_wan "eth1" "eth0" + ucidef_add_switch "switch0" "1" "1" + ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4" + ;; + +ap136 |\ +rb-750gl |\ +rb-751g |\ +wzr-hp-g450h) + ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2" + ucidef_add_switch "switch0" "1" "1" + ucidef_add_switch_vlan "switch0" "1" "0t 2 3 4 5" + ucidef_add_switch_vlan "switch0" "2" "0t 1" + ;; + +rb-493g) + ucidef_set_interfaces_lan_wan "eth0 eth1.1" "eth1.2" + ucidef_add_switch "switch0" "1" "1" + ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4" + ucidef_add_switch "switch1" "1" "1" + ucidef_add_switch_vlan "switch1" "1" "0t 1 2 3 4" + ucidef_add_switch_vlan "switch1" "2" "0t 5" + ;; + +wzr-hp-g300nh2 |\ +pb92 |\ +ap113) + ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2" + ucidef_add_switch "eth0" "1" "1" + ucidef_add_switch_vlan "eth0" "1" "0t 1 3 4 5" + ucidef_add_switch_vlan "eth0" "2" "0t 2" + ;; + +tl-wdr4300|\ +tl-wr1041n-v2) + ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2" + ucidef_add_switch "eth0" "1" "1" + ucidef_add_switch_vlan "eth0" "1" "0t 2 3 4 5" + ucidef_add_switch_vlan "eth0" "2" "0t 1" + ;; + +tl-wr1043nd) + ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2" + ucidef_add_switch "rtl8366rb" "1" "1" + ucidef_add_switch_vlan "rtl8366rb" "1" "1 2 3 4 5t" + ucidef_add_switch_vlan "rtl8366rb" "2" "0 5t" + ;; + +tl-wr2543n) + ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2" + ucidef_add_switch "switch0" "1" "1" + ucidef_add_switch_vlan "switch0" "1" "1 2 3 4 9t" + ucidef_add_switch_vlan "switch0" "2" "0 9t" + ;; + +tl-wr841n-v1|\ +tl-wr941nd) + ucidef_set_interface_raw "eth" "eth0" + ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan" + ;; + +tl-wr841n-v8) + ucidef_set_interfaces_lan_wan "eth1" "eth0" + ucidef_add_switch "switch0" "1" "1" + ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4" + ;; + +wrt160nl) + ucidef_set_interfaces_lan_wan "eth0" "eth1" + ucidef_add_switch "eth0" "1" "1" + ucidef_add_switch_vlan "eth0" "1" "0 1 2 3 4 5" + ;; + +wzr-hp-g300nh) + ucidef_set_interfaces_lan_wan "eth0.1" "eth1" + ucidef_add_switch "switch0" "1" "1" + ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 5t" + ;; + +all0305 |\ +aw-nr580 |\ +bullet-m |\ +eap7660d |\ +ew-dorin |\ +rb-411 |\ +tl-mr11u |\ +tl-mr3020 |\ +tl-mr3040 |\ +tl-wa901nd |\ +tl-wa901nd-v2 |\ +tl-wr703n |\ +wp543) + ucidef_set_interface_lan "eth0" + ;; + +alfa-ap96 |\ +alfa-nx |\ +ap83 |\ +jwap003 |\ +pb42 |\ +pb44 |\ +routerstation|\ +wpe72) + ucidef_set_interfaces_lan_wan "eth1" "eth0" + ;; + +ap121 |\ +ap121-mini |\ +ap96 |\ +airrouter |\ +dir-600-a1 |\ +dir-615-c1 |\ +dir-615-e4 |\ +ja76pf |\ +rb-750 |\ +rb-751 |\ +tew-632brp |\ +tew-712br |\ +tl-mr3220 |\ +tl-mr3420 |\ +tl-wr741nd |\ +tl-wr741nd-v4 |\ +tl-wr841n-v7 |\ +whr-g301n |\ +whr-hp-g300n |\ +whr-hp-gn |\ +wzr-hp-ag300h) + ucidef_set_interfaces_lan_wan "eth0" "eth1" + ucidef_add_switch "eth0" "1" "1" + ucidef_add_switch_vlan "eth0" "1" "0 1 2 3 4" + ;; + +wzr-hp-g450h) + ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2" + ucidef_add_switch "eth0" "1" "1" + ucidef_add_switch_vlan "eth0" "1" "0t 2 3 4 5" + ucidef_add_switch_vlan "eth0" "2" "0t 1" + ;; + +ew-dorin-router) + ucidef_set_interfaces_lan_wan "eth0" "eth1" + ucidef_add_switch "eth0" "1" "1" + ucidef_add_switch_vlan "eth0" "1" "0 2 3" + ;; + +*) + ucidef_set_interfaces_lan_wan "eth0" "eth1" + ;; +esac + +uci commit network + +exit 0 diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/vlan-migration b/target/linux/ar71xx/base-files/etc/uci-defaults/vlan-migration new file mode 100755 index 000000000..bea9493c8 --- /dev/null +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/vlan-migration @@ -0,0 +1,13 @@ +#!/bin/sh +# +# Copyright (C) 2010 OpenWrt.org +# + +local dev="$(uci -q get network.@switch_vlan[0].device)" +local vlan="$(uci -q get network.@switch_vlan[0].vlan)" + +if [ "$dev" = "rtl8366s" ] && [ "$vlan" = 0 ]; then + logger -t vlan-migration "VLAN 0 is invalid for RTL8366s, changing to 1" + uci set network.@switch_vlan[0].vlan=1 + uci commit network +fi diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/wrt160nl b/target/linux/ar71xx/base-files/etc/uci-defaults/wrt160nl new file mode 100755 index 000000000..dce28dde9 --- /dev/null +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/wrt160nl @@ -0,0 +1,16 @@ +#!/bin/sh +# +# Copyright (C) 2010 OpenWrt.org +# + +. /lib/ar71xx.sh + +board=$(ar71xx_board_name) + +wrt160nl_fixtrx() { + mtd -o 32 fixtrx firmware +} + +if [ "${board}" == "wrt160nl" ]; then + wrt160nl_fixtrx +fi diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh new file mode 100755 index 000000000..f3c32555f --- /dev/null +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -0,0 +1,455 @@ +#!/bin/sh +# +# Copyright (C) 2009-2011 OpenWrt.org +# + +AR71XX_BOARD_NAME= +AR71XX_MODEL= + +ar71xx_get_mtd_offset_size_format() { + local mtd="$1" + local offset="$2" + local size="$3" + local format="$4" + local dev + + dev=$(find_mtd_part $mtd) + [ -z "$dev" ] && return + + dd if=$dev bs=1 skip=$offset count=$size 2>/dev/null | hexdump -v -e "1/1 \"$format\"" +} + +ar71xx_get_mtd_part_magic() { + local mtd="$1" + ar71xx_get_mtd_offset_size_format "$mtd" 0 4 %02x +} + +wndr3700_board_detect() { + local machine="$1" + local magic + local name + + name="wndr3700" + + magic="$(ar71xx_get_mtd_part_magic firmware)" + case $magic in + "33373030") + machine="NETGEAR WNDR3700" + ;; + "33373031") + local model + model=$(ar71xx_get_mtd_offset_size_format art 56 10 %c) + if [ -z "$model" ] || [ "$model" = $'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' ]; then + machine="NETGEAR WNDR3700v2" + elif [ -z "$model" ] || [ "$model" = $'\xff\xff\xff\xff\xff\xff\xff\xff\xffN' ]; then + machine="NETGEAR WNDRMAC" + else + machine="NETGEAR $model" + fi + ;; + esac + + AR71XX_BOARD_NAME="$name" + AR71XX_MODEL="$machine" +} + +tplink_get_hwid() { + local part + + part=$(find_mtd_part firmware) + [ -z "$part" ] && return 1 + + dd if=$part bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' +} + +tplink_board_detect() { + local model="$1" + local hwid + local hwver + + hwid=$(tplink_get_hwid) + hwver=${hwid:6:2} + hwver="v${hwver#0}" + + case "$hwid" in + "070300"*) + model="TP-Link TL-WR703N" + ;; + "070100"*) + model="TP-Link TL-WA701N/ND" + ;; + "074000"*) + model="TP-Link TL-WR740N/ND" + ;; + "074100"*) + model="TP-Link TL-WR741N/ND" + ;; + "074300"*) + model="TP-Link TL-WR743N/ND" + ;; + "084100"*) + model="TP-Link TL-WR841N/ND" + ;; + "084200"*) + model="TP-Link TL-WR842N/ND" + ;; + "090100"*) + model="TP-Link TL-WA901N/ND" + ;; + "094100"*) + model="TP-Link TL-WR941N/ND" + ;; + "104100"*) + model="TP-Link TL-WR1041N/ND" + ;; + "104300"*) + model="TP-Link TL-WR1043N/ND" + ;; + "254300"*) + model="TP-Link TL-WR2543N/ND" + ;; + "110101"*) + model="TP-Link TL-MR11U" + ;; + "302000"*) + model="TP-Link TL-MR3020" + ;; + "304000"*) + model="TP-Link TL-MR3040" + ;; + "322000"*) + model="TP-Link TL-MR3220" + ;; + "342000"*) + model="TP-Link TL-MR3420" + ;; + "360000"*) + model="TP-Link TL-WDR3600" + ;; + "430000"*) + model="TP-Link TL-WDR4300" + ;; + "431000"*) + model="TP-Link TL-WDR4310" + ;; + *) + hwver="" + ;; + esac + + AR71XX_MODEL="$model $hwver" +} + +ar71xx_board_detect() { + local machine + local name + + machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /proc/cpuinfo) + + case "$machine" in + *"AirRouter") + name="airrouter" + ;; + *"ALFA Network AP96") + name="alfa-ap96" + ;; + *"ALFA Network N2/N5") + name="alfa-nx" + ;; + *ALL0258N) + name="all0258n" + ;; + *ALL0305) + name="all0305" + ;; + *ALL0315N) + name="all0315n" + ;; + *AP113) + name="ap113" + ;; + *AP121) + name="ap121" + ;; + *AP121-MINI) + name="ap121-mini" + ;; + *"AP136 reference board") + name="ap136" + ;; + *AP81) + name="ap81" + ;; + *AP83) + name="ap83" + ;; + *"Atheros AP96") + name="ap96" + ;; + *AW-NR580) + name="aw-nr580" + ;; + *"DB120 reference board") + name="db120" + ;; + *"DIR-600 rev. A1") + name="dir-600-a1" + ;; + *"DIR-615 rev. E4") + name="dir-615-e4" + ;; + *"DIR-825 rev. B1") + name="dir-825-b1" + ;; + *EAP7660D) + name="eap7660d" + ;; + *JA76PF) + name="ja76pf" + ;; + *JA76PF2) + name="ja76pf2" + ;; + *"Bullet M") + name="bullet-m" + ;; + *"Nanostation M") + name="nanostation-m" + ;; + *JWAP003) + name="jwap003" + ;; + *"Hornet-UB") + name="hornet-ub" + ;; + *LS-SR71) + name="ls-sr71" + ;; + *MZK-W04NU) + name="mzk-w04nu" + ;; + *MZK-W300NH) + name="mzk-w300nh" + ;; + *"NBG460N/550N/550NH") + name="nbg460n_550n_550nh" + ;; + *OM2P) + name="om2p" + ;; + *"OM2P LC") + name="om2p-lc" + ;; + *PB42) + name="pb42" + ;; + *"PB44 reference board") + name="pb44" + ;; + *PB92) + name="pb92" + ;; + *"RouterBOARD 411/A/AH") + name="rb-411" + ;; + *"RouterBOARD 411U") + name="rb-411u" + ;; + *"RouterBOARD 433/AH") + name="rb-433" + ;; + *"RouterBOARD 433UAH") + name="rb-433u" + ;; + *"RouterBOARD 450") + name="rb-450" + ;; + *"RouterBOARD 450G") + name="rb-450g" + ;; + *"RouterBOARD 493/AH") + name="rb-493" + ;; + *"RouterBOARD 493G") + name="rb-493g" + ;; + *"RouterBOARD 750") + name="rb-750" + ;; + *"RouterBOARD 750GL") + name="rb-750gl" + ;; + *"RouterBOARD 751") + name="rb-751" + ;; + *"RouterBOARD 751G") + name="rb-751g" + ;; + *"RouterBOARD 2011L") + name="rb-2011l" + ;; + *"RouterBOARD 2011UAS-2HnD") + name="rb-2011uas-2hnd" + ;; + *"Rocket M") + name="rocket-m" + ;; + *RouterStation) + name="routerstation" + ;; + *"RouterStation Pro") + name="routerstation-pro" + ;; + *RW2458N) + name="rw2458n" + ;; + *TEW-632BRP) + name="tew-632brp" + ;; + *TEW-673GRU) + name="tew-673gru" + ;; + *TEW-712BR) + name="tew-712br" + ;; + *"TL-WR1041N v2") + name="tl-wr1041n-v2" + ;; + *TL-WR1043ND) + name="tl-wr1043nd" + ;; + *TL-WR2543N*) + name="tl-wr2543n" + ;; + *"DIR-615 rev. C1") + name="dir-615-c1" + ;; + *TL-MR3020) + name="tl-mr3020" + ;; + *TL-MR3040) + name="tl-mr3040" + ;; + *TL-MR3220) + name="tl-mr3220" + ;; + *TL-MR3420) + name="tl-mr3420" + ;; + *TL-WA901ND) + name="tl-wa901nd" + ;; + *"TL-WA901ND v2") + name="tl-wa901nd-v2" + ;; + *"TL-WDR3600/4300/4310") + name="tl-wdr4300" + ;; + *TL-WR741ND) + name="tl-wr741nd" + ;; + *"TL-WR741ND v4") + name="tl-wr741nd-v4" + ;; + *"TL-WR841N v1") + name="tl-wr841n-v1" + ;; + *"TL-WR841N/ND v7") + name="tl-wr841n-v7" + ;; + *"TL-WR841N/ND v8") + name="tl-wr841n-v8" + ;; + *TL-WR941ND) + name="tl-wr941nd" + ;; + *"TL-WR703N v1") + name="tl-wr703n" + ;; + *"TL-MR11U") + name="tl-mr11u" + ;; + *UniFi) + name="unifi" + ;; + *WHR-G301N) + name="whr-g301n" + ;; + *WHR-HP-GN) + name="whr-hp-gn" + ;; + *WLAE-AG300N) + name="wlae-ag300n" + ;; + *WP543) + name="wp543" + ;; + *WPE72) + name="wpe72" + ;; + *"WNDR3700/WNDR3800/WNDRMAC") + wndr3700_board_detect "$machine" + ;; + *WNR2000) + name="wnr2000" + ;; + *WRT160NL) + name="wrt160nl" + ;; + *WRT400N) + name="wrt400n" + ;; + *WZR-HP-AG300H) + name="wzr-hp-ag300h" + ;; + *WZR-HP-G300NH) + name="wzr-hp-g300nh" + ;; + *WZR-HP-G450H) + name="wzr-hp-g450h" + ;; + *WZR-HP-G300NH2) + name="wzr-hp-g300nh2" + ;; + *WHR-HP-G300N) + name="whr-hp-g300n" + ;; + *ZCN-1523H-2) + name="zcn-1523h-2" + ;; + *ZCN-1523H-5) + name="zcn-1523h-5" + ;; + *EmbWir-Dorin) + name="ew-dorin" + ;; + *EmbWir-Dorin-Router) + name="ew-dorin-router" + ;; + esac + + case "$machine" in + *TL-WR* | *TL-WA* | *TL-MR*) + tplink_board_detect "$machine" + ;; + esac + + [ -z "$name" ] && name="unknown" + + [ -z "$AR71XX_BOARD_NAME" ] && AR71XX_BOARD_NAME="$name" + [ -z "$AR71XX_MODEL" ] && AR71XX_MODEL="$machine" + + [ -e "/tmp/sysinfo/" ] || mkdir -p "/tmp/sysinfo/" + + echo "$AR71XX_BOARD_NAME" > /tmp/sysinfo/board_name + echo "$AR71XX_MODEL" > /tmp/sysinfo/model +} + +ar71xx_board_name() { + local name + + [ -f /tmp/sysinfo/board_name ] && name=$(cat /tmp/sysinfo/board_name) + [ -z "$name" ] && name="unknown" + + echo "$name" +} diff --git a/target/linux/ar71xx/base-files/lib/preinit/03_preinit_do_ar71xx.sh b/target/linux/ar71xx/base-files/lib/preinit/03_preinit_do_ar71xx.sh new file mode 100644 index 000000000..ff5407a0d --- /dev/null +++ b/target/linux/ar71xx/base-files/lib/preinit/03_preinit_do_ar71xx.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +do_ar71xx() { + . /lib/ar71xx.sh + + ar71xx_board_detect +} + +boot_hook_add preinit_main do_ar71xx diff --git a/target/linux/ar71xx/base-files/lib/preinit/05_enable_reset_button_ar71xx b/target/linux/ar71xx/base-files/lib/preinit/05_enable_reset_button_ar71xx new file mode 100644 index 000000000..317c8d15a --- /dev/null +++ b/target/linux/ar71xx/base-files/lib/preinit/05_enable_reset_button_ar71xx @@ -0,0 +1,13 @@ +# +# Copyright (C) 2009 OpenWrt.org +# + +. /lib/ar71xx.sh + + +preinit_enable_reset_button() { + insmod gpio-button-hotplug +} + +boot_hook_add preinit_main preinit_enable_reset_button + diff --git a/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx b/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx new file mode 100644 index 000000000..f8bb7b76c --- /dev/null +++ b/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx @@ -0,0 +1,39 @@ +# +# Copyright (C) 2009 OpenWrt.org +# + +. /lib/ar71xx.sh + +fetch_mac_from_mtd() { + local mtd_part=$1 + local lan_env=$2 + local wan_env=$3 + local mtd mac + + mtd=$(grep $mtd_part /proc/mtd | cut -d: -f1) + [ -z $mtd ] && return + + mac=$(grep $lan_env /dev/$mtd | cut -d= -f2) + [ ! -z $mac ] && ifconfig eth0 hw ether $mac 2>/dev/null + + mac=$(grep $wan_env /dev/$mtd | cut -d= -f2) + [ ! -z $mac ] && ifconfig eth1 hw ether $mac 2>/dev/null +} + +preinit_set_mac_address() { + case $(ar71xx_board_name) in + tew-632brp) + fetch_mac_from_mtd config lan_mac wan_mac + ;; + dir-615-c1) + fetch_mac_from_mtd config lan_mac wan_mac + echo 1 > /sys/class/leds/dir-615-c1:green:wancpu/brightness + ;; + wrt160nl) + fetch_mac_from_mtd nvram lan_hwaddr wan_hwaddr + ;; + esac +} + +boot_hook_add preinit_main preinit_set_mac_address + diff --git a/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx b/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx new file mode 100644 index 000000000..8611dce81 --- /dev/null +++ b/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx @@ -0,0 +1,16 @@ +#!/bin/sh + +# +# Copyright (C) 2009 OpenWrt.org +# + +. /lib/ar71xx.sh + +set_preinit_iface() { + ifname=eth0 +} + +boot_hook_add preinit_main set_preinit_iface + + + diff --git a/target/linux/ar71xx/base-files/lib/upgrade/allnet.sh b/target/linux/ar71xx/base-files/lib/upgrade/allnet.sh new file mode 100644 index 000000000..9a375ff19 --- /dev/null +++ b/target/linux/ar71xx/base-files/lib/upgrade/allnet.sh @@ -0,0 +1,160 @@ +# The U-Boot loader of the some Allnet devices requires image sizes and +# checksums to be provided in the U-Boot environment. +# In case the check fails during boot, a failsafe-system is started to provide +# a minimal web-interface for flashing a new firmware. + +# make sure we got uboot-envtools and fw_env.config copied over to the ramfs +platform_add_ramfs_ubootenv() { + [ -e /usr/sbin/fw_printenv ] && install_bin /usr/sbin/fw_printenv /usr/sbin/fw_setenv + [ -e /etc/fw_env.config ] && install_file /etc/fw_env.config +} +append sysupgrade_pre_upgrade platform_add_ramfs_ubootenv + +# determine size of the main firmware partition +platform_get_firmware_size() { + local dev size erasesize name + while read dev size erasesize name; do + name=${name#'"'}; name=${name%'"'} + case "$name" in + firmware) + printf "%d" "0x$size" + break + ;; + esac + done < /proc/mtd +} + +# get the first 4 bytes (magic) of a given file starting at offset in hex format +get_magic_long_at() { + dd if="$1" skip=$(( $CI_BLKSZ / 4 * $2 )) bs=4 count=1 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' +} + +get_filesize() { + wc -c "$1" | while read image_size _n ; do echo $image_size ; break; done +} + +# scan through the update image pages until matching a magic +platform_get_offset() { + offsetcount=0 + magiclong="x" + if [ -n "$3" ]; then + offsetcount=$3 + fi + while magiclong=$( get_magic_long_at "$1" "$offsetcount" ) && [ -n "$magiclong" ]; do + case "$magiclong" in + "2705"*) + # U-Boot image magic + if [ "$2" = "uImage" ]; then + echo $offsetcount + return + fi + ;; + "68737173"|"73717368") + # SquashFS + if [ "$2" = "rootfs" ]; then + echo $offsetcount + return + fi + ;; + "deadc0de"|"19852003") + # JFFS2 empty page + if [ "$2" = "rootfs-data" ]; then + echo $offsetcount + return + fi + ;; + esac + offsetcount=$(( $offsetcount + 1 )) + done +} + +platform_check_image_allnet() { + local fw_printenv=/usr/sbin/fw_printenv + [ ! -n "$fw_printenv" -o ! -x "$fw_printenv" ] && { + echo "Please install uboot-envtools!" + return 1 + } + + [ ! -r "/etc/fw_env.config" ] && { + echo "/etc/fw_env.config is missing" + return 1 + } + + local image_size=$( get_filesize "$1" ) + local firmware_size=$( platform_get_firmware_size ) + [ $image_size -ge $firmware_size ] && + { + echo "upgrade image is too big (${image_size}b > ${firmware_size}b)" + } + + local vmlinux_blockoffset=$( platform_get_offset "$1" uImage ) + [ -z $vmlinux_blockoffset ] && { + echo "vmlinux-uImage not found" + return 1 + } + + local rootfs_blockoffset=$( platform_get_offset "$1" rootfs "$vmlinux_blockoffset" ) + [ -z $rootfs_blockoffset ] && { + echo "missing rootfs" + return 1 + } + + local data_blockoffset=$( platform_get_offset "$1" rootfs-data "$rootfs_blockoffset" ) + [ -z $data_blockoffset ] && { + echo "rootfs doesn't have JFFS2 end marker" + return 1 + } + + return 0 +} + +platform_do_upgrade_allnet() { + local firmware_base_addr=$( printf "%d" "$1" ) + local vmlinux_blockoffset=$( platform_get_offset "$2" uImage ) + if [ ! -n "$vmlinux_blockoffset" ]; then + echo "can't determine uImage offset" + return 1 + fi + local rootfs_blockoffset=$( platform_get_offset "$2" rootfs $(( $vmlinux_blockoffset + 1 )) ) + local vmlinux_offset=$(( $vmlinux_blockoffset * $CI_BLKSZ )) + local vmlinux_addr=$(( $firmware_base_addr + $vmlinux_offset )) + local vmlinux_hexaddr=0x$( printf "%08x" "$vmlinux_addr" ) + if [ ! -n "$rootfs_blockoffset" ]; then + echo "can't determine rootfs offset" + return 1 + fi + local rootfs_offset=$(( $rootfs_blockoffset * $CI_BLKSZ )) + local rootfs_addr=$(( $firmware_base_addr + $rootfs_offset )) + local rootfs_hexaddr=0x$( printf "%08x" "$rootfs_addr" ) + local vmlinux_blockcount=$(( $rootfs_blockoffset - $vmlinux_blockoffset )) + local vmlinux_size=$(( $rootfs_offset - $vmlinux_offset )) + local vmlinux_hexsize=0x$( printf "%08x" "$vmlinux_size" ) + local data_blockoffset=$( platform_get_offset "$2" rootfs-data $(( $rootfs_blockoffset + 1 )) ) + if [ ! -n "$data_blockoffset" ]; then + echo "can't determine rootfs size" + return 1 + fi + local data_offset=$(( $data_blockoffset * $CI_BLKSZ )) + local rootfs_blockcount=$(( $data_blockoffset - $rootfs_blockoffset )) + local rootfs_size=$(( $data_offset - $rootfs_offset )) + local rootfs_hexsize=0x$( printf "%08x" "$rootfs_size" ) + + local rootfs_md5=$( dd if="$2" bs=$CI_BLKSZ skip=$rootfs_blockoffset count=$rootfs_blockcount 2>/dev/null | md5sum -); rootfs_md5="${rootfs_md5%% *}" + local vmlinux_md5=$( dd if="$2" bs=$CI_BLKSZ skip=$vmlinux_blockoffset count=$vmlinux_blockcount 2>/dev/null | md5sum -); vmlinux_md5="${vmlinux_md5%% *}" + # this needs a recent version of uboot-envtools! + cat >/tmp/fw_env_upgrade <<EOF +vmlinux_start_addr $vmlinux_hexaddr +vmlinux_size $vmlinux_hexsize +vmlinux_checksum $vmlinux_md5 +rootfs_start_addr $rootfs_hexaddr +rootfs_size $rootfs_hexsize +rootfs_checksum $rootfs_md5 +bootcmd bootm $vmlinux_hexaddr +EOF + fw_setenv -s /tmp/fw_env_upgrade || { + echo "failed to update U-Boot environment" + return 1 + } + shift + default_do_upgrade "$@" +} diff --git a/target/linux/ar71xx/base-files/lib/upgrade/dir825.sh b/target/linux/ar71xx/base-files/lib/upgrade/dir825.sh new file mode 100644 index 000000000..e16128a9c --- /dev/null +++ b/target/linux/ar71xx/base-files/lib/upgrade/dir825.sh @@ -0,0 +1,177 @@ +#!/bin/sh +# +# Copyright (C) 2012 OpenWrt.org +# + +. /lib/functions.sh +. /lib/ar71xx.sh + +get_mtd_part_size() { + local part_name=$1 + local first dev size erasesize name + while read dev size erasesize name; do + name=${name#'"'}; name=${name%'"'} + if [ "$name" = "$part_name" ]; then + echo $((0x$size)) + break + fi + done < /proc/mtd +} + +get_magic_at() { + local mtddev=$1 + local pos=$2 + dd bs=1 count=2 skip=$pos if=$mtddev 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' +} + +dir825b_is_caldata_valid() { + local mtddev=$1 + local magic + + magic=$(get_magic_at $mtddev 4096) + [ "$magic" != "a55a" ] && return 0 + + magic=$(get_magic_at $mtddev 20480) + [ "$magic" != "a55a" ] && return 0 + + return 1 +} + +dir825b_copy_caldata() { + local cal_src=$1 + local cal_dst=$2 + local mtd_src + local mtd_dst + local md5_src + local md5_dst + + mtd_src=$(find_mtd_part $cal_src) + [ -z "$mtd_src" ] && { + echo "no $cal_src partition found" + return 1 + } + + mtd_dst=$(find_mtd_part $cal_dst) + [ -z "$mtd_dst" ] && { + echo "no $cal_dst partition found" + return 1 + } + + dir825b_is_caldata_valid "$mtd_src" && { + echo "no valid calibration data found in $cal_src" + return 1 + } + + dir825b_is_caldata_valid "$mtd_dst" && { + echo "Copying calibration data from $cal_src to $cal_dst..." + dd if="$mtd_src" 2>/dev/null | mtd -q -q write - "$cal_dst" + } + + md5_src=$(md5sum "$mtd_src") && md5_src="${md5_src%% *}" + md5_dst=$(md5sum "$mtd_dst") && md5_dst="${md5_dst%% *}" + + [ "$md5_src" != "$md5_dst" ] && { + echo "calibration data mismatch $cal_src:$md5_src $cal_dst:$md5_dst" + return 1 + } + + return 0 +} + +dir825b_do_upgrade_combined() { + local fw_part=$1 + local fw_file=$2 + local fw_mtd=$(find_mtd_part $fw_part) + local fw_length=0x$(dd if="$fw_file" bs=2 skip=1 count=4 2>/dev/null) + local fw_blocks=$(($fw_length / 65536)) + + if [ -n "$fw_mtd" ] && [ ${fw_blocks:-0} -gt 0 ]; then + local append="" + [ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR" + + sync + dd if="$fw_file" bs=64k skip=1 count=$fw_blocks 2>/dev/null | \ + mtd $append write - "$fw_part" + fi +} + +dir825b_check_image() { + local magic="$(get_magic_long "$1")" + local fw_mtd=$(find_mtd_part "firmware_orig") + + case "$magic" in + "27051956") + ;; + "43493030") + local md5_img=$(dd if="$1" bs=2 skip=9 count=16 2>/dev/null) + local md5_chk=$(dd if="$1" bs=64k skip=1 2>/dev/null | md5sum -); md5_chk="${md5_chk%% *}" + local fw_len=$(dd if="$1" bs=2 skip=1 count=4 2>/dev/null) + local fw_part_len=$(get_mtd_part_size "firmware") + + if [ -z "$fw_mtd" ]; then + ask_bool 0 "Do you have a backup of the caldata partition?" || { + echo "Warning, please make sure that you have a backup of the caldata partition." + echo "Once you have that, use 'sysupgrade -i' for upgrading to the 'fat' firmware." + return 1 + } + fi + + if [ -z "$md5_img" -o -z "$md5_chk" ]; then + echo "Unable to get image checksums. Maybe you are using a streamed image?" + return 1 + fi + + if [ "$md5_img" != "$md5_chk" ]; then + echo "Invalid image. Contents do not match checksum (image:$md5_img calculated:$md5_chk)" + return 1 + fi + + fw_len=$((0x$fw_len)) + fw_part_len=${fw_part_len:-0} + + if [ $fw_part_len -lt $fw_len ]; then + echo "The upgrade image is too big (size:$fw_len available:$fw_part_len)" + return 1 + fi + ;; + *) + echo "Unsupported image format." + return 1 + ;; + esac + + return 0 +} + +platform_do_upgrade_dir825b() { + local magic="$(get_magic_long "$1")" + local fw_mtd=$(find_mtd_part "firmware_orig") + + case "$magic" in + "27051956") + if [ -n "$fw_mtd" ]; then + # restore calibration data before downgrading to + # the normal image + dir825b_copy_caldata "caldata" "caldata_orig" || { + echo "unable to restore calibration data" + exit 1 + } + PART_NAME="firmware_orig" + else + PART_NAME="firmware" + fi + default_do_upgrade "$ARGV" + ;; + "43493030") + if [ -z "$fw_mtd" ]; then + # backup calibration data before upgrading to the + # fat image + dir825b_copy_caldata "caldata" "caldata_copy" || { + echo "unable to backup calibration data" + exit 1 + } + fi + dir825b_do_upgrade_combined "firmware" "$ARGV" + ;; + esac +} diff --git a/target/linux/ar71xx/base-files/lib/upgrade/om2p.sh b/target/linux/ar71xx/base-files/lib/upgrade/om2p.sh new file mode 100644 index 000000000..d9a8bbb7f --- /dev/null +++ b/target/linux/ar71xx/base-files/lib/upgrade/om2p.sh @@ -0,0 +1,169 @@ +# The U-Boot loader of the OM2P requires image sizes and checksums to be +# provided in the U-Boot environment. +# The OM2P comes with 2 main partitions - while one is active sysupgrade +# will flash the other. The boot order is changed to boot the newly +# flashed partition. If the new partition can't be booted due to upgrade +# failures the previously used partition is loaded. + +trim() +{ + echo $1 +} + +cfg_value_get() +{ + local cfg=$1 cfg_opt + local section=$2 our_section=0 + local param=$3 our_param= + + for cfg_opt in $cfg + do + [ "$cfg_opt" = "[$section]" ] && our_section=1 && continue + [ "$our_section" = "1" ] || continue + + our_param=$(echo ${cfg_opt%%=*}) + [ "$param" = "$our_param" ] && echo ${cfg_opt##*=} && break + done +} + +# make sure we got uboot-envtools and fw_env.config copied over to the ramfs +platform_add_ramfs_ubootenv() +{ + [ -e /usr/sbin/fw_printenv ] && install_bin /usr/sbin/fw_printenv /usr/sbin/fw_setenv + [ -e /etc/fw_env.config ] && install_file /etc/fw_env.config +} +append sysupgrade_pre_upgrade platform_add_ramfs_ubootenv + +platform_check_image_om2p() +{ + local img_magic=$1 + local img_path=$2 + local fw_printenv=/usr/sbin/fw_printenv + local img_board_target= img_num_files= i=0 + local cfg_name= kernel_name= rootfs_name= + + case "$img_magic" in + # Combined Extended Image v1 + 43453031) + img_board_target=$(trim $(dd if="$img_path" bs=4 skip=1 count=8 2>/dev/null)) + img_num_files=$(trim $(dd if="$img_path" bs=2 skip=18 count=1 2>/dev/null)) + ;; + *) + echo "Invalid image ($img_magic). Use combined extended images on this platform" + return 1 + ;; + esac + + case "$img_board_target" in + OM2P) + ;; + *) + echo "Invalid board target ($img_board_target). Use the correct image for this platform" + return 1 + ;; + esac + + [ $img_num_files -ne 3 ] && { + echo "Invalid number of embedded images ($img_num_files). Use the correct image for this platform" + return 1 + } + + cfg_name=$(trim $(dd if="$img_path" bs=2 skip=19 count=16 2>/dev/null)) + + [ "$cfg_name" != "fwupgrade.cfg" ] && { + echo "Invalid embedded config file ($cfg_name). Use the correct image for this platform" + return 1 + } + + kernel_name=$(trim $(dd if="$img_path" bs=2 skip=55 count=16 2>/dev/null)) + + [ "$kernel_name" != "kernel" ] && { + echo "Invalid embedded kernel file ($kernel_name). Use the correct image for this platform" + return 1 + } + + rootfs_name=$(trim $(dd if="$img_path" bs=2 skip=91 count=16 2>/dev/null)) + + [ "$rootfs_name" != "rootfs" ] && { + echo "Invalid embedded kernel file ($rootfs_name). Use the correct image for this platform" + return 1 + } + + [ ! -x "$fw_printenv" ] && { + echo "Please install uboot-envtools!" + return 1 + } + + [ ! -r "/etc/fw_env.config" ] && { + echo "/etc/fw_env.config is missing" + return 1 + } + + return 0 +} + +platform_do_upgrade_om2p() +{ + local img_path=$1 + local kernel_start_addr= kernel_size= kernel_md5= + local rootfs_size= rootfs_checksize= rootfs_md5= + local kernel_bsize= total_size=7340032 + local data_offset=$((64 * 1024)) block_size=$((256 * 1024)) offset= + local uboot_env_upgrade="/tmp/fw_env_upgrade" + local cfg_size= kernel_size= rootfs_size= + local append="" + + [ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR" + + cfg_size=$(dd if="$img_path" bs=2 skip=35 count=4 2>/dev/null) + kernel_size=$(dd if="$img_path" bs=2 skip=71 count=4 2>/dev/null) + rootfs_size=$(dd if="$img_path" bs=2 skip=107 count=4 2>/dev/null) + + cfg_content=$(dd if="$img_path" bs=1 skip=$data_offset count=$(echo $((0x$cfg_size))) 2>/dev/null) + + kernel_md5=$(cfg_value_get "$cfg_content" "vmlinux" "md5sum") + rootfs_md5=$(cfg_value_get "$cfg_content" "rootfs" "md5sum") + rootfs_checksize=$(cfg_value_get "$cfg_content" "rootfs" "checksize") + + if [ "$((0x$kernel_size % $block_size))" = "0" ] + then + kernel_bsize=$(echo $((0x$kernel_size))) + else + kernel_bsize=$((0x$kernel_size + ($block_size - (0x$kernel_size % $block_size)))) + fi + + mtd -q erase inactive + + offset=$(echo $(($data_offset + 0x$cfg_size + 0x$kernel_size))) + dd if="$img_path" bs=1 skip=$offset count=$(echo $((0x$rootfs_size))) 2>&- | mtd -n -p $kernel_bsize $append write - "inactive" + + offset=$(echo $(($data_offset + 0x$cfg_size))) + dd if="$img_path" bs=1 skip=$offset count=$(echo $((0x$kernel_size))) 2>&- | mtd -n write - "inactive" + + rm $uboot_env_upgrade 2>&- + + if [ "$(grep 'mtd3:.*inactive' /proc/mtd)" ] + then + printf "kernel_size_1 %u\n" $(($kernel_bsize / 1024)) >> $uboot_env_upgrade + printf "rootfs_size_1 %u\n" $((($total_size - $kernel_bsize) / 1024)) >> $uboot_env_upgrade + printf "bootseq 1,2\n" >> $uboot_env_upgrade + kernel_start_addr=0x9f1c0000 + else + printf "kernel_size_2 %u\n" $(($kernel_bsize / 1024)) >> $uboot_env_upgrade + printf "rootfs_size_2 %u\n" $((($total_size - $kernel_bsize) / 1024)) >> $uboot_env_upgrade + printf "bootseq 2,1\n" >> $uboot_env_upgrade + kernel_start_addr=0x9f8c0000 + fi + + printf "vmlinux_start_addr %s\n" $kernel_start_addr >> $uboot_env_upgrade + printf "vmlinux_size 0x%s\n" $kernel_size >> $uboot_env_upgrade + printf "vmlinux_checksum %s\n" $kernel_md5 >> $uboot_env_upgrade + printf "rootfs_start_addr 0x%x\n" $(($kernel_start_addr + $kernel_bsize)) >> $uboot_env_upgrade + printf "rootfs_size %s\n" $rootfs_checksize >> $uboot_env_upgrade + printf "rootfs_checksum %s\n" $rootfs_md5 >> $uboot_env_upgrade + + fw_setenv -s $uboot_env_upgrade || { + echo "failed to update U-Boot environment" + return 1 + } +} diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh new file mode 100755 index 000000000..8ec958d79 --- /dev/null +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -0,0 +1,269 @@ +# +# Copyright (C) 2011 OpenWrt.org +# + +. /lib/ar71xx.sh + +PART_NAME=firmware +RAMFS_COPY_DATA=/lib/ar71xx.sh + +CI_BLKSZ=65536 +CI_LDADR=0x80060000 + +platform_find_partitions() { + local first dev size erasesize name + while read dev size erasesize name; do + name=${name#'"'}; name=${name%'"'} + case "$name" in + vmlinux.bin.l7|vmlinux|kernel|linux|rootfs|filesystem) + if [ -z "$first" ]; then + first="$name" + else + echo "$erasesize:$first:$name" + break + fi + ;; + esac + done < /proc/mtd +} + +platform_find_kernelpart() { + local part + for part in "${1%:*}" "${1#*:}"; do + case "$part" in + vmlinux.bin.l7|vmlinux|kernel|linux) + echo "$part" + break + ;; + esac + done +} + +platform_do_upgrade_combined() { + local partitions=$(platform_find_partitions) + local kernelpart=$(platform_find_kernelpart "${partitions#*:}") + local erase_size=$((0x${partitions%%:*})); partitions="${partitions#*:}" + local kern_length=0x$(dd if="$1" bs=2 skip=1 count=4 2>/dev/null) + local kern_blocks=$(($kern_length / $CI_BLKSZ)) + local root_blocks=$((0x$(dd if="$1" bs=2 skip=5 count=4 2>/dev/null) / $CI_BLKSZ)) + + if [ -n "$partitions" ] && [ -n "$kernelpart" ] && \ + [ ${kern_blocks:-0} -gt 0 ] && \ + [ ${root_blocks:-0} -gt ${kern_blocks:-0} ] && \ + [ ${erase_size:-0} -gt 0 ]; + then + local append="" + [ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR" + + ( dd if="$1" bs=$CI_BLKSZ skip=1 count=$kern_blocks 2>/dev/null; \ + dd if="$1" bs=$CI_BLKSZ skip=$((1+$kern_blocks)) count=$root_blocks 2>/dev/null ) | \ + mtd -r $append -F$kernelpart:$kern_length:$CI_LDADR,rootfs write - $partitions + fi +} + +tplink_get_image_hwid() { + get_image "$@" | dd bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' +} + +platform_check_image() { + local board=$(ar71xx_board_name) + local magic="$(get_magic_word "$1")" + local magic_long="$(get_magic_long "$1")" + + [ "$ARGC" -gt 1 ] && return 1 + + case "$board" in + all0315n | \ + all0258n ) + platform_check_image_allnet "$1" && return 0 + return 1 + ;; + alfa-ap96 | \ + alfa-nx | \ + ap113 | \ + ap121 | \ + ap121-mini | \ + ap136 | \ + ap96 | \ + db120 | \ + hornet-ub | \ + zcn-1523h-2 | \ + zcn-1523h-5) + [ "$magic_long" != "68737173" -a "$magic_long" != "19852003" ] && { + echo "Invalid image type." + return 1 + } + return 0 + ;; + ap81 | \ + ap83 | \ + dir-600-a1 | \ + dir-615-c1 | \ + dir-615-e4 | \ + ew-dorin | \ + ew-dorin-router | \ + mzk-w04nu | \ + mzk-w300nh | \ + tew-632brp | \ + tew-712br | \ + wrt400n | \ + airrouter | \ + bullet-m | \ + nanostation-m | \ + rocket-m | \ + rw2458n | \ + wzr-hp-g300nh2 | \ + wzr-hp-g300nh | \ + wzr-hp-g450h | \ + wzr-hp-ag300h | \ + whr-g301n | \ + whr-hp-g300n | \ + whr-hp-gn | \ + wlae-ag300n | \ + nbg460n_550n_550nh | \ + unifi ) + [ "$magic" != "2705" ] && { + echo "Invalid image type." + return 1 + } + return 0 + ;; + + dir-825-b1 | \ + tew-673gru) + dir825b_check_image "$1" && return 0 + ;; + + om2p | \ + om2p-lc) + platform_check_image_om2p "$magic_long" "$1" && return 0 + return 1 + ;; + tl-mr11u | \ + tl-mr3020 | \ + tl-mr3040 | \ + tl-mr3220 | \ + tl-mr3420 | \ + tl-wa901nd | \ + tl-wa901nd-v2 | \ + tl-wdr4300 | \ + tl-wr703n | \ + tl-wr741nd | \ + tl-wr741nd-v4 | \ + tl-wr841n-v1 | \ + tl-wr841n-v7 | \ + tl-wr841n-v8 | \ + tl-wr941nd | \ + tl-wr1041n-v2 | \ + tl-wr1043nd | \ + tl-wr2543n) + [ "$magic" != "0100" ] && { + echo "Invalid image type." + return 1 + } + + local hwid + local imageid + + hwid=$(tplink_get_hwid) + imageid=$(tplink_get_image_hwid "$1") + + [ "$hwid" != "$imageid" ] && { + echo "Invalid image, hardware ID mismatch, hw:$hwid image:$imageid." + return 1 + } + + return 0 + ;; + wndr3700) + local hw_magic + + hw_magic="$(ar71xx_get_mtd_part_magic firmware)" + [ "$magic_long" != "$hw_magic" ] && { + echo "Invalid image, hardware ID mismatch, hw:$hw_magic image:$magic_long." + return 1 + } + return 0 + ;; + wrt160nl) + [ "$magic" != "4e4c" ] && { + echo "Invalid image type." + return 1 + } + return 0 + ;; + routerstation | \ + routerstation-pro | \ + ls-sr71 | \ + pb42 | \ + pb44 | \ + all0305 | \ + eap7660d | \ + ja76pf | \ + ja76pf2) + [ "$magic" != "4349" ] && { + echo "Invalid image. Use *-sysupgrade.bin files on this board" + return 1 + } + + local md5_img=$(dd if="$1" bs=2 skip=9 count=16 2>/dev/null) + local md5_chk=$(dd if="$1" bs=$CI_BLKSZ skip=1 2>/dev/null | md5sum -); md5_chk="${md5_chk%% *}" + + if [ -n "$md5_img" -a -n "$md5_chk" ] && [ "$md5_img" = "$md5_chk" ]; then + return 0 + else + echo "Invalid image. Contents do not match checksum (image:$md5_img calculated:$md5_chk)" + return 1 + fi + return 0 + ;; + esac + + echo "Sysupgrade is not yet supported on $board." + return 1 +} + +platform_do_upgrade() { + local board=$(ar71xx_board_name) + + case "$board" in + routerstation | \ + routerstation-pro | \ + ls-sr71 | \ + all0305 | \ + eap7660d | \ + pb42 | \ + pb44 | \ + ja76pf | \ + ja76pf2) + platform_do_upgrade_combined "$ARGV" + ;; + all0258n ) + platform_do_upgrade_allnet "0x9f050000" "$ARGV" + ;; + all0315n ) + platform_do_upgrade_allnet "0x9f080000" "$ARGV" + ;; + dir-825-b1 |\ + tew-673gru) + platform_do_upgrade_dir825b "$ARGV" + ;; + om2p | \ + om2p-lc) + platform_do_upgrade_om2p "$ARGV" + ;; + *) + default_do_upgrade "$ARGV" + ;; + esac +} + +disable_watchdog() { + killall watchdog + ( ps | grep -v 'grep' | grep '/dev/watchdog' ) && { + echo 'Could not disable watchdog' + return 1 + } +} + +append sysupgrade_pre_upgrade disable_watchdog diff --git a/target/linux/ar71xx/base-files/sbin/wget2nand b/target/linux/ar71xx/base-files/sbin/wget2nand new file mode 100755 index 000000000..9cd6e7c40 --- /dev/null +++ b/target/linux/ar71xx/base-files/sbin/wget2nand @@ -0,0 +1,85 @@ +#!/bin/sh +# wget2nand +# This script can be used to download a TGZ file from your build system which +# contains the files to be installed on the NAND flash on your RB1xx card. +# The one parameter is the URL of the TGZ file to be downloaded. +# Licence GPL V2 +# Author david.goodenough@linkchoose.co.uk +# Based on cf2nand from RB532 support +. /etc/functions.sh + +wget2nand_dir=/tmp/wget2nand +mnt_kernel=$wget2nand_dir/mnt_kernel +mnt_rootfs=$wget2nand_dir/mnt_rootfs +src_rootfs=$wget2nand_dir/rootfs.tgz +src_kernel=$wget2nand_dir/kernel + +[ -d "$wget2nand_dir" ] && { + echo "$wget2nand_dir already exists" + exit 1 +} + +# need to find the wget server from the command line +url=$1 +[ -z "$url" ] && { + echo "No URL specified for image TGZ" + echo "Usage : $0 URL" + exit 1 +} + +url_kernel=$url/openwrt-ar71xx-nand-vmlinux.elf +url_rootfs=$url/openwrt-ar71xx-nand-rootfs.tar.gz + +mtd_kernel="$(find_mtd_part 'kernel')" +mtd_rootfs="$(find_mtd_part 'rootfs')" +[ -z "$mtd_kernel" -o -z "$mtd_rootfs" ] && { + echo "Cannot find NAND Flash partitions" + exit 1 +} + +mkdir "$wget2nand_dir" +wget $url_kernel -O "$src_kernel" || { + echo "Unable to download $url_kernel" + exit 1 +} + +wget $url_rootfs -O "$src_rootfs" || { + echo "Unable to download $url_rootfs" + exit 1 +} + +echo "Erasing filesystem..." +mtd erase kernel 2>/dev/null >/dev/null +mtd erase rootfs 2>/dev/null >/dev/null + +echo "Mounting $mtd_rootfs as new root and $mtd_kernel as kernel partition" + +mkdir "$mnt_kernel" +mkdir "$mnt_rootfs" +mount -t yaffs2 "$mtd_kernel" "$mnt_kernel" +mount -t yaffs2 "$mtd_rootfs" "$mnt_rootfs" + +echo "Copying kernel..." +cp $src_kernel $mnt_kernel/kernel || { + echo "Error occured while copying the kernel" + exit 1 +} +chmod +x $mnt_kernel/kernel + +echo "Preparing filesystem..." +( cd "$mnt_rootfs"; tar xvz -f "$src_rootfs" ) + +# make sure everything is written before we unmount the partitions +echo "chmod ugo+x /" > $mnt_rootfs/etc/uci-defaults/set_root_permission +sync +ls $mnt_kernel >/dev/null +ls $mnt_rootfs >/dev/null + +echo "Cleaning up..." +# unmount the partitions and remove the directories into which they were mounted +umount $mnt_kernel +umount $mnt_rootfs +rm -rf $wget2nand_dir + +# all done +echo "Image written, you can now reboot. Remember to change the boot source to Boot from Nand" |