[build]: Sonic installer script for armhf (#3303)

Signed-off-by: Antony Rheneus <arheneus@marvell.com>
This commit is contained in:
arheneus@marvell.com 2019-09-11 22:42:10 +05:30 committed by lguohan
parent 11258e5db4
commit 23a3faf3f9
4 changed files with 160 additions and 88 deletions

View File

@ -88,15 +88,23 @@ To build SONiC installer image and docker images, run the following commands:
## Usage for ARM Architecture ## Usage for ARM Architecture
To build Arm32 bit for (ARMHF) plaform To build Arm32 bit for (ARMHF) plaform
ARM build has dependency in docker version 18,
if docker version is 19, downgrade to 18 as below
sudo apt-get install --allow-downgrades -y docker-ce=5:18.09.0~3-0~ubuntu-xenial
sudo apt-get install --allow-downgrades -y docker-ce-cli=5:18.09.0~3-0~ubuntu-xenial
# Execute make configure once to configure ASIC and ARCH # Execute make configure once to configure ASIC and ARCH
make configure PLATFORM=[ASIC_VENDOR] PLATFORM_ARCH=armhf make configure PLATFORM=[ASIC_VENDOR] PLATFORM_ARCH=armhf
**example**: make target/sonic-[ASIC_VENDER]-armhf.bin
# example:
make configure PLATFORM=marvell-armhf PLATFORM_ARCH=armhf make configure PLATFORM=marvell-armhf PLATFORM_ARCH=armhf
make target/sonic-marvell-armhf.bin
To build Arm64 bit for plaform To build Arm64 bit for plaform
@ -105,7 +113,7 @@ To build Arm64 bit for plaform
make configure PLATFORM=[ASIC_VENDOR] PLATFORM_ARCH=arm64 make configure PLATFORM=[ASIC_VENDOR] PLATFORM_ARCH=arm64
**example**: # example:
make configure PLATFORM=marvell-arm64 PLATFORM_ARCH=arm64 make configure PLATFORM=marvell-arm64 PLATFORM_ARCH=arm64

View File

@ -1,9 +1,7 @@
#!/bin/sh #!/bin/sh
# Copyright (C) 2014,2015 Curt Brune <curt@cumulusnetworks.com> # Copyright (C) Marvell Inc
# Copyright (C) 2015 david_yang <david_yang@accton.com>
# #
# SPDX-License-Identifier: GPL-2.0
set -e set -e
@ -31,99 +29,22 @@ fi
echo "Installer: platform: $platform" echo "Installer: platform: $platform"
# install_uimage will be overriden from platform.conf as it is non generic
install_uimage() { install_uimage() {
echo "Copying uImage to NOR flash:" echo "Copying uImage to NOR flash:"
flashcp -v demo-${platform}.itb $mtd_dev flashcp -v demo-${platform}.itb $mtd_dev
} }
# hw_load will be overriden from platform.conf as it is non generic
hw_load() { hw_load() {
echo "cp.b $img_start \$loadaddr $img_sz" echo "cp.b $img_start \$loadaddr $img_sz"
} }
. ./platform.conf . ./platform.conf
#install_uimage install_uimage
#hw_load_str="$(hw_load)"
echo "Copying uImage to NAND flash:"
# global mount defines
demo_dev=ubi0
mtd_dev=/dev/$(cat /proc/mtd | grep "SONIC" | grep -o "mtd[0-9]")
mtd_num=$(echo $mtd_dev | grep -o "[0-9]")
demo_mount=/tmp
onie_dev=$(blkid | grep ONIE-BOOT | head -n 1 | awk '{print $1}' | sed -e 's/:.*$//')
echo "Format mtd partition '$mtd_dev'"
ubiformat $mtd_dev
#attaches MTD devices (which describe raw flash) to UBI and creates corresponding UBI devices; ('-m 2' --> mtd2)
echo "ubiattach mtd '$mtd_num'"
ubiattach /dev/ubi_ctrl -m $mtd_num
#creates UBI volumes on UBI devices
ubimkvol /dev/$demo_dev -N $demo_dev -s 3700MiB
demo_mount=$(mktemp -d)
mkdir -p $demo_mount
echo "Mounting ubifs partition"
mount -t ubifs /dev/ubi0_0 $demo_mount
echo "Mounting $demo_dev on $demo_mount..."
echo "sonic extract image starts ..."
# Decompress the file for the file system directly to the partition
unzip -o $ONIE_INSTALLER_PAYLOAD -x "$FILESYSTEM_DOCKERFS" -d $demo_mount/
cd $demo_mount
if [ -f fs.cpio ]
then
cpio -id < fs.cpio
rm fs.cpio
elif [ -f fs.squashfs ]
then
unsquashfs -f -d $demo_mount fs.squashfs
rm -f fs.squashfs
fi
cd -
TAR_EXTRA_OPTION="--numeric-owner"
mkdir -p $demo_mount/var/lib/$DOCKERFS_DIR
unzip -op $ONIE_INSTALLER_PAYLOAD "$FILESYSTEM_DOCKERFS" | tar -xpz $TAR_EXTRA_OPTION -f - -C $demo_mount/var/lib/$DOCKERFS_DIR
echo "unmounting nand partition"
umount $demo_mount
echo "Updating U-Boot environment variables"
#global uboot enviroment settings
FW_ENV='/dev/mtd0 \t\t 0x00500000 \t 0x80000 \t 0x100000 \t 8'
kernel_addr=0x1100000
fdt_addr=0x1000000
image_name="/boot/zImage"
fdt_name="/boot/armada-385-ET6448M_4G_Nand.dtb"
#BOOTARGS='setenv bootargs root='$demo_dev' rw rootwait ubi.mtd='$mtd_num' rootfstype=ubifs debug panic=1 ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:${netdev}:off console=ttyS0,115200 ${othbootargs} ${mtdparts}'
BOOTARGS='setenv bootargs root='$demo_dev' rw rootwait ubi.mtd='$mtd_num' rootfstype=ubifs panic=1 console=ttyS0,115200 ${othbootargs} ${mtdparts}'
UBI_LOAD='run ubi_sonic_boot_mount_ubi; ubifsload $kernel_addr $image_name;ubifsload $fdt_addr $fdt_name'
UBIBOOTCMD='run ubi_sonic_boot_bootargs; run ubi_sonic_boot_load; bootz $kernel_addr - $fdt_addr'
echo -e $FW_ENV > /etc/fw_env.config
fw_setenv -f image_name $image_name > /dev/null
fw_setenv -f fdt_name $fdt_name > /dev/null
fw_setenv -f kernel_addr $kernel_addr > /dev/null
fw_setenv -f fdt_addr $fdt_addr > /dev/null
#make sure ubi number (0) and ubi volume name (ubi0) are set correctly in bootargs_root:
#For example, the below command creates an 3000MiB volume on UBI device 0:
#setenv bootargs_root root=ubi0:ubi0 rw ubi.mtd=2 rootfstype=ubifs
fw_setenv -f mtdids 'nand0=armada-nand' > /dev/null
fw_setenv -f mtdparts 'mtdparts=armada-nand:10m(U-Boot)ro,208m@10m(ONIE),-(SONIC)' > /dev/null
fw_setenv -f ubi_sonic_boot_mount_ubi 'ubi part SONIC; ubifsmount ubi0' > /dev/null
fw_setenv -f ubi_sonic_boot_bootargs $BOOTARGS > /dev/null
fw_setenv -f ubi_sonic_boot_load $UBI_LOAD > /dev/null
fw_setenv -f ubi_sonic_boot $UBIBOOTCMD > /dev/null
fw_setenv -f bootcmd 'usb start; run ubi_sonic_boot' > /dev/null
hw_load_str="$(hw_load)"
cd / cd /

View File

@ -1,7 +1,7 @@
# sonic marvell one image installer # sonic marvell one image installer
SONIC_ONE_IMAGE = sonic-marvell.bin SONIC_ONE_IMAGE = sonic-marvell-armhf.bin
$(SONIC_ONE_IMAGE)_MACHINE = marvell $(SONIC_ONE_IMAGE)_MACHINE = marvell-armhf
$(SONIC_ONE_IMAGE)_IMAGE_TYPE = onie $(SONIC_ONE_IMAGE)_IMAGE_TYPE = onie
$(SONIC_ONE_IMAGE)_INSTALLS += $(SYSTEMD_SONIC_GENERATOR) $(SONIC_ONE_IMAGE)_INSTALLS += $(SYSTEMD_SONIC_GENERATOR)
ifeq ($(INSTALL_DEBUG_TOOLS),y) ifeq ($(INSTALL_DEBUG_TOOLS),y)

View File

@ -0,0 +1,143 @@
# Copyright (C) Marvell Inc
# over ride default behaviour
echo "Preparing for installation ... "
# global defines
kernel_addr=0x1100000
fdt_addr=0x1000000
image_name="/boot/zImage"
fdt_name="/boot/armada-385-ET6448M_4G_Nand.dtb"
# global mount defines
demo_dev=ubi0
mtd_dev=/dev/$(cat /proc/mtd | grep "SONIC" | grep -o "mtd[0-9]")
mtd_num=$(echo $mtd_dev | grep -o "[0-9]")
demo_mount=/tmp
FW_ENV='/dev/mtd0 \t\t 0x00500000 \t 0x80000 \t 0x100000 \t 8'
BOOTARGS='setenv bootargs root='$demo_dev' rw rootwait ubi.mtd='$mtd_num' rootfstype=ubifs panic=1 console=ttyS0,115200 ${othbootargs} ${mtdparts}'
UBI_LOAD='run ubi_sonic_boot_mount_ubi; ubifsload $kernel_addr $image_name;ubifsload $fdt_addr $fdt_name'
UBIBOOTCMD='run ubi_sonic_boot_bootargs; run ubi_sonic_boot_load; bootz $kernel_addr - $fdt_addr'
et6448m_machine_conf() {
SYSCTL_CFG=$demo_mount/usr/share/sonic/device/armhf-marvell_et6448m_52x-r0/syncd.conf
echo "Configure platform et6448m "
rm $demo_mount/lib/udev/rules.d/73-usb-net-by-mac.rules
rm -f $demo_mount/usr/bin/reboot || true
rm -fr $demo_mount/host/machine.conf
cp /etc/machine.conf $demo_mount/host/
SONIC_VERSION=$(cat $demo_mount/etc/sonic/sonic_version.yml | grep build_version | cut -f2 -d"'")
FIRST_BOOT_FILE="$demo_mount/host/image-$SONIC_VERSION/platform"
mkdir -p $FIRST_BOOT_FILE
touch $FIRST_BOOT_FILE/firsttime
MAC_ADDR=$(fw_printenv | grep ^ethaddr= | cut -f2 -d"=")
sed -i "s/switchMacAddress=.*/switchMacAddress=$MAC_ADDR/g" $demo_mount/usr/share/sonic/device/armhf-marvell_et6448m_52x-r0/et6448m/profile.ini
# IPv4 and IPv6 arp cache limits
echo "sysctl -w net.ipv4.neigh.default.gc_thresh1=16000" >> $SYSCTL_CFG
echo "sysctl -w net.ipv4.neigh.default.gc_thresh2=32000" >> $SYSCTL_CFG
echo "sysctl -w net.ipv4.neigh.default.gc_thresh3=48000" >> $SYSCTL_CFG
echo "sysctl -w net.ipv6.neigh.default.gc_thresh1=8000 " >> $SYSCTL_CFG
echo "sysctl -w net.ipv6.neigh.default.gc_thresh2=16000" >> $SYSCTL_CFG
echo "sysctl -w net.ipv6.neigh.default.gc_thresh3=32000" >> $SYSCTL_CFG
}
prepare_uboot() {
echo "Setting up U-Boot environment..."
echo -e $FW_ENV > /etc/fw_env.config
fw_setenv -f image_name $image_name > /dev/null
fw_setenv -f fdt_name $fdt_name > /dev/null
fw_setenv -f kernel_addr $kernel_addr > /dev/null
fw_setenv -f fdt_addr $fdt_addr > /dev/null
#make sure ubi number (0) and ubi volume name (ubi0) are set correctly in bootargs_root:
#For example, the below command creates an 3000MiB volume on UBI device 0:
#setenv bootargs_root root=ubi0:ubi0 rw ubi.mtd=2 rootfstype=ubifs
fw_setenv -f mtdids 'nand0=armada-nand' > /dev/null
fw_setenv -f mtdparts 'mtdparts=armada-nand:10m(U-Boot)ro,20m@10m(ONIE),-(SONIC)' > /dev/null
fw_setenv -f ubi_sonic_boot_mount_ubi 'ubi part SONIC; ubifsmount ubi0' > /dev/null
fw_setenv -f ubi_sonic_boot_bootargs $BOOTARGS > /dev/null
fw_setenv -f ubi_sonic_boot_load $UBI_LOAD > /dev/null
fw_setenv -f ubi_sonic_boot $UBIBOOTCMD > /dev/null
fw_setenv -f bootcmd 'usb start; run ubi_sonic_boot' > /dev/null
}
install_uimage() {
ubidetach /dev/ubi_ctrl -m $mtd_num 2>/dev/null || true
echo -en "Format mtd partition '$mtd_dev' "
ubiformat $mtd_dev -y -q || {
echo "Failed"
}
#attaches MTD devices (which describe raw flash) to UBI and creates corresponding UBI devices; ('-m 2' --> mtd2)
echo -en "ubiattach mtd '$mtd_num' "
ubiattach /dev/ubi_ctrl -m $mtd_num || {
echo "Failed"
}
#creates UBI volumes on UBI devices
ubimkvol /dev/$demo_dev -N $demo_dev -s 3900MiB
demo_mount=$(mktemp -d) || {
echo "Error: Unable to create file sstem mount point"
exit 1
}
echo "Mounting $demo_dev on $demo_mount "
mount -t ubifs /dev/ubi0_0 $demo_mount || {
echo "Failed"
}
echo "Extracting NOS "
# Decompress the file for the file system directly to the partition
unzip -o $ONIE_INSTALLER_PAYLOAD -x "$FILESYSTEM_DOCKERFS" -d $demo_mount/
cd $demo_mount
if [ -f fs.cpio ]; then
cpio -id < fs.cpio
if [ $? -ne 0 ]; then
echo "cpio extraction Failed"
fi
rm fs.cpio
elif [ -f fs.squashfs ]; then
unsquashfs -f -d $demo_mount $FILESYSTEM_SQUASHFS
if [ $? -ne 0 ]; then
echo "unsquashfs extraction Failed"
fi
rm -f $FILESYSTEM_SQUASHFS
fi
cd -
TAR_EXTRA_OPTION="--numeric-owner"
mkdir -p $demo_mount/var/lib/$DOCKERFS_DIR
unzip -op $ONIE_INSTALLER_PAYLOAD "$FILESYSTEM_DOCKERFS" | tar -xpz $TAR_EXTRA_OPTION -f - -C $demo_mount/var/lib/$DOCKERFS_DIR
# Update uboot Environment
prepare_uboot
# Platform configuration
et6448m_machine_conf
# Unmounting mount path
umount $demo_mount
echo "Reboot board to boot from installed OS"
}
hw_load() {
echo "mtdpart default && ubi part SONIC && ubifsmount 'demo_dev' && ubifsload '$kernel_addr' 'image_name'"
}