When I wrote some DMA buffers, I just used ``` struct Foo { buffer: [u8; 123] } ``` and possibly some pointer casting to pass around references where I needed them. (UnsafeCell, or some volatile version thereof, is probably the canonical way to do it)