== UDF file system server == === 1 Current status === ||= FS type =||= Reading =||= Writing =|| ||UDF Plain||+/-||-|| ||DVD Video||+||N/A|| ||Blu-Ray Video||-||N/A|| === 2 TODO plan * Complete reading UDF plain disks * Complete and test reading Blu-ray disks * Complete support big-endian archs * Implement initial writing support for UDF plain disks === 3 How to test === ==== 3.1 Download sources from my branch ==== {{{ bzr branch lp:~medvedeva-julia/helenos/udf helenos }}} ==== 3.2 Compile sources ==== {{{ cd helenos make PROFILE=ia32 }}} ==== 3.3 Create UDF disk image under Linux ==== To create UDF image under Linux you need to install package with [http://sourceforge.net/projects/linux-udf/ UDF utilities]. For example in Arch it's [http://aur.archlinux.org/packages.php?K=udftools 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.4 Mount udf disk image under Linux ==== You can mount the UDF image (from step 3.3) 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.5 Boot HelenOS with user disk image ==== To boot HelenOS run QEMU: {{{ qemu-system-i386 -m 512 -boot d -hda udf.img -cdrom image.iso }}} `udf.img` is the UDF disk image ==== 3.6 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 || read allocator for next sequence || || || sorting of allocators || udf_allocator_sort || udf_file || done || too simple || || || read file by position || udf_read_file || udf_ops || done || read file saved in allocator || || || read directory || udf_get_fid || udf_ops || in progress || rewrite for fragmented fid || || 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 || in progress || || || 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 || in progress || || || 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 || ||