KEMBAR78
Embedded Linux BSP Training (Intro) | PDF
Embedded Linux BSP
Training (Intro)
Organised by YoctoTutor & supported by
RuggedBOARD
Agenda
• Introduction to EMBEDDED LINUX
• Embedded OS Components
• eLinux Boards / SBC’s
• Boot Loaders (U-BOOT, Barebox)
• Linux Kernel
• ROOTFS & Build Systems
• Embedded Programming on RB-A5D2x Linux
• Linux Internal
• Demos
• Open Discussion
Embedded Systems Classification
MCU Based
Very Low Power
Small Code (KB’s)
Baremetal
Small RTOS
MPU Based
High Speed (200MHz till 1GHz)
OS + Application Code
MPU+ Based
Special Co-Processors
Very High Computation Power
Special Hardware Accelerator
Engines like TPU, VPU, GPU’s
S1.0 S2.0 S3.0
Mostly uses Cortex-M4
having BLE comm and few
sensors need companion
mobile
Mostly uses Cortex-A7, 4G
comm friendly UI, make
calls, check emails etc …
Mostly uses Cortex-53, 4G
and advance AI/ML
capabilities to process the
data on-device and generate
analytics & feedback
RootFS
Toolchain
eLinux System ARCH
Linux OS Distributions
System Hardware
Processor Blueprint, defines IS & other hardware blocks of Processor
Processor design in VHDL / Verilog having ALU, Registors, TCU, Buses …
Product = SBC + Software + Housing/Mechanicals
Silicon with Processor & peripherals like GPIO, UART, I2C, SPI, USB,
Ethernet …
SOM = SOC+ RAM + Flash + PMIC, SBC = Board with SOM & interfacing
devices like LCD, Connectors, Sensors & Communication modules
SOC Vendors Platforms
TI AM335x, AM437x, AM572x
NXP imx6ULL, imx6(S/D/Q), imx8
Microchip SAML1x, SAMA5D2x
ST Microelectronics STM32MP15x
Renesas RZ/A1x, RZ/G1x, RZ/G2x
Rockchip RK3036, RK3288, RK3399
Qualcomm Snapdragon 200, 400, 800
Mediatek MT8312, MT8135, MT8176
Amlogic S805, S812, S912
Allwinner A2x, A3x, A6x
ARM SOC’s & Vendors
eLinux SBC
eLinux SBC
eLinux SBC
eLinux SBC
Toolchain
Components of Toolchain
Bins
Compiler
Assembler
Linker
Format Convertor
Libs
C Library
pTherad Lib
Other …
Tools
Debugging tools
Steps to Install Toolchain for RuggedBOARD link …
Bootloader
Boot Process
ON PC:
Power On-> BIOS ( POST, Bootstraploader) -> MBR -> Bootloader -> Kernel -> RFS
ON RuggedBOARD:
1. Power On SBC
2. SOC BootROM Code will exec
3. BootCFG Pins will define the bootdevice ( NAND, NOR, SDCARD ..... )
4. From Bootdevice first piece of code (PBL) loaded in SRAM and executed
5. PBL responsible for External RAM Init and loads the BL to External RAM and execute.
6. BL will load the kernel and executes
7. Kernel boots and mounts the RootFS and finally executes the init binary
8. Init will follow init rc scripts to start services and applications
U-boot Source
Browse Source: https://github.com/rugged-board/uboot-rba5d2x
Compiling U-Boot for RuggedBOARD
#Set the toolchain path first
$ . env_setup.sh
# Download uboot Source
$ git clone https://github.com/rugged-board/uboot-rba5d2x.git
$ cd uboot-rba5d2x
$ git checkout origin/uboot-rba5d2x
# Compile u-boot bootloader
make
# Configure u-boot bootloader for RB-A5D2x
$ make rugged_board_a5d2x_mmc1_defconfig # For SD Card
Or
$ make rugged_board_a5d2x_qspiflash_defconfig # For NOR Boot
Linux Kernel
Source: https://github.com/rugged-board/linux-rba5d2x
Linux Kernel Dir Structure:
linux/
arch/arm/
plat-<soc_family>
mach-<soc_family> --> sama5.c
kernel
boot/dts
tools --> mach-types
configs ==> <boardname_defconfig>
drivers/
gpio, usb, spi, i2c, mtd, mmc, net ....
Documentation/
kernel-parameters.txt
#Set the toolchain path first
$ . env_setup.sh
Kernel Source
#Linux Kernel Images = vmlinux, Image, zImage, uImage
# Configure kernel for RB-A5D2x
$ make dtbs
$ make
# Download Kernel Source from RB github
$ git clone https://github.com/rugged-board/linux-rba5d2x.git
$ cd linux-rba5d2x
$ git checkout origin/linux-rba5d2x
# Configure kernel for RB-A5D2x
$ make rb_a5d2x_defconfig
COMPILING kernel for RuggedBOARD:
Root Filesystem
Components of RFS are:
1. Unix Dir Structure
2. Device Nodes
3. Scripts
4. Binaries
5. Libraries
6. Config / data files
Build System Functions
Linux Build Systems
BuildSystemsList
Crosstool-ng
Scratchbox
OpenWRT
PTXdist
LTIB
Buildroot
Open Embedded
Yocto Project
Fetch Source
Extract
Patch
Configure
Compile
Package
Image Generation
COMPILING Yocto for RuggedBOARD:
Yocto Compilation
#Download source
$ mkdir yocto_rba5d2x
$ cd yocto_rba5d2x
$ mkdir sources
$ cd sources
$ git clone https://github.com/rugged-board/poky.git -b sumo-rba5d2x
$ git clone git://git.openembedded.org/meta-openembedded -b sumo
$ git clone https://github.com/rugged-board/meta-rba5d2x.git -b sumo-rba5d2x
#Continue next slide ……
#Install host packages
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib 
build-essential chrpath socat libsdl1.2-dev xterm
#Configure for RuggedBOARD-A5D2x
$ source sources/poky/oe-init-build-env
$ vi conf/local.conf
# Edit MACHINE ?= "rugged-board-a5d2x-sd1“
Yocto Compilation
#Compile
$ bitbake rb-sd-core-image-minimal # For SD Card Images
Or
$ bitbake rb-nor-core-image-minimal # For NOR Flash Images
#Images for SD Card
$ cd tmp/deploy/images/rugged-board-a5d2x-sd1/
#Follow Boot from SD Card Tutorial..
#Images for NOR
$ cd tmp/deploy/images/rugged-board-a5d2x/
#Follow NOR Flashing Tutorial..
eLinux Interface Programming
import mraa
import time
gpio_1 = mraa.Gpio(61)
gpio_1.dir(mraa.DIR_OUT)
while True:
gpio_1.write(1)
time.sleep(1)
gpio_1.write(0)
time.sleep(1)
Sensor Programming using UPM Library on Linux
Embedded Interface Programming using MRAA
Library on Linux
from upm import pyupm_mcp9808 as MCP9808
# Instantiate the Infrared-Thermopile Sensor on I2C on bus 1
mySensor = MCP9808.MCP9808(2,0x18)
print("Temperature : "+str(mySensor.getTemp()))
Linux Internals
1. Linux Shell commands
2. Linux Shell Scripting
3. Process ( fork, exec, clone )
4. Threads
5. IPC ( Inter Process Communication)
Pipe, FiFO, MsgQ, SharedMemory, Semaphores , Socket
6. Socket Programming
7. Concepts ( Scheduler, Memory Mgmt, FileSystem )
Demo
RuggedBOARD
Industrial Grade Hardware for IIoT
https://Community.ruggedboard.com
Boot Process
Flash Memory
Main Memory / DDR
SRAM in SOC
AT91 Bootstrap
U-Boot
Kernel
Mounts on
/
Kernel
U-Boot
AT91 Bootstrap
Device Tree Bin(DTB)Device Tree Bin(DTB)
Root FS
Next Sessions
1. U-Boot Porting using RuggedBOARD-A5D2x
2. Linux Kernel Porting using RuggedBOARD-A5D2x
a. Source Code walkthrough & Code flow
b. Kconfig Kernel Configuration System
c. Adding Custom driver
3. Yocto BSP using RuggedBOARD-A5D2x
4. How to design your own Single Board Computer using phyCORE-A5D2x. [HW Design]
5. Building Gateway Hardware and Open Source Linux Stacks for Gateway. [HW Design]
To get update’s follow RuggedBOARD on LinkedIn, Youtube, Twitter, Facebook &
Instagram links are on next slide …
Connect-us
Open Discussions
B Vasu Dev
ABOUT Vasu
Vasu has 15+ Years of industry experience in Embedded Technologies mainly on ARM & Linux, he
has worked at major MNC’s like LG, Wipro, MIC Electronics and is currently heading PHYTEC INDA,
a subsidiary of PHYTEC Messtechnik GmbH GERMANY as Managing Director. PHYTEC serves as
OEM for many electronic and embedded companies to develop and deploy their products at the
lowest possible time with high reliability and quality using ARM based SOMs (System On Modules )
& SBCs (Single Board Computers). The industry verticals he was engaged are Industrial
Automation, Mobility & Energy, Medical/Healthcare, Retail market.
Apart from his technical work, he is an active coach & guide for Embedded developers and actively
spend his time to train the developers on Embedded Linux, Yocto, IoT, Android System
Development. He is the master mind behind RuggedBOARD Open Source Hardware Platform. Vasu
as a mentor helped many start-ups to build their products and position them in market.
Managing Director
PHYTEC Embedded Pvt Ltd
vasu.b@phytec.in
+91-9535504414
Presenter Profile

