我们如何从主机到Android仿真器仿真虚拟CAN设备?

时间:2019-06-03 22:00:13

标签: android driver qemu can-bus

我的主机Linux中有虚拟CAN(vcan0vcan1)。我想让它们在Android虚拟设备(AVD)中可用。我正在使用Androi Studio中的AVD管理器创建AVD。但是,我似乎无法完成这项工作。

我通过以下命令在主机Linux中创建虚拟CAN设备:

modprobe can
modprobe can_raw
modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
ip link show vcan0

以上命令来自SocketCAN wiki

我尝试通过以下命令在模拟的android中模拟vcan0,但无法正常工作:

~/Android/Sdk/tools/emulator -avd Soham_Device_API_25 -qemu -device can_pci,canbus=canbus0,host=vcan0

 ~/Android/Sdk/tools/emulator -avd Soham_Device_API_25 -qemu -device -device mioe3680_pci,canbus1=canbus0,host1=vcan0

和许多其他。但是它们都不起作用,并抛出诸如'can_pci' is not a valid device model nameDevice 'vcan0' not found之类的错误消息。但是,我已经通过测试应用程序检查了vcan0vcan1在我的主机Linux中可以工作。有人知道如何在模拟的Android中启用此vcan0吗?

1 个答案:

答案 0 :(得分:1)

如果要从来宾系统访问主机系统的实际或虚拟CAN总线,则可以使用QEMU SJA1000 CAN控制器仿真支持。

该支持已被mainlinen集成到2.12 QEMU版本中。我没有使用Android官方开发环境的经验,所以不知道它是否使用了最新的QEMU版本。

基本使用说明:https://github.com/qemu/qemu/blob/master/docs/can.txt

要求给定的目标系统支持PCI总线,该总线允许将带有SJA1000控制器的某些支持的板映射到目标中。资源可用时,可以实现对平台总线映射的SJA1000或其他控制器仿真的支持。

根据您问题中的示例,我希望如此

 ~/Android/Sdk/tools/emulator -avd Soham_Device_API_25 -qemu \
      -object can-bus,id=canbus0 \
      -object can-host-socketcan,id=canhost0,if=vcan0,canbus=canbus0 \
      -device kvaser_pci,canbus=canbus0 \

可以工作,但是我不确定〜/ Android / Sdk / tools / emulator是什么,以及如何将参数传递给真实的QEMU。但是它可能通过了,因为它报告参数不正确。您尝试使用仅用于开发的旧虚拟can_pci电路板模型,并且在更改为接受主线所需的QEMU对象模型后,QEMU参数的语法已发生重大变化。

基于QEMU和驱动程序的基于开放源代码开放硬件CTU CAN FD内核仿真的CAN FD总线和控制器仿真的支持正在进入主线,但由于缺少维护人员审查,驱动程序需要等待一年半。 QEMU修补程序现在进行了审查。现在http://canbus.pages.fel.cvut.cz/

在项目页面上查找实际代码