Hi Sathya, The seL4 kernel defines available kernel devices in the platform dependent hardware.h file. The kernel_devices[] structure contains all the hardware devices that the kernel needs access to. For most platforms, this is just the GIC, but if CONFIG_PRINTING is enabled, the uart is added as well. The code below is from the zynqmp hardware.h file: #ifdef CONFIG_PRINTING }, { /* UART */ UART_PADDR, UART_PPTR, true /* armExecuteNever */ #endif /* CONFIG_PRINTING */ } So that device defines the UART physical address, virtual address, and whether the device is allowed to execute. The kernel_devices structure gets used with the map_kernel_devices function so that the UART gets mapped from UART_PADDR -> UART_PPTR. Software can then use the virtual address to send and receive characters from the UART. #define UART_REG(x) ((volatile uint32_t *)(UART_PPTR + (x))) while (!(*UART_REG(XUARTPS_SR) & XUARTPS_SR_TXEMPTY)); *UART_REG(XUARTPS_FIFO) = c; Let me know if you have any other questions. Chris Guikema Embedded Systems Engineer DornerWorks, Ltd. From: Devel [mailto:devel-bounces@sel4.systems] On Behalf Of Sathya Narayanan N Sent: Thursday, July 19, 2018 4:27 AM To: devel@sel4.systems Subject: Re: [seL4] Understanding how SEL4 recognises UART on board Hi Experts, I am curious to know how SEL4 recognises the existence of UART on the board and mapped to a particular memory address. I see there is no DTB/ DTS files read from memory. could someone help me understand the concept here ? Or is it something hardcoded in the kernel ? -- regards, Sathya