Embedded Linux BSP Training (Intro)

  • 1.
    Embedded Linux BSP Training(Intro) Organised by YoctoTutor & supported by RuggedBOARD
  • 2.
    Agenda • Introduction toEMBEDDED LINUX • Embedded OS Components • eLinux Boards / SBC’s • Boot Loaders (U-BOOT, Barebox) • Linux Kernel • ROOTFS & Build Systems • Embedded Programming on RB-A5D2x Linux • Linux Internal • Demos • Open Discussion
  • 3.
    Embedded Systems Classification MCUBased Very Low Power Small Code (KB’s) Baremetal Small RTOS MPU Based High Speed (200MHz till 1GHz) OS + Application Code MPU+ Based Special Co-Processors Very High Computation Power Special Hardware Accelerator Engines like TPU, VPU, GPU’s S1.0 S2.0 S3.0 Mostly uses Cortex-M4 having BLE comm and few sensors need companion mobile Mostly uses Cortex-A7, 4G comm friendly UI, make calls, check emails etc … Mostly uses Cortex-53, 4G and advance AI/ML capabilities to process the data on-device and generate analytics & feedback
  • 4.
  • 5.
  • 6.
    System Hardware Processor Blueprint,defines IS & other hardware blocks of Processor Processor design in VHDL / Verilog having ALU, Registors, TCU, Buses … Product = SBC + Software + Housing/Mechanicals Silicon with Processor & peripherals like GPIO, UART, I2C, SPI, USB, Ethernet … SOM = SOC+ RAM + Flash + PMIC, SBC = Board with SOM & interfacing devices like LCD, Connectors, Sensors & Communication modules
  • 7.
    SOC Vendors Platforms TIAM335x, AM437x, AM572x NXP imx6ULL, imx6(S/D/Q), imx8 Microchip SAML1x, SAMA5D2x ST Microelectronics STM32MP15x Renesas RZ/A1x, RZ/G1x, RZ/G2x Rockchip RK3036, RK3288, RK3399 Qualcomm Snapdragon 200, 400, 800 Mediatek MT8312, MT8135, MT8176 Amlogic S805, S812, S912 Allwinner A2x, A3x, A6x ARM SOC’s & Vendors
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
    Toolchain Components of Toolchain Bins Compiler Assembler Linker FormatConvertor Libs C Library pTherad Lib Other … Tools Debugging tools Steps to Install Toolchain for RuggedBOARD link …
  • 13.
    Bootloader Boot Process ON PC: PowerOn-> BIOS ( POST, Bootstraploader) -> MBR -> Bootloader -> Kernel -> RFS ON RuggedBOARD: 1. Power On SBC 2. SOC BootROM Code will exec 3. BootCFG Pins will define the bootdevice ( NAND, NOR, SDCARD ..... ) 4. From Bootdevice first piece of code (PBL) loaded in SRAM and executed 5. PBL responsible for External RAM Init and loads the BL to External RAM and execute. 6. BL will load the kernel and executes 7. Kernel boots and mounts the RootFS and finally executes the init binary 8. Init will follow init rc scripts to start services and applications
  • 14.
    U-boot Source Browse Source:https://github.com/rugged-board/uboot-rba5d2x Compiling U-Boot for RuggedBOARD #Set the toolchain path first $ . env_setup.sh # Download uboot Source $ git clone https://github.com/rugged-board/uboot-rba5d2x.git $ cd uboot-rba5d2x $ git checkout origin/uboot-rba5d2x # Compile u-boot bootloader make # Configure u-boot bootloader for RB-A5D2x $ make rugged_board_a5d2x_mmc1_defconfig # For SD Card Or $ make rugged_board_a5d2x_qspiflash_defconfig # For NOR Boot
  • 15.
    Linux Kernel Source: https://github.com/rugged-board/linux-rba5d2x LinuxKernel Dir Structure: linux/ arch/arm/ plat-<soc_family> mach-<soc_family> --> sama5.c kernel boot/dts tools --> mach-types configs ==> <boardname_defconfig> drivers/ gpio, usb, spi, i2c, mtd, mmc, net .... Documentation/ kernel-parameters.txt
  • 16.
    #Set the toolchainpath first $ . env_setup.sh Kernel Source #Linux Kernel Images = vmlinux, Image, zImage, uImage # Configure kernel for RB-A5D2x $ make dtbs $ make # Download Kernel Source from RB github $ git clone https://github.com/rugged-board/linux-rba5d2x.git $ cd linux-rba5d2x $ git checkout origin/linux-rba5d2x # Configure kernel for RB-A5D2x $ make rb_a5d2x_defconfig COMPILING kernel for RuggedBOARD:
  • 17.
    Root Filesystem Components ofRFS are: 1. Unix Dir Structure 2. Device Nodes 3. Scripts 4. Binaries 5. Libraries 6. Config / data files
  • 18.
    Build System Functions LinuxBuild Systems BuildSystemsList Crosstool-ng Scratchbox OpenWRT PTXdist LTIB Buildroot Open Embedded Yocto Project Fetch Source Extract Patch Configure Compile Package Image Generation
  • 19.
    COMPILING Yocto forRuggedBOARD: Yocto Compilation #Download source $ mkdir yocto_rba5d2x $ cd yocto_rba5d2x $ mkdir sources $ cd sources $ git clone https://github.com/rugged-board/poky.git -b sumo-rba5d2x $ git clone git://git.openembedded.org/meta-openembedded -b sumo $ git clone https://github.com/rugged-board/meta-rba5d2x.git -b sumo-rba5d2x #Continue next slide …… #Install host packages $ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm
  • 20.
    #Configure for RuggedBOARD-A5D2x $source sources/poky/oe-init-build-env $ vi conf/local.conf # Edit MACHINE ?= "rugged-board-a5d2x-sd1“ Yocto Compilation #Compile $ bitbake rb-sd-core-image-minimal # For SD Card Images Or $ bitbake rb-nor-core-image-minimal # For NOR Flash Images #Images for SD Card $ cd tmp/deploy/images/rugged-board-a5d2x-sd1/ #Follow Boot from SD Card Tutorial.. #Images for NOR $ cd tmp/deploy/images/rugged-board-a5d2x/ #Follow NOR Flashing Tutorial..
  • 21.
    eLinux Interface Programming importmraa import time gpio_1 = mraa.Gpio(61) gpio_1.dir(mraa.DIR_OUT) while True: gpio_1.write(1) time.sleep(1) gpio_1.write(0) time.sleep(1) Sensor Programming using UPM Library on Linux Embedded Interface Programming using MRAA Library on Linux from upm import pyupm_mcp9808 as MCP9808 # Instantiate the Infrared-Thermopile Sensor on I2C on bus 1 mySensor = MCP9808.MCP9808(2,0x18) print("Temperature : "+str(mySensor.getTemp()))
  • 22.
    Linux Internals 1. LinuxShell commands 2. Linux Shell Scripting 3. Process ( fork, exec, clone ) 4. Threads 5. IPC ( Inter Process Communication) Pipe, FiFO, MsgQ, SharedMemory, Semaphores , Socket 6. Socket Programming 7. Concepts ( Scheduler, Memory Mgmt, FileSystem )
  • 23.
  • 24.
    RuggedBOARD Industrial Grade Hardwarefor IIoT https://Community.ruggedboard.com
  • 25.
    Boot Process Flash Memory MainMemory / DDR SRAM in SOC AT91 Bootstrap U-Boot Kernel Mounts on / Kernel U-Boot AT91 Bootstrap Device Tree Bin(DTB)Device Tree Bin(DTB) Root FS
  • 26.
    Next Sessions 1. U-BootPorting using RuggedBOARD-A5D2x 2. Linux Kernel Porting using RuggedBOARD-A5D2x a. Source Code walkthrough & Code flow b. Kconfig Kernel Configuration System c. Adding Custom driver 3. Yocto BSP using RuggedBOARD-A5D2x 4. How to design your own Single Board Computer using phyCORE-A5D2x. [HW Design] 5. Building Gateway Hardware and Open Source Linux Stacks for Gateway. [HW Design] To get update’s follow RuggedBOARD on LinkedIn, Youtube, Twitter, Facebook & Instagram links are on next slide …
  • 27.
  • 28.
  • 29.
    B Vasu Dev ABOUTVasu Vasu has 15+ Years of industry experience in Embedded Technologies mainly on ARM & Linux, he has worked at major MNC’s like LG, Wipro, MIC Electronics and is currently heading PHYTEC INDA, a subsidiary of PHYTEC Messtechnik GmbH GERMANY as Managing Director. PHYTEC serves as OEM for many electronic and embedded companies to develop and deploy their products at the lowest possible time with high reliability and quality using ARM based SOMs (System On Modules ) & SBCs (Single Board Computers). The industry verticals he was engaged are Industrial Automation, Mobility & Energy, Medical/Healthcare, Retail market. Apart from his technical work, he is an active coach & guide for Embedded developers and actively spend his time to train the developers on Embedded Linux, Yocto, IoT, Android System Development. He is the master mind behind RuggedBOARD Open Source Hardware Platform. Vasu as a mentor helped many start-ups to build their products and position them in market. Managing Director PHYTEC Embedded Pvt Ltd vasu.b@phytec.in +91-9535504414 Presenter Profile