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:





        /*  UART */



        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)))





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 ?