Fork us on GitHub Follow us on Google+ Follow us on Facebook Follow us on Twitter

UDF file system server

1 Current status

FS type Reading Writing
DVD Video (ticket 303 from ideas list)+ (complete)N/A
Blu-Ray Video (ticket 304)+ (complete)N/A
UDF Plain+ (complete) in progress
  • N/A - not applicable

2 TODO plan

  • Implement initial writing support for UDF plain disks (in progress)

3 How to test

You need Bazaar (version control system) to download sources.

3.1 Download sources from my branch

bzr branch lp:~medvedeva-julia/helenos/udf helenos

3.2 Build cross-platform compiler

Building IA32 compiler (GCC) You should to install all requirements (list will be provided by toolchain.sh).

cd helenos/tools
sudo ./toolchain.sh ia32

3.3 Compile sources

cd helenos
make PROFILE=ia32

3.4 Create UDF disk image under Linux (Optional)

To create UDF image under Linux you need to install package with UDF utilities. For example in Arch it's udftools. The package should contain the mkudffs tool.

mkudffs --media-type=hd --blocksize=512 --utf8 ./udf.img

You can also select media type: "hd" or "dvd" and blocksize: 512 or 2048 or something else.

Unless you are overwriting already existing image, you need to create an empty file first (otherwise you would get the trying to change type of multiple extents error). Following creates a 32M file:

dd if=/dev/zero of=./udf.img bs=4096 count=8192

3.5 Mount udf disk image under Linux (Optional)

You can mount the UDF image (from step 3.4) under your Linux host and copy several files into it.

mount -o loop -t udf ./udf.img /mnt/udf-mount-point

where udf.img is the image from step 3.3

3.6 Boot HelenOS with UDF disk image

To boot HelenOS run QEMU:

qemu-system-i386 -m 512 -boot d -hda udf.img -cdrom helenos/image.iso

udf.img is the UDF disk image (from step 3.4 or existing dvd.iso for example)

3.7 Mount user disk image under HelenOS

In HelenOS run a batch script to run UDF server, ATA server and mount the first ATA disk as UDF.

batch u

Then, go to the /mnt directory:

cd /mnt

and here you are :)

4 Read functions dashboard

VFS method Task Implementation File Progress TODO and comments
mounted check volume recognition sequence udf_volume_recongnition udf_volume done
search for anchor volume descriptor udf_get_anchor_volume_descriptor udf_volume done
read volume descriptor sequence udf_read_volume_descriptor_sequence udf_volume done
data structure for saving information about item (file or dir) udf_node_t udf.h done
hash table for udf_node saving udf_idx_ udf_idx done udf_idx_hash too simple
ckecksum functions entire file udf_cksum done
osta unicode compression entire file udf_osta done
mount udf disk udf_mounted udf_ops done
node_get get, put and reading udf_node udf_node_get udf_ops done
read read icb sequence by index udf_node_get_core udf_file done
read file entry descriptor from icb udf_read_icb udf_file done
read allocation sequence from file entry descriptor udf_read_allocation_sequence udf_file done
sorting of allocators udf_allocator_sort udf_file done not necessary
read file by position udf_read_file udf_ops done
read directory udf_get_fid udf_ops done
root_get get root directory udf_root_get udf_ops done
match search fid in directory by name udf_match udf_ops done
node_put delete node udf_node_put udf_ops done
index_get get index of node udf_index_get udf_ops done
has_children return true if a directory contains elements udf_has_children udf_ops done
size_get size of element (file or directory) udf_size_get udf_ops done
lnkcnt_get count links on node udf_lnkcnt_get udf_ops done
is_directory identify directory udf_is_directory udf_ops done
is_file identify file udf_is_file udf_ops done
service_get get service id udf_service_get udf_ops done

5 Unsupported functions dashboard

VFS method
create_node
destroy_node
link
unlink
sync
write
truncate
destroy
Last modified 6 years ago Last modified on 2012-09-13T08:30:16Z