Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Table of Contents
    

...

outlinetrue
stylenone
    



Tip
titleIntroduction-Mulitboot

This page is dedicated for switching the images (broadband to video) specifically for techsummit-2019. Automation of Multiple SDCards Partitioning and Image Flash

Steps for Multiboot support of Single and

...

Multi-SDCards Partitioning and Image Flashing automatically

Precondition

...

for used SD Card

All the SD cards should be fully formatted. Use Disk tool to cleanup SD card data. Ignore Precondition steps if SD Card is fresh and empty 

Also, this method can be followed for single card multi boot flashing as well 

Note: These steps are not required for brand new SD card and you can skip

Deletion of partition using Disk tool in Ubuntu:

1) Select particular SD card from left hand side panel and click on '-' symbol of Disk tool

Image Modified

2) Click on Delete button to delete any particular partition

Image Modified

3) Finally deleted all the partitions:

Image Modified

4) After clean up the data in SD card, plug out it and plug in again.

...

Prerequisite Steps -  Preparing for flashing SD Cards

1) Keep all the below files in same location:

              i) Broadband image to be flashed

      ii) Video image to be flashed

         iii) extract.sh script file

     iv) multiSDcard_partition.sh

      v) threadSD.sh

extract.sh

Code Block
languagebash
titleextract.sh
collapsetrue
#--------------------------------------------------------------------------------------------------
# Extract meta information of Downloaded image
#--------------------------------------------------------------------------------------------------

mkdir -p extblock

fdisk -u -l $1 > extblock/sector.txt

linux_sector=`tail -2 extblock/sector.txt | tr -s ' ' | cut -d'*' -f2 | cut -d' ' -f2 | head -n1`
linux_offset=$((linux_sector*512))

rootfs_sector=`tail -2 extblock/sector.txt | tr -s ' ' | cut -d'*' -f2 | cut -d' ' -f2 | tail -1`
rootfs_offset=$((rootfs_sector*512))

mkdir -p extblock/linux_data
mkdir -p extblock/rootfs_data

mkdir -p extblock/vlinux_backup_data
mkdir -p extblock/vrootfs_backup_data

#sudo mount /dev/mmcblk0p1 extblock/bank0_linux

#--------------------------------------------------------------------------------------------------
# Loop mount + Extract kernel and bootload data of Downloaded image to storage area
#--------------------------------------------------------------------------------------------------

