BiscuitOS 已经支持 DMA 实践环境,开发者可以在 X86 架构下部署,部署逻辑如下:

cd BiscuitOS
make menuconfig

  [*] DIY BiscuitOS/Broiler Hardware  --->
      [*] Support Host CPU Feature Passthrough  --->
      [*] BiscuitOS PCI/PCIe DMA with MSIX Interrupt
  [*] Package
      [*] CACHE  --->
          [*] DMA: DMA Coherent(WB/UC) Memory   --->

make
# 源码目录
cd BiscuitOS/output/linux-X.Y.Z-ARCH/BiscuitOS-IOMMU-PCI-DMA-MSIX-default/
# 下载源码
make download
# 实践
make build

如果是第一次进行实践,那么需要在 QEMU 里安装 DMA 设备,开发者参考如下命令:

# 源码目录
cd BiscuitOS/output/linux-X.Y.Z-ARCH/package/BiscuitOS-PCI-DMA-QEMU-DEVICE-MSIX-default/
# 下载源码
make download

通过上面命令可以获得 DMA 模拟设备的源码,接下来将下载获得源码目录 BiscuitOS-PCI-DMA-QEMU-DEVICE-MSIX-default 拷贝到 QEMU 源码目录下,参考如下命令:

# 源码目录
cd BiscuitOS/output/linux-X.Y.Z-ARCH/qemu-system/qemu-system/
mkdir -p hw/BiscuitOS/
cp BiscuitOS/output/linux-X.Y.Z-ARCH/package/BiscuitOS-PCI-DMA-QEMU-DEVICE-MSIX-default/BiscuitOS-PCI-DMA-QEMU-DEVICE-MSIX-default hw/BiscuitOS/ -rf
# 配置编译逻辑
cd BiscuitOS/output/linux-X.Y.Z-ARCH/qemu-system/qemu-system/hw

vi Makefile.objs
# Add context
devices-dirs-$(CONFIG_SOFTMMU) += BiscuitOS/

vi Kconfig
# Add context
source BiscuitOS/Kconfig

# 配置设备编译逻辑
vi Makefile.objs
cd BiscuitOS/output/linux-X.Y.Z-ARCH/qemu-system/qemu-system/hw/BiscuitOS

# Add context
common-obj-$(CONFIG_BISCUITOS_PCI_DMA_MSIX) += BiscuitOS-PCI-DMA-QEMU-DEVICE-MSIX-default/

vi Kconfig

# Add context
source BiscuitOS-PCI-DMA-QEMU-DEVICE-MSIX-default/Kconfig

# 开启全局编译
cd BiscuitOS/output/linux-X.Y.Z-ARCH/qemu-system/qemu-system/
vi default-configs/i386-softmmu.mak

# Add context
CONFIG_BISCUITOS_PCI_DMA_MSIX=y

vi config-all-devices.mak

# Add context
CONFIG_BISCUITOS_PCI_DMA_MSIX:=$(findstring y,$(CONFIG_BISCUITOS_PCI_DMA_MSIX)y)

上述配置完毕之后,需要重新编译 QEMU,可以参考如下命令:

# 源码目录
cd BiscuitOS/output/linux-X.Y.Z-ARCH/qemu-system/
./RunQEMU.sh -b

可以看到 BiscuitOS 运行之后,使用 lspci 工具看到 DMA 对应的设备 1026:1991, 说明 DMA 模拟设备添加成功,接下来是部署实践案例,参考如下命令:

# 源码目录
cd BiscuitOS/output/linux-X.Y.Z-ARCH/package/BiscuitOS-CACHE-DMA-STREAMING-default/
# 下载源码
make download
# 实践
make build

BiscuitOS-CACHE-DMA-COHERENT-default Source Code on Gitee

进入指定目录之后,使用 “make download” 命令可以下载实践案例使用的源码,然后使用 “make build” 命令可以进行编译、打包并在 BiscuitOS 实践:

BiscuitOS 运行之后,直接运行 RunBiscuitOS.sh 实践脚本,可以运行实践所需的所有命令,从实践可以看出可以使用 DMA 进行搬运,开发者可以直接看到实践案例的结果,提高执行的效率.

图片无法显示,请右键点击新窗口打开图片