Hi John,
The purpose is to allow the attributes on the CMOS hardware component to have defaults but still able to be overridden by configuration settings of the RTC component that contains it.
If in your assembly you had an instance of the RTC component called clock, then in your configuration section you could set clock.cmos_address_attributes and clock.cmos_data_attributes to different values and these would override the settings in the underlying hardware component.
assembly {
composition {
RTC clock;
}
configuration {
/* This is going to override the cmos_data_attributes attribute on the hardware CMOS device */
?/* It is equivalent to clock.cmos.cmos_data_attributes = "0x72:0x72"; ?*/
clock.cmos_data_attributes = "0x72:0x72"; ?
}
?The manual explains the '<-' feature here: https://github.com/seL4/camkes-tool/blob/master/docs/index.md#syntax-1
And there is an app in the camkes project that shows more examples here: https://github.com/seL4/camkes/blob/master/apps/attributes/attributes.camkes
Kind regards,
Kent
________________________________
From: Devel on behalf of John Backes
Sent: Wednesday, October 4, 2017 2:27 AM
To: devel
Subject: [seL4] Question about IO ports in CAmKES
I have a question about the Real-time Clock component (RTC) for the x86 VMM found here:
https://github.com/SEL4PROJ/global-components/blob/master/components/RTC/RTC...
Here is the text of the camkes file:
import ;
import ;
component CMOS {
hardware;
provides IOPort cmos_address;
provides IOPort cmos_data;
attribute string cmos_address_attributes = "0x70:0x70";
attribute string cmos_data_attributes = "0x71:0x71";
}
component RTC {
provides RTC rtc;
maybe uses PutChar putchar;
uses IOPort cmos_address;
uses IOPort cmos_data;
attribute int heap_size = 0;
/* Connect the hardware RTC to the RTC component */
composition {
component CMOS cmos;
connection seL4HardwareIOPort rtc_cmos_address(from cmos_address, to cmos.cmos_address);
connection seL4HardwareIOPort rtc_cmos_data(from cmos_data, to cmos.cmos_data);
}
configuration {
cmos.cmos_address_attributes <- cmos_address_attributes;
cmos.cmos_data_attributes <- cmos_data_attributes;
}
}
What is the meaning of the last two statements in the configuration block? what is the scoping rules for the "cmos_address_attributes" and "cmos_data_attributes" variables? It looks like these attributes are already set in the definition of the CMOS component? They seemed to be assigned again in the configuration block?
- John