Skip to content

Commit 429254c

Browse files
authored
[arm] Refactor installer and build to allow arm builds targeted at grub platforms (sonic-net#11341)
Refactors the SONiC Installer to support greater flexibility in building for a given architecture and bootloader. #### Why I did it Currently the SONiC installer assumes that if a platform is ARM based that it uses the `uboot` bootloader and uses the `grub` bootloader otherwise. This is not a correct assumption to make as ARM is not strictly tied to uboot and x86 is not strictly tied to grub. #### How I did it To implement this I introduce the following changes: * Remove the different arch folders from the `installer/` directory * Merge the generic components of the ARM and x86 installer into `installer/installer.sh` * Refactor x86 + grub specific functions into `installer/default_platform.conf` * Modify installer to call `default_platform.conf` file and also call `platform/[platform]/patform.conf` file as well to override as needed * Update references to the installer in the `build_image.sh` script * Add `TARGET_BOOTLOADER` variable that is by default `uboot` for ARM devices and `grub` for x86 unless overridden in `platform/[platform]/rules.mk` * Update bootloader logic in `build_debian.sh` to be based on `TARGET_BOOTLOADER` instead of `TARGET_ARCH` and to reference the grub package in a generic manner #### How to verify it This has been tested on a ARM test platform as well as on Mellanox amd64 switches as well to ensure there was no impact. #### Description for the changelog [arm] Refactor installer and build to allow arm builds targeted at grub platforms #### Link to config_db schema for YANG module changes N/A
1 parent 5171589 commit 429254c

12 files changed

+236
-564
lines changed

Makefile.work

+6
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,12 @@ ifeq ($(PLATFORM_ARCH),)
104104
override PLATFORM_ARCH = $(CONFIGURED_ARCH)
105105
endif
106106

107+
ifeq ($(CONFIGURED_ARCH),amd64)
108+
TARGET_BOOTLOADER = grub
109+
else
110+
TARGET_BOOTLOADER = uboot
111+
endif
112+
107113
ifeq ($(BLDENV), bullseye)
108114
SLAVE_DIR = sonic-slave-bullseye
109115
else ifeq ($(BLDENV), buster)

build_debian.sh

+12-6
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ if [[ -d $FILESYSTEM_ROOT ]]; then
6565
fi
6666
mkdir -p $FILESYSTEM_ROOT
6767
mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR
68-
mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/x86_64-grub
68+
mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/grub
6969
touch $FILESYSTEM_ROOT/$PLATFORM_DIR/firsttime
7070

7171
## ensure proc is mounted
@@ -162,7 +162,7 @@ if [ "$SONIC_ENABLE_SECUREBOOT_SIGNATURE" = "y" ]; then
162162
fi
163163

164164
echo '[INFO] Signing SONiC linux kernel image'
165-
K=$FILESYSTEM_ROOT/boot/vmlinuz-${LINUX_KERNEL_VERSION}-amd64
165+
K=$FILESYSTEM_ROOT/boot/vmlinuz-${LINUX_KERNEL_VERSION}-${CONFIGURED_ARCH}
166166
sbsign --key $SIGNING_KEY --cert $SIGNING_CERT --output /tmp/${K##*/} ${K}
167167
sudo cp -f /tmp/${K##*/} ${K}
168168
fi
@@ -392,11 +392,17 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in
392392
systemd-sysv \
393393
ntp
394394

395-
if [[ $CONFIGURED_ARCH == amd64 ]]; then
395+
if [[ $TARGET_BOOTLOADER == grub ]]; then
396+
if [[ $CONFIGURED_ARCH == amd64 ]]; then
397+
GRUB_PKG=grub-pc-bin
398+
elif [[ $CONFIGURED_ARCH == arm64 ]]; then
399+
GRUB_PKG=grub-efi-arm64-bin
400+
fi
401+
396402
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y download \
397-
grub-pc-bin
403+
$GRUB_PKG
398404

399-
sudo mv $FILESYSTEM_ROOT/grub-pc-bin*.deb $FILESYSTEM_ROOT/$PLATFORM_DIR/x86_64-grub
405+
sudo mv $FILESYSTEM_ROOT/grub*.deb $FILESYSTEM_ROOT/$PLATFORM_DIR/grub
400406
fi
401407

402408
## Disable kexec supported reboot which was installed by default
@@ -572,7 +578,7 @@ fi
572578
## Update initramfs
573579
sudo chroot $FILESYSTEM_ROOT update-initramfs -u
574580
## Convert initrd image to u-boot format
575-
if [[ $CONFIGURED_ARCH == armhf || $CONFIGURED_ARCH == arm64 ]]; then
581+
if [[ $TARGET_BOOTLOADER == uboot ]]; then
576582
INITRD_FILE=initrd.img-${LINUX_KERNEL_VERSION}-${CONFIGURED_ARCH}
577583
if [[ $CONFIGURED_ARCH == armhf ]]; then
578584
INITRD_FILE=initrd.img-${LINUX_KERNEL_VERSION}-armmp

build_image.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ generate_onie_installer_image()
8484

8585
## Generate an ONIE installer image
8686
## Note: Don't leave blank between lines. It is single line command.
87-
./onie-mk-demo.sh $TARGET_PLATFORM $TARGET_MACHINE $TARGET_PLATFORM-$TARGET_MACHINE-$ONIEIMAGE_VERSION \
87+
./onie-mk-demo.sh $CONFIGURED_ARCH $TARGET_MACHINE $TARGET_PLATFORM-$TARGET_MACHINE-$ONIEIMAGE_VERSION \
8888
installer platform/$TARGET_MACHINE/platform.conf $output_file OS $IMAGE_VERSION $ONIE_IMAGE_PART_SIZE \
8989
$ONIE_INSTALLER_PAYLOAD
9090
}
@@ -111,7 +111,7 @@ if [ "$IMAGE_TYPE" = "onie" ]; then
111111
mkdir -p `dirname $OUTPUT_ONIE_IMAGE`
112112
sudo rm -f $OUTPUT_ONIE_IMAGE
113113

114-
generate_device_list "./installer/$TARGET_PLATFORM/platforms_asic"
114+
generate_device_list "./installer/platforms_asic"
115115

116116
generate_onie_installer_image
117117

@@ -125,7 +125,7 @@ elif [ "$IMAGE_TYPE" = "raw" ]; then
125125
mkdir -p `dirname $OUTPUT_RAW_IMAGE`
126126
sudo rm -f $OUTPUT_RAW_IMAGE
127127

128-
generate_device_list "./installer/$TARGET_PLATFORM/platforms_asic"
128+
generate_device_list "./installer/platforms_asic"
129129

130130
generate_onie_installer_image "$tmp_output_onie_image"
131131

@@ -159,7 +159,7 @@ elif [ "$IMAGE_TYPE" = "raw" ]; then
159159

160160
elif [ "$IMAGE_TYPE" = "kvm" ]; then
161161

162-
generate_device_list "./installer/$TARGET_PLATFORM/platforms_asic"
162+
generate_device_list "./installer/platforms_asic"
163163

164164
generate_onie_installer_image
165165
# Generate single asic KVM image

files/build_templates/sonic_debian_extension.j2

+1-1
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/libnss-radius_*.deb || \
297297
sudo sed -i -e '/^passwd/s/ radius//' $FILESYSTEM_ROOT/etc/nsswitch.conf
298298

299299
# Install a custom version of kdump-tools (and its dependencies via 'apt-get -y install -f')
300-
if [[ $CONFIGURED_ARCH == amd64 ]]; then
300+
if [[ $TARGET_BOOTLOADER == grub ]]; then
301301
sudo DEBIAN_FRONTEND=noninteractive dpkg --root=$FILESYSTEM_ROOT -i $debs_path/kdump-tools_*.deb || \
302302
sudo LANG=C DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true chroot $FILESYSTEM_ROOT apt-get -q --no-install-suggests --no-install-recommends install
303303
cat $IMAGE_CONFIGS/kdump/kdump-tools | sudo tee -a $FILESYSTEM_ROOT/etc/default/kdump-tools > /dev/null

files/image_config/platform/rc.local

+1-1
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ if [ -f $FIRST_BOOT_FILE ]; then
293293
# we now install a grub for SONiC.
294294
if [ -n "$onie_platform" ] && [ -n "$grub_installation_needed" ]; then
295295

296-
grub_bin=$(ls /host/image-$SONIC_VERSION/platform/x86_64-grub/grub-pc-bin*.deb 2> /dev/null)
296+
grub_bin=$(ls /host/image-$SONIC_VERSION/platform/grub/grub*.deb 2> /dev/null)
297297
if [ -z "$grub_bin" ]; then
298298
log_migration "Unable to locate grub package !"
299299
firsttime_exit

installer/armhf/install.sh

-197
This file was deleted.

0 commit comments

Comments
 (0)