[initramfs] Updated required tools for initramfs (#3734)

* [initramfs] Updated reuired tools for initramfs

Signed-off-by: Antony Rheneus <arheneus@marvell.com>

* [initramfs] Updated required tools for initramfs

Signed-off-by: Antony Rheneus <arheneus@marvell.com>

* [Platform] [Marvell] Platform specific debian package for et6448m device

Signed-off-by: Antony Rheneus <arheneus@marvell.com>

* Removed auto-generated files

Signed-off-by: Antony Rheneus <arheneus@marvell.com>

* [initramfs] Added mtd and uboot firmware tools package required for arm arch
Its been enabled to all arch including amd64

Signed-off-by: Antony Rheneus <arheneus@marvell.com>

* [initramfs] Added mtd and uboot firmware tools package required for arm arch
Its been enabled to all arch including amd64

Signed-off-by: Antony Rheneus <arheneus@marvell.com>

* [initramfs] Marvell arm modules update and platform config update

Signed-off-by: Antony Rheneus <arheneus@marvell.com>

* [iniramfs] add initramfs uboot-utils hook script only for ARM

Signed-off-by: Antony Rheneus <arheneus@marvell.com>
This commit is contained in:
arheneus@marvell.com 2020-01-15 21:55:01 +05:30 committed by lguohan
parent 9a089c2e1c
commit 6bd17d4780
20 changed files with 530 additions and 117 deletions

View File

@ -176,6 +176,11 @@ sudo chmod +x $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-bottom/varlog
sudo cp files/initramfs-tools/union-fsck $FILESYSTEM_ROOT/etc/initramfs-tools/hooks/union-fsck
sudo chmod +x $FILESYSTEM_ROOT/etc/initramfs-tools/hooks/union-fsck
pushd $FILESYSTEM_ROOT/usr/share/initramfs-tools/scripts/init-bottom && sudo patch -p1 < $OLDPWD/files/initramfs-tools/udev.patch; popd
if [[ $CONFIGURED_ARCH == armhf || $CONFIGURED_ARCH == arm64 ]]; then
sudo cp files/initramfs-tools/uboot-utils $FILESYSTEM_ROOT/etc/initramfs-tools/hooks/uboot-utils
sudo chmod +x $FILESYSTEM_ROOT/etc/initramfs-tools/hooks/uboot-utils
cat files/initramfs-tools/modules.arm | sudo tee -a $FILESYSTEM_ROOT/etc/initramfs-tools/modules > /dev/null
fi
if [[ $CONFIGURED_ARCH == amd64 ]]; then
## Install latest intel ixgbe driver
@ -494,8 +499,22 @@ fi
## Remove gcc and python dev pkgs
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y remove gcc libpython2.7-dev
## Add mtd and uboot firmware tools package
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install u-boot-tools mtd-utils
sudo LANG=C chroot $FILESYSTEM_ROOT apt-mark manual u-boot-tools mtd-utils
## Update initramfs
sudo chroot $FILESYSTEM_ROOT update-initramfs -u
## Convert initrd image to u-boot format
if [[ $CONFIGURED_ARCH == armhf || $CONFIGURED_ARCH == arm64 ]]; then
INITRD_FILE=initrd.img-${LINUX_KERNEL_VERSION}-${CONFIGURED_ARCH}
if [[ $CONFIGURED_ARCH == armhf ]]; then
INITRD_FILE=initrd.img-${LINUX_KERNEL_VERSION}-armmp
fi
sudo LANG=C chroot $FILESYSTEM_ROOT mkimage -A arm -O linux -T ramdisk -C gzip -d /boot/$INITRD_FILE /boot/u${INITRD_FILE}
## Overwriting the initrd image with uInitrd
sudo LANG=C chroot $FILESYSTEM_ROOT mv /boot/u${INITRD_FILE} /boot/$INITRD_FILE
fi
## Clean up apt
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y autoremove

View File

@ -1,10 +1,9 @@
INTERVAL=10
DEVPATH=hwmon0=devices/platform/soc/soc:internal-regs/f1011000.i2c/i2c-0/0-002e hwmon1=devices/platform/soc/soc:internal-regs/f1011000.i2c/i2c-0/0-004a hwmon2=devices/platform/soc/soc:internal-regs/f1011000.i2c/i2c-0/0-004b
DEVNAME=hwmon0=adt7473 hwmon1=lm75a hwmon2=lm75a
FCTEMPS=hwmon0/device/pwm2=hwmon2/temp1_input hwmon0/device/pwm1=hwmon1/temp1_input
FCFANS=hwmon0/device/pwm2=hwmon0/device/fan2_input hwmon0/device/pwm1=hwmon0/device/fan1_input
MINTEMP=hwmon0/device/pwm2=20 hwmon0/device/pwm1=20
MAXTEMP=hwmon0/device/pwm2=60 hwmon0/device/pwm1=60
MINSTART=hwmon0/device/pwm2=150 hwmon0/device/pwm1=150
MINSTOP=hwmon0/device/pwm2=0 hwmon0/device/pwm1=0
DEVPATH=hwmon1=devices/platform/soc/soc:internal-regs/f1011000.i2c/i2c-0/0-002e
DEVNAME=hwmon1=adt7473
FCTEMPS=hwmon1/device/pwm1=hwmon1/device/temp1_input hwmon1/device/pwm2=hwmon1/device/temp2_input
FCFANS=hwmon1/device/pwm1= hwmon1/device/pwm2=hwmon1/device/fan1_input
MINTEMP=hwmon1/device/pwm1=20 hwmon1/device/pwm2=20
MAXTEMP=hwmon1/device/pwm1=60 hwmon1/device/pwm2=60
MINSTART=hwmon1/device/pwm1=150 hwmon1/device/pwm2=150
MINSTOP=hwmon1/device/pwm1=0 hwmon1/device/pwm2=0

View File

@ -0,0 +1,7 @@
crc16
deflate
zlib_deflate
m25p80
ubi
ubifs
squashfs

View File

@ -0,0 +1,21 @@
#!/bin/sh
#Part of the code is revised based on initramfs-tool is under GPL v2.
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
copy_exec /usr/sbin/ubiattach /sbin/ubiattach
copy_exec /usr/sbin/mtdinfo /sbin/mtdinfo

View File

@ -45,8 +45,19 @@ mkdir -p ${rootmnt}/host/$image_dir/work
mount -n -o lowerdir=${rootmnt},upperdir=${rootmnt}/host/$image_dir/rw,workdir=${rootmnt}/host/$image_dir/work -t overlay root-overlay ${rootmnt}
## Check if the root block device is still there
[ -b ${ROOT} ] || mdev -s
## Mount the raw partition again
mount ${ROOT} ${rootmnt}/host
case "${ROOT}" in
ubi*)
mtd=$(cat /proc/cmdline | sed -e 's/.*ubi.mtd=\([0-9]\) .*/\1/')
if [ ! -f /dev/${ROOT}_0 ]; then
ubiattach /dev/ubi_ctrl -m $mtd || true
fi
mount -t ubifs /dev/${ROOT}_0 ${rootmnt}/host
;;
*)
## Mount the raw partition again
mount ${ROOT} ${rootmnt}/host
;;
esac
mkdir -p ${rootmnt}/var/lib/docker
if [ -f ${rootmnt}/host/$image_dir/{{ FILESYSTEM_DOCKERFS }} ]; then

