Hello all, I am continuing my journey on the MIPS architecture. I wanted to add wks files for my MIPS target (Creator Ci40) and do_wic_image failed: INFO: Creating image(s)... -rw-r--r-- 1 root root 697932185 Jun 18 13:34 /tmp/development-image-mel-omni-img-creator-ci40.wic/tmp.wic.n3m8x3xo/rootfs_platforma.1.ext4 Unsupported ioctl: cmd=0x0002 Traceback (most recent call last): File "/home/chombourger/Projects/isar/scripts/lib/wic/filemap.py", line 40, in get_block_size binary_data = fcntl.ioctl(file_obj, 2, struct.pack('I', 0)) OSError: [Errno 89] Function not implemented During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/chombourger/Projects/isar/scripts/lib/wic/filemap.py", line 103, in __init__ self.block_size = get_block_size(self._f_image) File "/home/chombourger/Projects/isar/scripts/lib/wic/filemap.py", line 42, in get_block_size raise IOError("Unable to determine block size") OSError: Unable to determine block size wic appears to be running from buildchroot-target and therefore under qemu--static evidently mips does not implement the FIGETBSZ ioctl My options would be: (1) check if a more recent version of qemu does implement this ioctl (2) add support for this ioctl in qemu-user (3) work-around it in wic with something like: diff --git a/scripts/lib/wic/filemap.py b/scripts/lib/wic/filemap.py index 080668e..1ce3ace 100644 --- a/scripts/lib/wic/filemap.py +++ b/scripts/lib/wic/filemap.py @@ -40,8 +40,13 @@ def get_block_size(file_obj): # Get the block size of the host file-system for the image file by calling # the FIGETBSZ ioctl (number 2). - binary_data = ioctl(file_obj, 2, struct.pack('I', 0)) - return struct.unpack('I', binary_data)[0] + try: + binary_data = ioctl(file_obj, 2, struct.pack('I', 0)) + return struct.unpack('I', binary_data)[0] + except OSError as err: + if err.errno == os.errno.ENOSYS: + return 4096 + raise err class ErrorNotSupp(Exception): """ Ok. But why are we running wic in buildchroot-target. Comments I have seen in the code only say that it is a prerequisite but do not say why (I should probably check git logs as well) I wonder if it should run in buildchroot-host context instead (so we still use a host environment we control) but avoid the overhead of qemu emulation for DISTRO_ARCH != amd64 What are your thoughts? Cedric