On Thu, Apr 06, 2023 at 06:56:09PM -0300, Daniel Almeida wrote: > Hi all, this is my first attempt at adding Rust support to the > media subsystem. > > It adds just enough support to write a clone of the virtio-camera > prototype written by my colleague, Dmitry Osipenko, available at [0]. > > Basically, there's support for video_device_register, > v4l2_device_register and for some ioctls in v4l2_ioctl_ops. There is > also some initial vb2 support, alongside some wrappers for some types > found in videodev2.h. > > I wrote a sample Rust driver just to prove that this probes, and > that you get a message on dmesg whenever an ioctl is called. > > As there is no actual implementation for any of the ioctls, this module > can misbehave with some programs. I can work around this in a future > submission. > > Note that this is based on the rust branch, as opposed to rust-next. The > reasoning is simple: I expect this series to just kickstart some > discussion around the subject. Actual upstreaming can come up much > later, at which point I can rebase on the rust branch. Hi Daniel - I don't know if the 'rust branch' is common knowledge but it helped me to know it was this: https://github.com/Rust-for-Linux/linux For what it's worth, I was able to get the V4L2 Rust sample probed pretty easily following the quick start instructions https://docs.kernel.org/rust/quick-start.html Cool to see this working! Deb > > Lastly, the origins of this series trace back to a v4l2 virtIO driver I > was writing in Rust. As the project was eventually shelved for other > reasons, I picked both the virtIO and the v4l2 bindings into their own > patches which I am now in the process of submitting. This is to say that > I tested this code with said driver and CrosVM in the past, and it > worked ok. > > Please let me know your thoughts. > > [0]: https://gitlab.collabora.com/dmitry.osipenko/linux-kernel-rd/-/commit/055a2c322e931a8b388f864f1db81bbdfd525602 > > Daniel Almeida (6): > rust: media: add the media module > rust: media: add initial videodev2.h abstractions > rust: sync: introduce FfiMutex > rust: media: videobuf2: add a videobuf2 abstraction > rust: media: add {video|v4l2}_device_register support > rust: media: add v4l2 rust sample > > rust/bindings/bindings_helper.h | 8 + > rust/kernel/lib.rs | 2 + > rust/kernel/media/mod.rs | 6 + > rust/kernel/media/v4l2/capabilities.rs | 80 ++++ > rust/kernel/media/v4l2/dev.rs | 369 +++++++++++++++ > rust/kernel/media/v4l2/device.rs | 115 +++++ > rust/kernel/media/v4l2/enums.rs | 135 ++++++ > rust/kernel/media/v4l2/format.rs | 178 ++++++++ > rust/kernel/media/v4l2/framesize.rs | 176 +++++++ > rust/kernel/media/v4l2/inputs.rs | 104 +++++ > rust/kernel/media/v4l2/ioctls.rs | 608 +++++++++++++++++++++++++ > rust/kernel/media/v4l2/mmap.rs | 81 ++++ > rust/kernel/media/v4l2/mod.rs | 13 + > rust/kernel/media/videobuf2/core.rs | 552 ++++++++++++++++++++++ > rust/kernel/media/videobuf2/mod.rs | 5 + > rust/kernel/sync.rs | 1 + > rust/kernel/sync/ffi_mutex.rs | 70 +++ > samples/rust/Kconfig | 11 + > samples/rust/Makefile | 1 + > samples/rust/rust_v4l2.rs | 403 ++++++++++++++++ > 20 files changed, 2918 insertions(+) > create mode 100644 rust/kernel/media/mod.rs > create mode 100644 rust/kernel/media/v4l2/capabilities.rs > create mode 100644 rust/kernel/media/v4l2/dev.rs > create mode 100644 rust/kernel/media/v4l2/device.rs > create mode 100644 rust/kernel/media/v4l2/enums.rs > create mode 100644 rust/kernel/media/v4l2/format.rs > create mode 100644 rust/kernel/media/v4l2/framesize.rs > create mode 100644 rust/kernel/media/v4l2/inputs.rs > create mode 100644 rust/kernel/media/v4l2/ioctls.rs > create mode 100644 rust/kernel/media/v4l2/mmap.rs > create mode 100644 rust/kernel/media/v4l2/mod.rs > create mode 100644 rust/kernel/media/videobuf2/core.rs > create mode 100644 rust/kernel/media/videobuf2/mod.rs > create mode 100644 rust/kernel/sync/ffi_mutex.rs > create mode 100644 samples/rust/rust_v4l2.rs > > -- > 2.40.0 >