sudo mount -o loop,offset=$linux_offset $1 extblock/linux_data
cp -R extblock/linux_data/* extblock/vlinux_backup_data/
sudo umount extblock/linux_data
rm -rf extblock/linux_data


#--------------------------------------------------------------------------------------------------
# Loop mount + Extract rootfs data of Downloaded image to storage area
#--------------------------------------------------------------------------------------------------

sudo mount -o loop,offset=$rootfs_offset $1 extblock/rootfs_data

cp -R extblock/rootfs_data/* extblock/vrootfs_backup_data
sudo umount extblock/rootfs_data
rm -rf extblock/rootfs_data


 iv) multiSDcard_partition.sh

Code Block
languagebash
titlemultiSDcard_partition
collapsetrue
# This code is for partitioning and image flashing into multiple SD cards

echo Please enter the input arguments in this order : bash partition.sh bb_image video_image SDcardDetail_filename
echo Please keep the script extract.sh in the same folder

# Get user input for Broadband and Video image and SD card partition names and their respective sizes
echo Broadband image : $1
echo Video image : $2
echo SDcard details filename : $3

echo Deleting few folders if they are pre-existing...
sudo rm -rf videomnt/
sudo rm -rf extblock/

echo Video image is going to be extracted...
sudo sh extract.sh $2
sudo mkdir videomnt

loopcnt=1
while IFS=' ' read -r part_name sdcard_size
do
  sudo mkdir videomnt/videomnt'_'$loopcnt
  dir_name='videomnt/videomnt''_'$loopcnt
  echo $dir_name
  echo Calling the thread script which will paralleley execute for multiple SD cards...
  sudo bash threadSD.sh $1 $part_name $sdcard_size $dir_name &
  loopcnt=`expr $loopcnt + 1`
done < $3

# Check file inside videomnt is empty or not
cd videomnt

while true
do
  for file in *; do
     echo Check for file present in the directory...
  done

  if [ "$file" == "*" ]
  then
       echo All SD card partitioning and image flashing are completed !!
       # Deleting temporary folders.
       cd ..
       sudo rm -rf videomnt
       sudo rm -rf extblock/
       exit 1
   fi

  sleep 60
  sleep_cnt=`expr $sleep_cnt + 1`

  if [ "$sleep_cnt" == "10" ]
  then
     echo Multisd card flashing failed due to slow processing or error. Increase sleep count thresold sleep_cnt.
     exit 1
  fi

done


v) threadSD.sh

Code Block
titlethreadSD.sh
collapsetrue
# This program implements thread functionality for better performance for multiple SD card partitioning and image flashing
# Input arguments
bb_image=$1
part_name=$2
sdcard_size=$3
dir_name=$4
echo Going to flash the Broadband image in SD card which loaded in $part_name ...
`sudo dd if=$bb_image of=$part_name bs=4M`
echo Broadband Image flashed in SD card !!
echo SD card partitioning is going to start !!
sudo parted $part_name --script print
sudo parted $part_name --script resizepart 2 2048
sudo parted $part_name --script print free
sudo parted $part_name --script mkpart primary ext4 2049 4096
sudo parted $part_name --script print free
sd_size=$sdcard_size'GB'
sudo parted $part_name --script mkpart primary ext4 4097 $sd_size
sudo parted $part_name --script print
sudo parted $part_name --script quit
part3=$part_name'3'
part4=$part_name'4'
sudo mkfs.ext4 $part3
sudo mkfs.ext4 $part4
echo Video image is going to be copied in the extended partition ...
sudo mount $part4 $dir_name
sudo cp -r extblock/v* $dir_name/
sudo cp -r extblock/vrootfs_backup_data/* $dir_name/
echo Video image is stored in extended partition !!
sleep 10 
sudo umount $dir_name
sleep 10
echo SD card unmounted.
echo Partitioning and Image flashing in the SD card mounted in $part_name is Completed !!!
sudo rm -rf $dir_name

     vi) Create a file (For ex. sudo vi sd_part_size) where all the SD card partition names and their respective sizes are mentioned

2) Connect all the SD cards with host PC and execute the command : sudo fdisk -l  . It will list all the SD card partitions with their respective sizes

...

3) Write all the partition names and their respective size in a text file (as created earlier as sd_part_size). Please don't copy the colon(: ) displayed at the end of the partition name and the word "GB". There should be single space between partition name and size.

For example content of sd_part_size looks like:

            amrita@amrita-OptiPlex-9020:/tftp_files$ cat sd_part_size

             /dev/sdb 15.6

            /dev/sdc 32.0

            /dev/sde 31.9

           /dev/sdg 31.9 Image Added

[Here we have taken 1 SD card of 16GB and 3 others of 32GB each.]

...

Code Block
languagebash
titleMultiSDcard Partitioning and Image Flashing
bash multiSDcard_partition.sh <Broadband image> <Video image> <SD card details_filename>

For example:
bash multiSDcard_partition.sh rdkb-generic-broadband-image_default_20191009085525.rootfs.rpi-sdimg rdk-generic-hybrid-refapp-thunder-  image_default_20190924125426.rootfs.rpi-sdimg sd_part_size

...

Multiboot Feature : Switching to RDK-Video Image from RDK-Broadband 

  • Each SD card will contain 4 partitions

...

Note: We have tested with 4 SD cards out of which 1 is 16Gb and rest of the 3 cards are 32GB each. Overall process took approximately 6min  time to get completed. Host PC having 8GB RAM.

Manual Procedure for SD card partitioning and image flashing

RDK- Broadband Image Flashing in SDcard Steps

1. Flash the Broadband image in SD card

Code Block
languagebash
titleImage Flashing Command
sudo dd if=<RPIimage-sdimg> of=</dev/sdc> bs=4M

Example: sudo dd if=rdk-generic-hybrid-refapp-thunder-image_default_20190829072513.rootfs.rpi-sdimg of=/dev/sdc bs=4M

...

RDK- Video Image Copying in SDcard Steps

...

Code Block
languagebash
titlevideo data extract
sudo sh extract.sh <video-image file>
For ex. sudo sh extract.sh rdk-generic-hybrid-refapp-thunder-image_default_20190924125426.rootfs.rpi-sdimg

After executing the above script, Linux kernel and RootFS of RDK-Video image would be present in the extblock directory

...

  •     Create mount directory and execute mount  for the partition 4 
Code Block
languagebash
titlevideo data extract
For ex. 
mkdir videomnt
sudo mount /dev/sdb4 videomnt

In above command, storage partition 4 will get mounted to videomnt directory
  • Copy the RDK-Video image which is present in the extblock
Code Block
languagebash
titlevideo data extract
sudo cp -r extblock/v* videomnt/

...

  • now

Image Added

  •  Now
Code Block
languagebash
titlevideo data extract
sudo cp -r extblock/vrootfs_backup_data/* videomnt/

7. Unmount videomnt directory as below

Code Block
languagebash
titlevideo data extract
sudo umount videomnt

Switching to RDK-Video Image from RDK-Broadband 

...

  • Boot up the SD card in RPI-> it should come up with BB image in partition (P2)

...

  •   Log into the R-Pi from Host PC execute the below command

      ...

        • ssh root@<RPI-Board IP>

      ...

      • To load the video image which is present in the storage execute the script bank_video_switch.sh

      ...

      ...

      Switching to Video Image

      root@RaspberryPi-Gateway:/lib/

      ...

      rdk# sh

      ...

      bank_video_switch.sh

      ...

      Note: Have tested with 4 SD cards out of which 1 is 16Gb and rest of the 3 cards are 32GB each. Overall process took approximately 6min  time to get completed. Host PC having 8GB RAM. 

                 For Broad band image size around 300 MB and video image (thunder) size around 700 MB

                 SD card size mentioned in input text file should always be in GB but with format as provided in the steps mentioned

                 Minimum 8GB SD card is required to test this feature

      NOTE:

      Ensure that while mounting the SD card in host machine it may have different device names like /dev/sdc * and /dev/sdd * .  Please check host machine accordingly while using device name.