linux – 如何在QEMU源代码中添加新设备?

前端之家收集整理的这篇文章主要介绍了linux – 如何在QEMU源代码中添加新设备?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用QOM方法在qemu中模拟/添加新设备的步骤方法是什么?

DeviceState / BusState和其他属性的变化是什么以及在哪里?

解决方法

edu in-tree教育PCI设备

> https://github.com/qemu/qemu/blob/v2.7.0/hw/misc/edu.c
> https://github.com/qemu/qemu/blob/v2.7.0/docs/specs/edu.txt

它很容易理解和记录良好,所以我建议你研究它.

它暴露了最小的PCI设备,具有基本IO,中断生成和DMA.

我已经编写了一个最小的Linux内核模块userland测试来使用它:

> https://github.com/cirosantilli/linux-kernel-module-cheat/blob/6788a577c394a2fc512d8f3df0806d84dc09f355/rootfs_overlay/pci.sh
> https://github.com/cirosantilli/linux-kernel-module-cheat/blob/6788a577c394a2fc512d8f3df0806d84dc09f355/kernel_module/pci.c

最小的PCI设备

我将edu最小化到QEMU前叉的四分之一:https://github.com/cirosantilli/qemu/blob/22e7e210d6fbe54c35a5ae32450a4419df25a13b/hw/misc/lkmc_pci_min.c无DMA.

内核驱动程序:https://github.com/cirosantilli/linux-kernel-module-cheat/blob/1cd55ebf53542208f7a614a856066123b93d303d/kernel_module/pci_min.c

我的Buildroot包装器已经将QEMU fork与子模块集成,只需克隆和./run.

ARM平台设备TYPE_SYS_BUS_DEVICE

SoC-land烘焙芯片中的大多数器件而不是PCI,这是一个最小的可运行示例:

> QEMU分叉:

>设备https://github.com/cirosantilli/qemu/blob/144ea94d710c666babd06ed733007377e132ed4a/hw/misc/lkmc_platform_device.c
>将设备插入-M versatilepb:https://github.com/cirosantilli/qemu/blob/144ea94d710c666babd06ed733007377e132ed4a/hw/arm/versatilepb.c#L302使用sysbus_create_simple,它需要TYPE_SYS_BUS_DEVICE类型的设备.

> kernel module:https://github.com/cirosantilli/linux-kernel-module-cheat/blob/05fa0105eaccf37d6a675f9b2bae833fd78d4270/kernel_module/platform_device.c在探测器上写入内存以测试出来,这也会生成一个IRQ.
> Linux多功能DTS补丁:https://github.com/cirosantilli/linux/blob/361bb623671a52a36a077a6dd45843389a687a33/arch/arm/boot/dts/versatile-pb.dts#L42

>通知内核寄存器和IRQ所在的位置,并匹配QEMU的versatilepb.c中的参数.
> compatible匹配内核模块中的platform_driver.name,并通知内核哪个模块将处理此设备.
>使用-dtb传递给QEMU的固件

带有DTC修改的Linux fork是Buildroot包装器repo的子模块,所以只需克隆和./run -a arm.

树外设备

我问是否可以在How to create out-of-tree QEMU devices?制作树外设备,但它看起来不像.

原文链接:https://www.f2er.com/linux/394397.html

猜你在找的Linux相关文章