我的主机Linux中有虚拟CAN(vcan0
,vcan1
)。我想让它们在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 name
和Device 'vcan0' not found
之类的错误消息。但是,我已经通过测试应用程序检查了vcan0
和vcan1
在我的主机Linux中可以工作。有人知道如何在模拟的Android中启用此vcan0
吗?
答案 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/
在项目页面上查找实际代码