Ironclad exposes a number of physical and virtual devices to userland. All
of them are exposed under the /dev location, and support a series of
standard operations, like being manipulated by the usual file-related
syscalls like read or write, while sporting device-specific
interfaces in the form of device-specific devctl requests.
When querying device-specific information, Ironclad exposes information a bit different than other kernels like Linux. Here is a quick list of the most notable differences:
BLKGETSIZE/BLKGETSIZE64 devctl calls are not available,
instead, the block count and block size values of stat are used.
All devices in Ironclad have the devctl call DEV_PARTUUID
implemented, with the signature:
#define DEV_PARTUUID 0x9821 devctl(fd, DEV_PARTUUID, &pointer_to_uuid, 0, NULL); -- uuids being uint8_t[16];
This call will write the UUID of the device pointed to by fd. If
all zeros, will mean that the device has no associated UUID. This UUID is the
UUID of the partition, not of the FS, like, for example, the GPT’s partition
UUID.