Skip to main content


Showing posts from February 3, 2019

Writing Startup Code for ARM Cortex A9 - Board bringup series - ZED Board

ZED Board uses Dual ARM Cortex A9
ZED board internally presents Debugger called XMD (Xilinx Microprocessor Debugger)
Xilinx provides Xilinx - SDK which supports Bare metal driver debug using XMD (XMD is having Node locked License)

This boot process is equal to debug using Hardware debugger like Lauterbach /ARM DS-5 /Segger Debugger & the Same is not possible with KGDB.
KGDB is supported grom GNU tools which can enter the Code in RAM (Maxium 4 Stack frames), Debugging code present outside the RAM is possible through Physical debuggers only.

Cortex A9 Processor boot method in Zynq SoC:

   1. The boot.S file contains a minimal set of code for transferring control from the processor's reset      2. Location to the start of the application. It performs the following tasks.
       Invalidate L1 caches, TLBs, Branch Predictor Array, etc.
       Invalidate L2 caches and initialize L2 Cache Controller.
      Enable caches and MMU
     Load MMU translation table base address into TLB  …

Writing Startup Code for ARM Cortex M4 Controllers

STM32F4 Board bringup using OpenOCD

1.STM32F4 uses ARM Cortex M4 Controller
2.Internal Jtag pin present on the STM32F4 board supports for Debugging kernel which is already flashed on the Board.
3.STM32F4 using RIOT (Revoultionay IOT ) Micro Kernel.

Adding screenshots in sequence from Reset vector table.


Steps followed for writing startup code:
1.Initialize vector table
          2. Enter  to reset_vector()
         3. Copy .data section to RAM
         4. Initialize BSS section to Zeros
         5. Call board_init () 
               (call peripherals _init & cpu_init)
         6. Call libc_init_array()
         7. Call kernel_init()

Linux Kernel Board Bring up Series - CLK Framework Zynq Zc702, ZED Board

CLK Frame work which is part of early board bring up is captured in Zynq ZC702 Board
using zynq linux kernel in sequence order 

please check call flow in sequence

Linux Kernel Board Bring up Series - GPIO Zynq Zc702-ZED Board

GPIO Bringup Sequence in Zynq Zc 702 , ZED Board

Adding Screenshots for the Bring up sequence








 This picture represents all the GPIO sequence in zynq kernel 

Linux Kernel Board Bringup Series - SMP Developement

Plat SMP Developement in ARM Board
Reference: ZED Board (Zynq ZC702, Dual ARM Cortex A9)


The initialization of an SMP operating system typically runs on only one core - the primary core. When the system is fully booted, the remaining cores are brought online and this distinction between the primary core and the secondary cores is lost.

2. If all of the cores come out of reset at the same time, they normally all start executing from the same reset vector. The boot code then reads the cluster ID to determine which core is the primary.
 The primary core performs the initialization and then signals to the secondary ones that everything is ready.
An alternative method is to hold the secondary cores in reset while the primary core does the initialization. This method requires hardware support to coordinate the reset.

3.Processor ID
Booting provides a simple example of a situation where particular operations must be performed only on a specific core. Other operations perform differen…