mod virtio_blk; mod sdcard; use lazy_static::*; use alloc::sync::Arc; use core::any::Any; pub trait BlockDevice : Send + Sync + Any { fn read_block(&self, block_id: usize, buf: &mut [u8]); fn write_block(&self, block_id: usize, buf: &[u8]); } #[cfg(feature = "board_qemu")] type BlockDeviceImpl = virtio_blk::VirtIOBlock; #[cfg(feature = "board_k210")] type BlockDeviceImpl = sdcard::SDCardWrapper; lazy_static! { pub static ref BLOCK_DEVICE: Arc = Arc::new(BlockDeviceImpl::new()); } #[allow(unused)] pub fn block_device_test() { let block_device = BLOCK_DEVICE.clone(); let mut write_buffer = [0u8; 512]; let mut read_buffer = [0u8; 512]; for i in 0..512 { for byte in write_buffer.iter_mut() { *byte = i as u8; } block_device.write_block(i as usize, &write_buffer); block_device.read_block(i as usize, &mut read_buffer); assert_eq!(write_buffer, read_buffer); } println!("block device test passed!"); }