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 |