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