View File

@ -33,4 +33,12 @@ if [ -e "${rootmnt}/host/disk-img/var-log.ext4" ]; then
fi
# create varlog disk
mkdir -p ${rootmnt}/host/disk-img && ${rootmnt}/usr/bin/fallocate -l "$varlog_size"M ${rootmnt}/host/disk-img/var-log.ext4 && mkfs.ext4 -q -F ${rootmnt}/host/disk-img/var-log.ext4
case "${ROOT}" in
ubi*)
# sys_fallocate is NOT supported over UBIFS
mkdir -p ${rootmnt}/host/disk-img && ${rootmnt}/usr/bin/truncate -s "$varlog_size"M ${rootmnt}/host/disk-img/var-log.ext4 && mkfs.ext4 -q -F ${rootmnt}/host/disk-img/var-log.ext4
;;
*)
mkdir -p ${rootmnt}/host/disk-img && ${rootmnt}/usr/bin/fallocate -l "$varlog_size"M ${rootmnt}/host/disk-img/var-log.ext4 && mkfs.ext4 -q -F ${rootmnt}/host/disk-img/var-log.ext4
;;
esac

View File

@ -3,6 +3,17 @@
# Copyright (C) Marvell Inc
#
_trap_push() {
local next="$1"
eval "trap_push() {
local oldcmd='$(echo "$next" | sed -e s/\'/\'\\\\\'\'/g)'
local newcmd=\"\$1; \$oldcmd\"
trap -- \"\$newcmd\" EXIT INT TERM HUP
_trap_push \"\$newcmd\"
}"
}
_trap_push true
set -e
if [ -d "/etc/sonic" ]; then
@ -26,27 +37,124 @@ if [ -r ./onie-image-armhf.conf ]; then
. ./onie-image-armhf.conf
fi
echo "ONIE Installer: platform: $platform"
echo "Installer: platform: $platform"
# Make sure run as root or under 'sudo'
if [ $(id -u) -ne 0 ]
then echo "Please run as root"
exit 1
fi
# install_uimage will be overriden from platform.conf as it is non generic
install_uimage() {
echo "Copying uImage to NOR flash:"
flashcp -v demo-${platform}.itb $mtd_dev
}
if [ -r /etc/machine.conf ]; then
. /etc/machine.conf
elif [ -r /host/machine.conf ]; then
. /host/machine.conf
elif [ "$install_env" != "build" ]; then
echo "cannot find machine.conf"
exit 1
fi
echo "onie_platform: $onie_platform"
# Get platform specific linux kernel command line arguments
ONIE_PLATFORM_EXTRA_CMDLINE_LINUX=""
# Default var/log device size in MB
VAR_LOG_SIZE=4096
[ -r platforms/$onie_platform ] && . platforms/$onie_platform
# If running in ONIE
if [ "$install_env" = "onie" ]; then
# The onie bin tool prefix
onie_bin=
# The persistent ONIE directory location
onie_root_dir=/mnt/onie-boot/onie
# The onie file system root
onie_initrd_tmp=/
fi
# The build system prepares this script by replacing %%DEMO-TYPE%%
# with "OS" or "DIAG".
demo_type="%%DEMO_TYPE%%"
# The build system prepares this script by replacing %%IMAGE_VERSION%%
# with git revision hash as a version identifier
image_version="%%IMAGE_VERSION%%"
timestamp="$(date -u +%Y%m%d)"
demo_volume_label="SONiC-${demo_type}"
demo_volume_revision_label="SONiC-${demo_type}-${image_version}"
# hw_load will be overriden from platform.conf as it is non generic
hw_load() {
echo "cp.b $img_start \$loadaddr $img_sz"
}
. ./platform.conf
install_uimage
image_dir="image-$image_version"
hw_load_str="$(hw_load)"
if [ "$install_env" = "onie" ]; then
# Create/format the flash
create_partition
mount_partition
elif [ "$install_env" = "sonic" ]; then
demo_mnt="/host"
eval running_sonic_revision=$(cat /etc/sonic/sonic_version.yml | grep build_version | cut -f2 -d" ")
# Prevent installing existing SONiC if it is running
if [ "$image_dir" = "image-$running_sonic_revision" ]; then
echo "Not installing SONiC version $running_sonic_revision, as current running SONiC has the same version"
exit 0
fi
# Remove extra SONiC images if any
for f in $demo_mnt/image-* ; do
if [ -d $f ] && [ "$f" != "$demo_mnt/image-$running_sonic_revision" ] && [ "$f" != "$demo_mnt/$image_dir" ]; then
echo "Removing old SONiC installation $f"
rm -rf $f
fi
done
fi
cd /
# Create target directory or clean it up if exists
if [ -d $demo_mnt/$image_dir ]; then
echo "Directory $demo_mnt/$image_dir/ already exists. Cleaning up..."
rm -rf $demo_mnt/$image_dir/*
else
mkdir $demo_mnt/$image_dir || {
echo "Error: Unable to create SONiC directory"
exit 1
}
fi
# Decompress the file for the file system directly to the partition
if [ x"$docker_inram" = x"on" ]; then
# when disk is small, keep dockerfs.tar.gz in disk, expand it into ramfs during initrd
unzip -o $ONIE_INSTALLER_PAYLOAD -d $demo_mnt/$image_dir
else
unzip -o $ONIE_INSTALLER_PAYLOAD -x "$FILESYSTEM_DOCKERFS" -d $demo_mnt/$image_dir
if [ "$install_env" = "onie" ]; then
TAR_EXTRA_OPTION="--numeric-owner"
else
TAR_EXTRA_OPTION="--numeric-owner --warning=no-timestamp"
fi
mkdir -p $demo_mnt/$image_dir/$DOCKERFS_DIR
unzip -op $ONIE_INSTALLER_PAYLOAD "$FILESYSTEM_DOCKERFS" | tar xz $TAR_EXTRA_OPTION -f - -C $demo_mnt/$image_dir/$DOCKERFS_DIR
fi
if [ "$install_env" = "onie" ]; then
# Store machine description in target file system
if [ -f /etc/machine-build.conf ]; then
# onie_ variable are generate at runtime.
# they are no longer hardcoded in /etc/machine.conf
# also remove single quotes around the value
set | grep ^onie | sed -e "s/='/=/" -e "s/'$//" > $demo_mnt/machine.conf
else
cp /etc/machine.conf $demo_mnt
fi
fi
# Update Bootloader Menu with installed image
bootloader_menu_config
# Set NOS mode if available. For manufacturing diag installers, you
# probably want to skip this step so that the system remains in ONIE

View File

@ -24,6 +24,9 @@ FILESYSTEM_DOCKERFS=dockerfs.tar.gz
## docker directory on the root filesystem
DOCKERFS_DIR=docker
## docker ramfs disk space
DOCKER_RAMFS_SIZE=900M
## Output file name for onie installer
OUTPUT_ONIE_IMAGE=target/sonic-$TARGET_MACHINE.bin

View File

@ -5,6 +5,7 @@ $(SONIC_ONE_IMAGE)_MACHINE = marvell-armhf
$(SONIC_ONE_IMAGE)_IMAGE_TYPE = onie
$(SONIC_ONE_IMAGE)_INSTALLS += $(SYSTEMD_SONIC_GENERATOR)
$(SONIC_ONE_IMAGE)_INSTALLS += $(LINUX_KERNEL_DTB)
$(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(ET6448M_PLATFORM)
ifeq ($(INSTALL_DEBUG_TOOLS),y)
$(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_DBG_IMAGES)
$(SONIC_ONE_IMAGE)_DOCKERS += $(filter-out $(patsubst %-$(DBG_IMAGE_MARK).gz,%.gz, $(SONIC_INSTALL_DOCKER_DBG_IMAGES)), $(SONIC_INSTALL_DOCKER_IMAGES))

View File

@ -0,0 +1,9 @@
# ET6448M Platform
ET6448M_VERSION=0.1
ET6448M_PLATFORM = sonic-platform-et6448m_$(ET6448M_VERSION)_$(CONFIGURED_ARCH).deb
$(ET6448M_PLATFORM)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-et6448m
$(ET6448M_PLATFORM)_PLATFORM = armhf-marvell_et6448m_52x-r0
SONIC_DPKG_DEBS += $(ET6448M_PLATFORM)
SONIC_STRETCH_DEBS += $(ET6448M_PLATFORM)

View File

@ -7,76 +7,133 @@ echo "Preparing for installation ... "
# global defines
kernel_addr=0x1100000
fdt_addr=0x1000000
initrd_addr=0x2000000
VAR_LOG=512
image_name="/vmlinuz"
fdt_name="/boot/armada-385-ET6448M_4G_Nand.dtb"
kernel_fname="/boot/vmlinuz-4.9.0-9-2-armmp"
initrd_fname="/boot/initrd.img-4.9.0-9-2-armmp"
fdt_fname="/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'
demo_mnt=/tmp
FW_ENV_DEFAULT='/dev/mtd0 0x00500000 0x80000 0x100000 8'
UBOOT_FW_DEFAULT=1
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'
# Skip VID Header in UBIFS
BOOTARGS='setenv bootargs root='$demo_dev' rw rootwait ubi.mtd='$mtd_num',8192 rootfstype=ubifs panic=1 console=ttyS0,115200 ${othbootargs} ${mtdparts} ${linuxargs}'
UBI_LOAD='run ubi_sonic_boot_mount_ubi; ubifsload $kernel_addr $image_name;ubifsload $fdt_addr $fdt_name; ubifsload $initrd_addr $initrd_name'
BOOTARGS_OLD='setenv bootargs root='$demo_dev' rw rootwait ubi.mtd='$mtd_num',8192 rootfstype=ubifs panic=1 console=ttyS0,115200 ${othbootargs} ${mtdparts} ${linuxargs_old}'
UBI_LOAD_OLD='run ubi_sonic_boot_mount_ubi; ubifsload $kernel_addr $image_name_old;ubifsload $fdt_addr $fdt_name_old; ubifsload $initrd_addr $initrd_name_old'
UBIBOOTCMD='run ubi_sonic_boot_bootargs; run ubi_sonic_boot_load; test -n "$boot_once" && setenv boot_once "" && saveenv; bootz $kernel_addr $initrd_addr $fdt_addr'
UBIBOOTCMD_OLD='run ubi_sonic_boot_bootargs_old; run ubi_sonic_boot_load_old; test -n "$boot_once" && setenv boot_once "" && saveenv; bootz $kernel_addr $initrd_addr $fdt_addr'
LINUX_MISC_CMD='apparmor=1 security=apparmor usbcore.autosuspend=-1'
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() {
prepare_boot_menu() {
echo "Setting up U-Boot environment..."
echo -e $FW_ENV > /etc/fw_env.config
DTB_HAS_ENV_BLK=$(grep uboot-env /proc/mtd | sed -e 's/:.*$//')
if [ -c "/dev/$DTB_HAS_ENV_BLK" ]; then
PROC_ENV_FILE=$(find /proc/device-tree/ -name env_size)
if [ -n "$PROC_ENV_FILE" ]
then
UBOOT_ENV_SIZ="0x$(hd $PROC_ENV_FILE | awk 'FNR==1 {print $2 $3 $4 $5}')"
UBOOT_ENV_ERASE_SIZ="0x$(grep uboot-env /proc/mtd | awk '{print $3}')"
if [[ -n "$UBOOT_ENV_SIZ" && -n "$UBOOT_ENV_ERASE_SIZ" ]]
then
# Env info from DTB
FW_ENV_DTB="/dev/$DTB_HAS_ENV_BLK 0x00000000 $UBOOT_ENV_SIZ $UBOOT_ENV_ERASE_SIZ"
fi
fi
fi
if [ -n "$FW_ENV_DTB" ]
then
echo $FW_ENV_DTB > /etc/fw_env.config
echo "Found uboot env offset in device tree"
UBOOT_ENV_CRC=$(fw_printenv 2>&1 | grep -c 'Warning: Bad CRC') || true
if [ "$UBOOT_ENV_CRC" -eq 0 ]
then
echo "Uboot env offset in device tree is valid"
UBOOT_FW_DEFAULT=0
fdt_fname="/boot/armada-385-ET6448M_4G_Nand_r2019.dtb"
else
echo "Uboot env offset in device tree is NOT valid"
UBOOT_FW_DEFAULT=1
fi
fi
if [ $UBOOT_FW_DEFAULT -eq 1 ]
then
echo $FW_ENV_DEFAULT > /etc/fw_env.config
echo "Using pre-configured uboot env"
fi
image_name=${image_dir}${kernel_fname}
initrd_name=${image_dir}${initrd_fname}
fdt_name=${image_dir}${fdt_fname}
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
if [ "$install_env" = "onie" ]; then
FW_ARG="-f"
image_dir_old=""
image_name_old=""
initrd_name_old=""
fdt_name_old=""
sonic_version_2="None"
else
image_dir_old=$(fw_printenv -n image_dir || true)
image_name_old=$(fw_printenv -n image_name || true)
initrd_name_old=$(fw_printenv -n initrd_name || true)
fdt_name_old=$(fw_printenv -n fdt_name || true)
sonic_version_2=$(fw_printenv -n sonic_version_1 || true)
fi
#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
# Set boot variables
fw_setenv ${FW_ARG} image_dir $image_dir > /dev/null
fw_setenv ${FW_ARG} image_name $image_name > /dev/null
fw_setenv ${FW_ARG} initrd_name $initrd_name > /dev/null
fw_setenv ${FW_ARG} fdt_name $fdt_name > /dev/null
fw_setenv ${FW_ARG} sonic_version_1 $demo_volume_revision_label > /dev/null
fw_setenv ${FW_ARG} image_dir_old $image_dir_old > /dev/null
fw_setenv ${FW_ARG} image_name_old $image_name_old > /dev/null
fw_setenv ${FW_ARG} initrd_name_old $initrd_name_old > /dev/null
fw_setenv ${FW_ARG} fdt_name_old $fdt_name_old > /dev/null
fw_setenv ${FW_ARG} sonic_version_2 $sonic_version_2 > /dev/null
BOOT1='echo " > Boot1: $sonic_version_1 - run sonic_image_1";echo;'
BOOT2='echo " > Boot2: $sonic_version_2 - run sonic_image_2";echo;'
BOOT3='echo " > Boot3: ONIE - run onie_nand_boot";echo;'
BORDER='echo "---------------------------------------------------";echo;'
fw_setenv ${FW_ARG} print_menu $BORDER $BOOT1 $BOOT2 $BOOT3 $BORDER > /dev/null
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 ${FW_ARG} linuxargs "net.ifnames=0 loopfstype=squashfs loop=$image_dir/$FILESYSTEM_SQUASHFS varlog_size=$VAR_LOG" > /dev/null
fw_setenv ${FW_ARG} linuxargs_old "net.ifnames=0 loopfstype=squashfs loop=$image_dir_old/$FILESYSTEM_SQUASHFS varlog_size=$VAR_LOG" > /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
# Set boot configs
fw_setenv ${FW_ARG} kernel_addr $kernel_addr > /dev/null
fw_setenv ${FW_ARG} fdt_addr $fdt_addr > /dev/null
fw_setenv ${FW_ARG} initrd_addr $initrd_addr > /dev/null
fw_setenv ${FW_ARG} mtdids 'nand0=armada-nand' > /dev/null
if [ $UBOOT_FW_DEFAULT -eq 1 ]
then
fw_setenv ${FW_ARG} mtdparts 'mtdparts=armada-nand:10m(U-Boot)ro,20m@10m(ONIE),-(SONIC)' > /dev/null
else
fw_setenv ${FW_ARG} mtdparts 'mtdparts=armada-nand:4m(uboot)ro,5m@5m(uboot-env),20m@10m(ONIE),-(SONIC)' > /dev/null
fi
fw_setenv ${FW_ARG} ubi_sonic_boot_mount_ubi 'ubi part SONIC; ubifsmount ubi0' > /dev/null
fw_setenv ${FW_ARG} ubi_sonic_boot_bootargs $BOOTARGS > /dev/null
fw_setenv ${FW_ARG} ubi_sonic_boot_load $UBI_LOAD > /dev/null
fw_setenv ${FW_ARG} sonic_image_1 "$UBIBOOTCMD" > /dev/null
fw_setenv ${FW_ARG} ubi_sonic_boot_bootargs_old $BOOTARGS_OLD > /dev/null
fw_setenv ${FW_ARG} ubi_sonic_boot_load_old $UBI_LOAD_OLD > /dev/null
fw_setenv ${FW_ARG} sonic_image_2 "$UBIBOOTCMD_OLD" > /dev/null
fw_setenv ${FW_ARG} boot_next 'run sonic_image_1'> /dev/null
fw_setenv ${FW_ARG} bootcmd 'run print_menu; usb start; test -n "$boot_once" && run boot_once; run boot_next' > /dev/null
}
install_uimage() {
ubidetach /dev/ubi_ctrl -m $mtd_num 2>/dev/null || true
create_ubi_partition() {
ubidetach /dev/ubi_ctrl -d 0 2>/dev/null || true
trap_push "${onie_bin} ubidetach -d 0 /dev/ubi_ctrl || true"
echo -en "Format mtd partition '$mtd_dev' "
ubiformat $mtd_dev -y -q || {
echo "Failed"
@ -90,54 +147,29 @@ install_uimage() {
#creates UBI volumes on UBI devices
ubimkvol /dev/$demo_dev -N $demo_dev -s 3900MiB
}
demo_mount=$(mktemp -d) || {
create_partition() {
# Platform speicific partition
create_ubi_partition
}
mount_partition() {
demo_mnt=$(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 "Mounting $demo_dev on $demo_mnt "
trap_push "${onie_bin} umount /dev/ubi0_0|| true"
mount -t ubifs /dev/ubi0_0 $demo_mnt || {
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
bootloader_menu_config() {
# Update uboot Environment
prepare_uboot
# Platform configuration
et6448m_machine_conf
# Unmounting mount path
umount $demo_mount
echo "Reboot board to boot from installed OS"
prepare_boot_menu
}
hw_load() {
echo "mtdpart default && ubi part SONIC && ubifsmount 'demo_dev' && ubifsload '$kernel_addr' 'image_name'"
}

View File

@ -7,6 +7,7 @@ include $(PLATFORM_PATH)/libsaithrift-dev.mk
include $(PLATFORM_PATH)/docker-ptf-mrvl.mk
include $(PLATFORM_PATH)/one-image.mk
include $(PLATFORM_PATH)/linux-kernel-armhf.mk
include $(PLATFORM_PATH)/platform-et6448m.mk
ENABLE_SYSTEM_TELEMETRY = ""
ENABLE_SYNCD_RPC = ""

View File

@ -0,0 +1,50 @@
# Object files
*.o
*.ko
*.obj
*.elf
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# Debug files
*.dSYM/
*.su
# Kernel Module Compile Results
*.mod*
*.cmd
*.o.d
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf
# Debian packaging
*.debhelper.log
*.postinst.debhelper
*.postrm.debhelper
*.prerm.debhelper
*.substvars

View File

@ -0,0 +1,5 @@
sonic-platform-et6448m (0.1) unstable; urgency=low
* Add support for ET6448M.
-- Marvell <arheneus@marvell.com> Mon, 11 Nov 2019 09:35:58 +0800

View File

@ -0,0 +1 @@
9

View File

@ -0,0 +1,15 @@
Source: sonic-platform-et6448m
Section: unknown
Priority: optional
Maintainer: Marvell <arheneus@marvell.com>
Build-Depends: debhelper (>=9)
Standards-Version: 3.9.6
Homepage: <insert the upstream URL, if relevant>
#Vcs-Git: git://anonscm.debian.org/collab-maint/sonic-platform-et6448m.git
#Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/sonic-platform-et6448m.git
Package: sonic-platform-et6448m
Architecture: armhf
Depends: ${misc:Depends}
Description: <insert up to 60 chars description>
<insert long description, indented with spaces>

View File

@ -0,0 +1 @@
et6448m_plt_setup.sh usr/sbin

View File

@ -0,0 +1,40 @@
#!/bin/sh
# postinst script for sonic-platform-et6448m
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <postinst> `configure' <most-recently-configured-version>
# * <old-postinst> `abort-upgrade' <new version>
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
# <new-version>
# * <postinst> `abort-remove'
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
# <failed-install-package> <version> `removing'
# <conflicting-package> <version>
# for details, see https://www.debian.org/doc/debian-policy/ or
# the debian-policy package
case "$1" in
configure)
sh /usr/sbin/et6448m_plt_setup.sh
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#
exit 0

View File

@ -0,0 +1,25 @@
#!/usr/bin/make -f
# See debhelper(7) (uncomment to enable)
# output every command that modifies files on the build system.
#export DH_VERBOSE = 1
# see FEATURE AREAS in dpkg-buildflags(1)
#export DEB_BUILD_MAINT_OPTIONS = hardening=+all
# see ENVIRONMENT in dpkg-buildflags(1)
# package maintainers to append CFLAGS
#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic
# package maintainers to append LDFLAGS
#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
%:
dh $@
# dh_make generated override targets
# This is example for Cmake (See https://bugs.debian.org/641051 )
#override_dh_auto_configure:
# dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)

View File

@ -0,0 +1,57 @@
#!/bin/bash
fw_uboot_env_cfg()
{
echo "Setting up U-Boot environment..."
FW_ENV_DEFAULT='/dev/mtd0 0x00500000 0x80000 0x100000 8'
UBOOT_FW_DFAULT=1
DTB_HAS_ENV_BLK=$(grep uboot-env /proc/mtd | sed -e 's/:.*$//')
if [ -c "/dev/$DTB_HAS_ENV_BLK" ]; then
PROC_ENV_FILE=$(find /proc/device-tree/ -name env_size)
if [ -n "$PROC_ENV_FILE" ]
then
UBOOT_ENV_SIZ="0x$(hd $PROC_ENV_FILE | awk 'FNR==1 {print $2 $3 $4 $5}')"
UBOOT_ENV_ERASE_SIZ="0x$(grep uboot-env /proc/mtd | awk '{print $3}')"
if [[ -n "$UBOOT_ENV_SIZ" && -n "$UBOOT_ENV_ERASE_SIZ" ]]
then
# Env info from DTB
FW_ENV_DTB="/dev/$DTB_HAS_ENV_BLK 0x00000000 $UBOOT_ENV_SIZ $UBOOT_ENV_ERASE_SIZ"
fi
fi
fi
if [ -n "$FW_ENV_DTB" ]
then
echo $FW_ENV_DTB > /etc/fw_env.config
echo "Found uboot env offset in device tree"
UBOOT_ENV_CRC=$(fw_printenv -c /etc/fw_env.config 2>&1 | grep -c 'Warning: Bad CRC')
if [ $UBOOT_ENV_CRC -eq 0 ]
then
echo "Uboot env offset in device tree is valid"
UBOOT_FW_DFAULT=0
else
echo "Uboot env offset in device tree is NOT valid"
UBOOT_FW_DFAULT=1
fi
fi
if [ $UBOOT_FW_DFAULT -eq 1 ]
then
echo $FW_ENV_DEFAULT > /etc/fw_env.config
echo "Using pre-configured uboot env"
fi
}
et6448m_profile()
{
MAC_ADDR=$(fw_printenv -n ethaddr)
sed -i "s/switchMacAddress=.*/switchMacAddress=$MAC_ADDR/g" /usr/share/sonic/device/armhf-marvell_et6448m_52x-r0/et6448m/profile.ini
echo "ET6448M: Updating switch mac address ${MAC_ADDR}"
}
main()
{
fw_uboot_env_cfg
et6448m_profile
}
main $@