mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 09:12:39 +00:00
c904875562
Hardware: ========= SOC: Qualcomm IPQ4019 WiFi 1: QCA4019 IEEE 802.11b/g/n WiFi 2: QCA4019 IEEE 802.11a/n/ac WiFi 3: QCA9886 IEEE 802.11a/n/ac Bluetooth: Qualcomm CSR8510 (A10) Zigbee: Silicon Labs EM3581 NCP + Skyworks SE2432L Ethernet: Qualcomm Atheros QCA8072 (2-port) Flash: Samsung KLM4G1FEPD (4GB eMMC) RAM (NAND): 512MB LED Controller: NXP PCA9633 (I2C) Buttons: Single reset button (GPIO). Ethernet: ========= The device has 2 ethernet ports, configured as follows by default: - left port: WAN - right port: LAN Wifi: ===== The Wifi radios are turned off by default. To configure the router, you will need to connect your computer to the LAN port of the device. Bluetooth and Zigbee: ===================== Configuration included but not tested. Storage: ======== For compatibility with stock firmware, all of OpenWrt runs in a 136 MiB eMMC partition (of which there are two copies, see below). You can also use partition /dev/mmcblk0p19 "syscfg" (3.4 GiB) any way you see fit. During very limited tests, stock firmware did not mount this partition. However, backing up its stock content before use is recommended anyway. Firmware: ========= The device uses a dual firmware mechanism: it automatically reverts to the previous firmware after 3 failed boot attempts. You can switch to the inactive firmware copy by changing the "boot_part" U-Boot environment variable. You can also do it by turning on the device for a couple of seconds and then back off, 3 times in a row. Installation: ============= OpenWrt's "factory" image can be installed via the stock web UI: 1. Login to the UI. (The default password is printed on the label.) 2. Enter support mode by clicking on the "CA" link at the bottom. 3. Click "Connectivity", "Choose file", "Start", and ignore warnings. This port is based on work done by flipy (https://github.com/flipy). Signed-off-by: Rodrigo Balerdi <lanchon@gmail.com> Link: https://github.com/openwrt/openwrt/pull/15345 Signed-off-by: Robert Marko <robimarko@gmail.com>
194 lines
4.1 KiB
Bash
194 lines
4.1 KiB
Bash
linksys_get_target_firmware() {
|
|
local cur_boot_part mtd_ubi0
|
|
|
|
cur_boot_part="$(/usr/sbin/fw_printenv -n boot_part)"
|
|
if [ -z "${cur_boot_part}" ]; then
|
|
mtd_ubi0=$(cat /sys/class/ubi/ubi0/mtd_num)
|
|
case "$(grep -E "^mtd${mtd_ubi0}:" /proc/mtd | cut -d '"' -f 2)" in
|
|
kernel|rootfs)
|
|
cur_boot_part=1
|
|
;;
|
|
alt_kernel|alt_rootfs)
|
|
cur_boot_part=2
|
|
;;
|
|
esac
|
|
>&2 printf "Current boot_part='%s' selected from ubi0/mtd_num='%s'" \
|
|
"${cur_boot_part}" "${mtd_ubi0}"
|
|
fi
|
|
|
|
# OEM U-Boot for EA6350v3, EA8300 and MR8300; bootcmd=
|
|
# if test $auto_recovery = no;
|
|
# then bootipq;
|
|
# elif test $boot_part = 1;
|
|
# then run bootpart1;
|
|
# else run bootpart2;
|
|
# fi
|
|
|
|
case "$cur_boot_part" in
|
|
1)
|
|
fw_setenv -s - <<-EOF
|
|
boot_part 2
|
|
auto_recovery yes
|
|
EOF
|
|
printf "alt_kernel"
|
|
return
|
|
;;
|
|
2)
|
|
fw_setenv -s - <<-EOF
|
|
boot_part 1
|
|
auto_recovery yes
|
|
EOF
|
|
printf "kernel"
|
|
return
|
|
;;
|
|
*)
|
|
return
|
|
;;
|
|
esac
|
|
}
|
|
|
|
linksys_is_factory_image() {
|
|
local board=$(board_name)
|
|
board=${board##*,}
|
|
|
|
# check matching footer signature
|
|
tail -c 256 $1 | grep -q -i "\.LINKSYS\.........${board}"
|
|
}
|
|
|
|
platform_do_upgrade_linksys() {
|
|
local magic_long="$(get_magic_long "$1")"
|
|
|
|
local rm_oem_fw_vols="squashfs ubifs" # from OEM [alt_]rootfs UBI
|
|
local vol
|
|
|
|
mkdir -p /var/lock
|
|
local part_label="$(linksys_get_target_firmware)"
|
|
touch /var/lock/fw_printenv.lock
|
|
|
|
if [ -z "$part_label" ]; then
|
|
echo "cannot find target partition"
|
|
exit 1
|
|
fi
|
|
|
|
local target_mtd=$(find_mtd_part "$part_label")
|
|
|
|
[ "$magic_long" = "73797375" ] && {
|
|
CI_KERNPART="$part_label"
|
|
if [ "$part_label" = "kernel" ]; then
|
|
CI_UBIPART="rootfs"
|
|
else
|
|
CI_UBIPART="alt_rootfs"
|
|
fi
|
|
|
|
local mtdnum="$(find_mtd_index "$CI_UBIPART")"
|
|
if [ ! "$mtdnum" ]; then
|
|
echo "cannot find ubi mtd partition $CI_UBIPART"
|
|
return 1
|
|
fi
|
|
|
|
local ubidev="$(nand_find_ubi "$CI_UBIPART")"
|
|
if [ ! "$ubidev" ]; then
|
|
ubiattach -m "$mtdnum"
|
|
sync
|
|
ubidev="$(nand_find_ubi "$CI_UBIPART")"
|
|
fi
|
|
|
|
if [ "$ubidev" ]; then
|
|
for vol in $rm_oem_fw_vols; do
|
|
ubirmvol "/dev/$ubidev" -N "$vol" 2>/dev/null
|
|
done
|
|
fi
|
|
|
|
# complete std upgrade
|
|
if nand_upgrade_tar "$1" ; then
|
|
nand_do_upgrade_success
|
|
else
|
|
nand_do_upgrade_failed
|
|
fi
|
|
|
|
}
|
|
|
|
[ "$magic_long" = "27051956" ] && {
|
|
echo "writing \"$1\" image to \"$part_label\""
|
|
get_image "$1" | mtd write - "$part_label"
|
|
}
|
|
|
|
[ "$magic_long" = "d00dfeed" ] && {
|
|
if ! linksys_is_factory_image "$1"; then
|
|
echo "factory image doesn't match device"
|
|
return 1
|
|
fi
|
|
|
|
echo "writing \"$1\" factory image to \"$part_label\""
|
|
get_image "$1" | mtd -e "$part_label" write - "$part_label"
|
|
}
|
|
}
|
|
|
|
linksys_get_cmdline_rootfs_device() {
|
|
if read cmdline < /proc/cmdline; then
|
|
case "$cmdline" in
|
|
*root=*)
|
|
local str="${cmdline##*root=}"
|
|
echo "${str%% *}"
|
|
return
|
|
;;
|
|
esac
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
linksys_get_current_boot_part_emmc() {
|
|
local boot_part="$(fw_printenv -n boot_part)"
|
|
if [ "$boot_part" = 1 ] || [ "$boot_part" = 2 ]; then
|
|
v "Current boot_part=$boot_part selected from bootloader environment"
|
|
else
|
|
local rootfs_device="$(linksys_get_cmdline_rootfs_device)"
|
|
if [ "$rootfs_device" = "$(find_mmc_part "rootfs")" ]; then
|
|
boot_part=1
|
|
elif [ "$rootfs_device" = "$(find_mmc_part "alt_rootfs")" ]; then
|
|
boot_part=2
|
|
else
|
|
v "Could not determine current boot_part"
|
|
return 1
|
|
fi
|
|
v "Current boot_part=$boot_part selected from cmdline rootfs=$rootfs_device"
|
|
fi
|
|
echo $boot_part
|
|
}
|
|
|
|
linksys_set_target_partitions_emmc() {
|
|
local current_boot_part="$1"
|
|
|
|
if [ "$current_boot_part" = 1 ]; then
|
|
CI_KERNPART="alt_kernel"
|
|
CI_ROOTPART="alt_rootfs"
|
|
fw_setenv -s - <<-EOF
|
|
boot_part 2
|
|
auto_recovery yes
|
|
EOF
|
|
elif [ "$current_boot_part" = 2 ]; then
|
|
CI_KERNPART="kernel"
|
|
CI_ROOTPART="rootfs"
|
|
fw_setenv -s - <<-EOF
|
|
boot_part 1
|
|
auto_recovery yes
|
|
EOF
|
|
else
|
|
v "Could not set target eMMC partitions"
|
|
return 1
|
|
fi
|
|
|
|
v "Target eMMC partitions: $CI_KERNPART, $CI_ROOTPART"
|
|
}
|
|
|
|
platform_do_upgrade_linksys_emmc() {
|
|
local file="$1"
|
|
|
|
mkdir -p /var/lock
|
|
local current_boot_part="$(linksys_get_current_boot_part_emmc)"
|
|
linksys_set_target_partitions_emmc "$current_boot_part" || exit 1
|
|
touch /var/lock/fw_printenv.lock
|
|
|
|
emmc_do_upgrade "$file"
|
|
}
|