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 ioctl 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 ioctl calls are not available,
instead, the block count and block size values of stat are used.
All devices in Ironclad have the ioctl call DEV_PARTUUID
implemented, with the signature:
#define DEV_PARTUUID 0x9821 ioctl(fd, DEV_PARTUUID, &pointer_to_uuid); -- 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.