Broadcom
Timeline: May - Dec 2020
I worked on a variety of interesting tasks during my co-op term at Broadcom. The areas I mainly got to improve myself in are as follows:
Computer Networking
- Virtual networking, virtual routers
- Linux networking tools
- Performance testing using DPDK - it’s a cool tool, check it out! (tldr: it uses a user-space NIC driver instead of a kernel-space driver, making it very efficient at packet processing)
Linux
- Recompiling the Linux kernel
- via the make build tool
- via building as a Debian package
- cross-compiling to run on a different platform (ARM64) than it was built (x86)
- Exploring ways to install Ubuntu & CentOS on the eMMC disk of Broadcom’s Stingray SoC products
- via ISO images, rootfs tarball
- fixing bugs in an existing script, adding error handling
- Building
Yocto images
- lots of terminology around recipes!:)
- also repeating the Yocto build process inside a Docker container
- Recompiling the Linux kernel
Storage
- Designed and implemented a script for partition resizing of the eMMC disk on Stingray SoC
- Implemented for efficient usage of the eMMC partitions
- Goal: To open up more space for an empty data partition without having to reformat the existing partitions
- The script can free up to %65 of the eMMC disk for the data partition
- Worked on the procedure from start to end
- Added various CLI options to customize the partition resizing procedure
- Resizing if not all of the default partitions are available
- Shrinking specified partitions
- Shrinking a partition to a user-defined size (instead of the minimum possible size of the partition, which is the default behavior of the script)
- Implemented detailed error handling
- Implemented for efficient usage of the eMMC partitions
- Designed and implemented a script for partition resizing of the eMMC disk on Stingray SoC
Bootloaders
- Designed and implemented a methodology to add the GRUB bootloader to Stingray SoC, integrated GRUB-related changes with the existing boot procedure
- In addition to the existing UEFI shell, added support for the GRUB bootloader as a UEFI application
- Explored various methods for integrating GRUB with the Yocto filesystem in the best way possible
- Added a modular pipeline to perform and maintain GRUB-related changes to an existing script responsible for updating the Yocto filesystem/kernel images
- Created GRUB menu & submenu entries in an easy-to-navigate way for all ext4 filesystems installed on the eMMC, with kernel and DTB choices, mimicking the behavior of GRUB on common Linux systems such as Ubuntu
- Created a default GRUB entry based on which filesystem/kernel/DTB was updated in the script, to make it easy to boot without navigating the GRUB menu
- Made use of GRUB environment variables to store boot parameters, thus created a viable alternative to using UEFI variables
- Prepared detailed docs to inform the team about the new procedure
- Designed and implemented a methodology to add the GRUB bootloader to Stingray SoC, integrated GRUB-related changes with the existing boot procedure