Version 8 (modified by 12 years ago) ( diff ) | ,
---|
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 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.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 |
5 Unsupported functions dashboard
VFS method |
---|
node_open |
create_node |
destroy_node |
link |
unlink |
unmounted |
sync |
write |
truncate |
destroy |