mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-29 17:42:41 +00:00
Device specifications: ====================== SoC: Qualcomm IPQ6018 RAM: 1 x 1G DDR4 RAM Flash: NAND 128MB Radio: 2T2R@2.4GHz, 2T2R@5GHz Ethernet: 1 x 1GbE PHY Reset Button: 1 Power Source: AC, Standard PoE 802.3af/at LED Indicator: 4 x Single-color LED indicator (GPIO Control) Signed-off-by: Jesse Wu <Jesse.Wu@emplustech.com>
195 lines
4.7 KiB
Bash
Executable File
195 lines
4.7 KiB
Bash
Executable File
. /lib/functions/system.sh
|
|
|
|
RAMFS_COPY_BIN='fw_printenv fw_setenv'
|
|
RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock'
|
|
|
|
qca_do_upgrade() {
|
|
local tar_file="$1"
|
|
|
|
local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
|
|
board_dir=${board_dir%/}
|
|
local dev=$(find_mtd_chardev "0:HLOS")
|
|
|
|
tar Oxf $tar_file ${board_dir}/kernel | mtd write - ${dev}
|
|
|
|
if [ -n "$UPGRADE_BACKUP" ]; then
|
|
tar Oxf $tar_file ${board_dir}/root | mtd -j "$UPGRADE_BACKUP" write - rootfs
|
|
else
|
|
tar Oxf $tar_file ${board_dir}/root | mtd write - rootfs
|
|
fi
|
|
}
|
|
|
|
find_mmc_part() {
|
|
local DEVNAME PARTNAME
|
|
|
|
if grep -q "$1" /proc/mtd; then
|
|
echo "" && return 0
|
|
fi
|
|
|
|
for DEVNAME in /sys/block/mmcblk*/mmcblk*p*; do
|
|
PARTNAME=$(grep PARTNAME ${DEVNAME}/uevent | cut -f2 -d'=')
|
|
[ "$PARTNAME" = "$1" ] && echo "/dev/$(basename $DEVNAME)" && return 0
|
|
done
|
|
}
|
|
|
|
do_flash_emmc() {
|
|
local tar_file=$1
|
|
local emmcblock=$(find_mmc_part $2)
|
|
local board_dir=$3
|
|
local part=$4
|
|
|
|
[ -z "$emmcblock" ] && {
|
|
echo failed to find $2
|
|
return
|
|
}
|
|
|
|
echo erase $4
|
|
dd if=/dev/zero of=${emmcblock}
|
|
echo flash $4
|
|
tar Oxf $tar_file ${board_dir}/$part | dd of=${emmcblock}
|
|
}
|
|
|
|
spi_nor_emmc_do_upgrade_bootconfig() {
|
|
local tar_file="$1"
|
|
|
|
local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
|
|
board_dir=${board_dir%/}
|
|
[ -f /proc/boot_info/getbinary_bootconfig ] || {
|
|
echo "bootconfig does not exist"
|
|
exit
|
|
}
|
|
CI_ROOTPART="$(cat /proc/boot_info/rootfs/upgradepartition)"
|
|
CI_KERNPART="$(cat /proc/boot_info/0:HLOS/upgradepartition)"
|
|
|
|
[ -n "$CI_KERNPART" -a -n "$CI_ROOTPART" ] || {
|
|
echo "kernel or rootfs partition is unknown"
|
|
exit
|
|
}
|
|
|
|
local primary="0"
|
|
[ "$(cat /proc/boot_info/rootfs/primaryboot)" = "0" ] && primary="1"
|
|
echo "$primary" > /proc/boot_info/rootfs/primaryboot 2>/dev/null
|
|
echo "$primary" > /proc/boot_info/0:HLOS/primaryboot 2>/dev/null
|
|
cp /proc/boot_info/getbinary_bootconfig /tmp/bootconfig
|
|
|
|
do_flash_emmc $tar_file $CI_KERNPART $board_dir kernel
|
|
do_flash_emmc $tar_file $CI_ROOTPART $board_dir root
|
|
|
|
local emmcblock="$(find_mmc_part "rootfs_data")"
|
|
if [ -e "$emmcblock" ]; then
|
|
mkfs.ext4 -F "$emmcblock"
|
|
fi
|
|
|
|
for part in "0:BOOTCONFIG" "0:BOOTCONFIG1"; do
|
|
local mtdchar=$(echo $(find_mtd_chardev $part) | sed 's/^.\{5\}//')
|
|
if [ -n "$mtdchar" ]; then
|
|
echo start to update $mtdchar
|
|
mtd -qq write /proc/boot_info/getbinary_bootconfig "/dev/${mtdchar}" 2>/dev/null && echo update mtd $mtdchar
|
|
else
|
|
emmcblock=$(find_mmc_part $part)
|
|
echo erase ${emmcblock}
|
|
dd if=/dev/zero of=${emmcblock} 2> /dev/null
|
|
echo update $emmcblock
|
|
dd if=/tmp/bootconfig of=${emmcblock} 2> /dev/null
|
|
fi
|
|
done
|
|
}
|
|
|
|
emmc_do_upgrade() {
|
|
local tar_file="$1"
|
|
|
|
local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
|
|
board_dir=${board_dir%/}
|
|
do_flash_emmc $tar_file '0:HLOS' $board_dir kernel
|
|
do_flash_emmc $tar_file 'rootfs' $board_dir root
|
|
|
|
local emmcblock="$(find_mmc_part "rootfs_data")"
|
|
if [ -e "$emmcblock" ]; then
|
|
mkfs.ext4 "$emmcblock"
|
|
fi
|
|
}
|
|
|
|
platform_check_image() {
|
|
local magic_long="$(get_magic_long "$1")"
|
|
board=$(board_name)
|
|
case $board in
|
|
cig,wf660a|\
|
|
cig,wf188n|\
|
|
cig,wf194c4|\
|
|
cig,wf196|\
|
|
glinet,ax1800|\
|
|
glinet,axt1800|\
|
|
wallys,dr6018|\
|
|
wallys,dr6018-v4|\
|
|
edgecore,eap101|\
|
|
emplus,wap386v2|\
|
|
hfcl,ion4xi|\
|
|
hfcl,ion4x|\
|
|
hfcl,ion4x_2|\
|
|
hfcl,ion4x_3|\
|
|
hfcl,ion4xe|\
|
|
yuncore,ax840|\
|
|
yuncore,fap650)
|
|
[ "$magic_long" = "73797375" ] && return 0
|
|
;;
|
|
esac
|
|
return 1
|
|
}
|
|
|
|
platform_do_upgrade() {
|
|
CI_UBIPART="rootfs"
|
|
CI_ROOTPART="ubi_rootfs"
|
|
CI_IPQ807X=1
|
|
|
|
board=$(board_name)
|
|
case $board in
|
|
cig,wf660a)
|
|
spi_nor_emmc_do_upgrade_bootconfig $1
|
|
;;
|
|
cig,wf188n|\
|
|
emplus,wap386v2)
|
|
[ -f /proc/boot_info/rootfs/upgradepartition ] && {
|
|
CI_UBIPART="$(cat /proc/boot_info/rootfs/upgradepartition)"
|
|
CI_BOOTCFG=1
|
|
}
|
|
nand_upgrade_tar "$1"
|
|
;;
|
|
glinet,ax1800|\
|
|
glinet,axt1800|\
|
|
wallys,dr6018|\
|
|
wallys,dr6018-v4|\
|
|
yuncore,ax840|\
|
|
yuncore,fap650)
|
|
nand_upgrade_tar "$1"
|
|
;;
|
|
hfcl,ion4xi|\
|
|
hfcl,ion4x|\
|
|
hfcl,ion4x_2|\
|
|
hfcl,ion4x_3|\
|
|
hfcl,ion4xe)
|
|
if grep -q rootfs_1 /proc/cmdline; then
|
|
CI_UBIPART="rootfs"
|
|
fw_setenv primary 0 || exit 1
|
|
else
|
|
CI_UBIPART="rootfs_1"
|
|
fw_setenv primary 1 || exit 1
|
|
fi
|
|
nand_upgrade_tar "$1"
|
|
;;
|
|
edgecore,eap101)
|
|
if [ "$(find_mtd_chardev rootfs)" ]; then
|
|
CI_UBIPART="rootfs"
|
|
else
|
|
if grep -q rootfs1 /proc/cmdline; then
|
|
CI_UBIPART="rootfs2"
|
|
CI_FWSETENV="active 2"
|
|
else
|
|
CI_UBIPART="rootfs1"
|
|
CI_FWSETENV="active 1"
|
|
fi
|
|
fi
|
|
nand_upgrade_tar "$1"
|
|
;;
|
|
esac
|
|
}
|