linux-udf
Seems to be the project you're looking for, linux-udf project. The project is mentioned in the Linux Kernel's udf.txt file.
Looking through their sourceforge site the download is called udftools. Searching within my Fedora 19's package repository I found that exact package.
$ yum search udf | grep "^udf"
udftools.x86_64 : Linux UDF Filesystem userspace utilities
udftools-debuginfo.x86_64 : Debug information for package udftools
Contents of the RPM.
$ rpm -ql udftools
/usr/bin/cdrwtool
/usr/bin/mkudffs
/usr/bin/pktsetup
/usr/bin/udffsck
/usr/bin/wrudf
/usr/share/doc/udftools-1.0.0b3
/usr/share/doc/udftools-1.0.0b3/AUTHORS
/usr/share/doc/udftools-1.0.0b3/COPYING
/usr/share/doc/udftools-1.0.0b3/ChangeLog
/usr/share/man/man1/cdrwtool.1.gz
/usr/share/man/man8/mkudffs.8.gz
/usr/share/man/man8/pktsetup.8.gz
Looking through the tools listed above.
cdrwtool
The cdwrtool command can perform certain actions on a CD-R, CD-RW, or DVD-R device. Mainly these are blanking the media, formating it for use with the packet-cd device, and applying an UDF filesystem.
mkudffs
mkudffs is used to create a UDF filesystem on a device (usually a disk). device is the special file corresponding to the device (e.g /dev/hdX). blocks-count is the number of blocks on the device. If omitted, mkudffs automagically figures the file system size.
pktsetup
Pktsetup is used to associate packet devices with CD or DVD block devices, so that the packet device can then be mounted and potentially used as a read/write filesystem. This requires kernel support for the packet device, and the UDF filesystem.
See: http://packet-cd.sourceforge.net/ ⟨⟩
Formatting a UDF DVD
This tutorial shows how you can format a DVD using UDF, titled: How to format a DVD with UDF.
Example
$ sudo mkudffs --media-type=dvd /dev/dvd
trying to change type of multiple extents
$ sudo dvd+rw-format /dev/dvd
* DVD±RW/-RAM format utility by , version 6.1.
* 4.7GB DVD+RW media detected.
* formatting 9.5\
$ sudo mkudffs /dev/dvd
start=0, blocks=16, type=RESERVED
start=16, blocks=3, type=VRS
start=19, blocks=237, type=USPACE
start=256, blocks=1, type=ANCHOR
start=257, blocks=16, type=PVDS
start=273, blocks=1, type=LVID
start=274, blocks=2294573, type=PSPACE
start=2294847, blocks=1, type=ANCHOR
start=2294848, blocks=239, type=USPACE
start=2295087, blocks=16, type=RVDS
start=2295103, blocks=1, type=ANCHOR
Determine media's type
$ sudo dvd+rw-mediainfo /dev/dvd
Making an ISO
I think you're too quickly dismissing genisoimage. If you look through the man page for it there is this switch:
-udf Include UDF filesystem support in the generated filesystem image.
UDF support is currently in alpha status and for this reason, it is
not possible to create UDF-only images. UDF data structures are
currently coupled to the Joliet structures, so there are many
pitfalls with the current implementation. There is no UID/GID
support, there is no POSIX permission support, there is no support
for symlinks. Note that UDF wastes the space from sector ~20 to
sector 256 at the beginning of the disc in addition to the space
needed for real UDF data structures.
Example
$ genisoimage -udf -o image.iso R/
I: -input-charset not specified, using utf-8 (detected in locale settings)
Using SPLIT000.HTM;1 for R/x86_64-redhat-linux-gnu-library/2.13/plyr/html/splitter_a.html (splitter_d.html)
Using LIST_000.HTM;1 for R/x86_64-redhat-linux-gnu-library/2.13/plyr/html/list_to_vector.html (list_to_dataframe.html)
Using INDEX000.HTM;1 for R/x86_64-redhat-linux-gnu-library/2.13/plyr/html/indexed_array.html (indexed_df.html)
...
...
Using TEST_002.R;1 for R/x86_64-redhat-linux-gnu-library/2.13/plyr/tests/test-split-labels.r (test-split-data-frame.r)
Total translation table size: 0
Total rockridge attributes bytes: 0
Total directory bytes: 24576
Path table size(bytes): 134
Max brk space used 43000
1141 extents written (2 MB)
Now if we check the resulting .iso file.
$ file im.iso
image.iso: # UDF filesystem data (version 1.5) 'CDROM '
To confirm that the image.iso is truly a UDF filesystem within we can mount it just to double check.
$ sudo mount -o loop image.iso /mnt/
mount: /dev/loop0 is write-protected, mounting read-only
Now if see how it was mounted via the mount command.
$ mount | grep '/mnt'
/home/saml/image.iso on /mnt type udf (ro,relatime,utf8)
References