On Tue, Oct 28, 2025 at 11:18 AM chenmiao <[email protected]> wrote: > > We have implemented I2C and the first GPIO device in Rust for QEMU. > Additionally, in the respective patches, we have shared our insights and > experiences regarding the use of Rust for device modeling within QEMU. > > 1. The first patch implements the BusState for the I2CBus infrastructure. > 2. The second patch implements the I2CBus and I2CSlave infrastructure, along > with a discussion of the challenges encountered during the implementation. > 3. The third patch moves the struct definition of the PCF8574 to the > corresponding header file. > 4. The fourth patch provides a set of necessary helper functions for the > PCF8574 > GPIO device. > 5. The fifth patch implements the PCF8574 GPIO device, along with a discussion > of the issues and considerations addressed during the implementation. > > Regarding this series of patches, we have found that Rust for QEMU is indeed > still not mature enough and requires continuous iteration. Additionally, the > lack of basic documentation also needs to be addressed. In this regard, I hope > our team(HUST OpenAtom Open Source Club) can contribute to the documentation > efforts for Rust for QEMU. > > Link: https://groups.google.com/g/hust-os-kernel-patches/c/z7vHWg3xvDc > > Signed-off-by: Chao Liu <[email protected]> > Signed-off-by: Chen Miao <[email protected]>
Hi! Are you going to send v3? Thanks, Paolo > --- > Changes in V2: > - According to Zhao's suggestions, some modifications were made to the first > and second patches respectively, such as changing some bus names, adding > some Safety comments, and adding callbacks for I2CSlave. > - While we were making changes to the first PATCH, Chao Liu pointed out that > the realize function was unnecessary in the bus. After discussion, we > removed the bus::realize function. Since no other components are currently > using the bus, we added a TODO comment for clarification. > > chenmiao (5): > rust/hw/core: Add the BusState of rust version > rust/hw/core: Add rust bindings/funcs for i2c bus > hw/gpio: Move the pcf8574 struct to header > rust/hw/core: Provide some interfaces for the GPIO device > rust/hw/gpio: Add the the first gpio device pcf8574 > > hw/gpio/Kconfig | 5 + > hw/gpio/meson.build | 2 +- > hw/gpio/pcf8574.c | 32 -- > include/hw/gpio/pcf8574.h | 36 +++ > rust/Cargo.lock | 21 +- > rust/Cargo.toml | 1 + > rust/hw/Kconfig | 1 + > rust/hw/core/meson.build | 2 + > rust/hw/core/src/bus.rs | 44 +++ > rust/hw/core/src/i2c.rs | 421 +++++++++++++++++++++++++++ > rust/hw/core/src/irq.rs | 6 +- > rust/hw/core/src/lib.rs | 6 + > rust/hw/core/src/qdev.rs | 12 +- > rust/hw/core/wrapper.h | 1 + > rust/hw/gpio/Kconfig | 2 + > rust/hw/gpio/meson.build | 1 + > rust/hw/gpio/pcf8574/Cargo.toml | 31 ++ > rust/hw/gpio/pcf8574/build.rs | 1 + > rust/hw/gpio/pcf8574/meson.build | 50 ++++ > rust/hw/gpio/pcf8574/src/bindings.rs | 29 ++ > rust/hw/gpio/pcf8574/src/device.rs | 180 ++++++++++++ > rust/hw/gpio/pcf8574/src/lib.rs | 4 + > rust/hw/gpio/pcf8574/wrapper.h | 51 ++++ > rust/hw/meson.build | 1 + > 24 files changed, 902 insertions(+), 38 deletions(-) > create mode 100644 rust/hw/core/src/bus.rs > create mode 100644 rust/hw/core/src/i2c.rs > create mode 100644 rust/hw/gpio/Kconfig > create mode 100644 rust/hw/gpio/meson.build > create mode 100644 rust/hw/gpio/pcf8574/Cargo.toml > create mode 120000 rust/hw/gpio/pcf8574/build.rs > create mode 100644 rust/hw/gpio/pcf8574/meson.build > create mode 100644 rust/hw/gpio/pcf8574/src/bindings.rs > create mode 100644 rust/hw/gpio/pcf8574/src/device.rs > create mode 100644 rust/hw/gpio/pcf8574/src/lib.rs > create mode 100644 rust/hw/gpio/pcf8574/wrapper.h > > -- > 2.43.0 >
