qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH V4 0/7] CAN bus support for QEMU (SJA1000 PCI s


From: Deniz Eren
Subject: Re: [Qemu-devel] [PATCH V4 0/7] CAN bus support for QEMU (SJA1000 PCI so far)
Date: Wed, 31 Jan 2018 04:07:34 +0000 (GMT)

Hi Paolo,



Thank you for the correction! Greatly appreciated and it worked.



I tested all combinations of Linux host using virtual Socket-CAN and pcm3680 
and mioe3680 client QEmu Linux environments using Linux Socket-CAN drivers, 
sending and receiving from each-other (all combinations; host-to-client, 
client-to-client, etc).


All tests passed!



Details:



Setup virtual Socket-CAN from host Linux system:

    $ sudo ip link add dev vcan0 type vcan
    $ sudo ip link set up vcan0
    $ sudo ip link add dev vcan1 type vcan
    $ sudo ip link set up vcan1

    $ sudo ip link set vcan0 txqueuelen 15
    $ sudo ip link set vcan1 txqueuelen 15


Starting 2 x QEmu sessions from host Linux; one for pcm3680 and other for 
mioe3680:

    $ ./qemu-local/bin/qemu-system-i386 -hda sdd2gb-uno1483-16.04-2.0-dev.img -boot 
d -k en-us -object can-bus,id=canbus0 -object can-bus,id=canbus1 -object 
can-host-socketcan,id=canhost0,canbus=canbus0,if=vcan0 -object 
can-host-socketcan,id=canhost1,canbus=canbus1,if=vcan1 -device 
mioe3680_pci,canbus0=canbus0,canbus1=canbus1 -m size=2048 -netdev user,id=user.0 
-device e1000,netdev=user.0 -redir tcp:5022::22 -enable-kvm &

    $ ./qemu-local/bin/qemu-system-i386 -hda sdd2gb-uno1483-16.04-2.0-dev-copy.img 
-boot d -k en-us -object can-bus,id=canbus0 -object can-bus,id=canbus1 -object 
can-host-socketcan,id=canhost0,canbus=canbus0,if=vcan0 -object 
can-host-socketcan,id=canhost1,canbus=canbus1,if=vcan1 -device 
pcm3680_pci,canbus0=canbus0,canbus1=canbus1 -m size=2048 -netdev user,id=user.0 
-device e1000,netdev=user.0 -redir tcp:6022::22 -enable-kvm &

    
Login to client QEmu instances and setup CAN networks:

    $ ssh -Yp5022 address@hidden

    $ sudo ip link set can0 type can bitrate 250000
    $ sudo ip link set can1 type can bitrate 250000
    $ sudo ip link set up can0
    $ sudo ip link set up can1
    $ sudo ip link set can0 txqueuelen 15
    $ sudo ip link set can1 txqueuelen 15

    $ ssh -Yp6022 address@hidden

    $ ... similarly ...

Then tried all combinations of "candump vcan0/1" from host and "candump can0/1" 
from clients for transmission and reception to and from host to client and client to client.

user@:~$ candump can1
  can1  123   [8]  11 22 33 44 55 66 77 88
  can1  123   [8]  11 22 33 44 55 66 77 88
  can1  123   [8]  11 22 33 44 55 66 77 88

host:$ candump vcan0
  vcan0  123   [8]  11 22 33 44 55 66 77 88
  vcan0  123   [8]  11 22 33 44 55 66 77 88
  vcan0  123   [8]  11 22 33 44 55 66 77 88
  vcan0  123   [8]  11 22 33 44 55 66 77 88

All successful.







Best regards,
Deniz

On Jan 31, 2018, at 12:10 PM, Paolo Bonzini <address@hidden> wrote:


On 30/01/2018 20:08, Paolo Bonzini wrote:

On 30/01/2018 19:13, Deniz Eren wrote:
Hi Pavel, Paolo,


I tried to rerun my environment to test however it seems the interface has 
changed a little and my standard program options cause complaints. 
Unfortunately I don’t have too much time to dig through at the moment.


My standard startup command is:


$ ./qemu-local/bin/qemu-system-i386 -hda sdd2gb-uno1483-16.04-2.0-dev.img -boot d 
-k en-us -device 
mioe3680_pci,canbus1=canbus0,host1=vcan0,canbus2=canbus1,host2=vcan1 -m size=2048 
-netdev user,id=user.0 -device e1000,netdev=user.0 -redir tcp:5022::22 -enable-kvm 
&


Yep, it's now like this:


./qemu-local/bin/qemu-system-i386 \
-hda sdd2gb-uno1483-16.04-2.0-dev.img -boot d -k en-us \
-object can-bus,id=canbus0 \
-object can-bus,id=canbus1 \
-object can-host-socketcan,id=canhost0,canbus=canbus0,ifname=vcan0 \
-object can-host-socketcan,id=canhost1,canbus=canbus1,ifname=vcan1 \
-device mioe3680_pci,canbus0=canbus0,canbus1=canbus1 \
-m size=2048 -netdev user,id=user.0 -device e1000,netdev=user.0 \
-redir tcp:5022::22 -enable-kvm

Sorry, all "ifname" are "if".

Paolo


Thanks,


Paolo








Best regards,
Deniz


Sent from my iPhone


Deniz Eren
+61 400 307 762


On 31 Jan 2018, at 9:12 am, Pavel Pisa <address@hidden> wrote:


Hello Paolo,


thanks much for conversion to acceptable QOM model.


On Tuesday 30 of January 2018 15:15:22 Paolo Bonzini wrote:
On 25/01/2018 22:33, Pavel Pisa wrote:
Hello Paolo,


thanks for suggestions. I understand and fully agree with your
request to switch to QOM. I have succeed with that for CAN devices
some time ago. It worth to be done for the rest of the objects
but I fear that I do not find time to complete QOMification
in reasonable future. Contributions/suggestions from other
are welcomed. I can look for students for GSoC at our university
or under other funding.


Please take a look at branch can-pci-qom of github.com/bonzini/qemu.git.
Apart from QOMification of the backend include, I simplified the IRQ
handling in can_kvaser_pci (fixing bugs too I think), and removed an
unnecessary mutex. I also moved the files to net/can and hw/net/can so
that in the future Jason (networking maintainer) can take care of pull
requests.


I might have broken something, and the top commit in particular is
completely untested.


I have run basic test with Linux kernel on both sides
for one kavser_pci card on guest side and vcan (no real interface)
on host side.


Mesages exchange tests passed and looks OK.


I have used next parameters


-object can-bus,id=canbus0 \
-device kvaser_pci,canbus=canbus0 \
-object can-host-socketcan,if=can0,canbus=canbus0,id=canbus0-socketcan


The id parameter is required for "can-host-socketcan" object.
Else next error is printed


qemu-system-x86_64: -object can-host-socketcan,if=can0,canbus=canbus0: 
Parameter 'id' is missing


If "-object can-bus,id=canbus0" is missing then next error is reported


qemu-system-x86_64: -object 
can-host-socketcan,if=can0,canbus=canbus0,id=canbus0-socketcan: Device 
'canbus0' not found


I have inspected through monitor the state of objects


(qemu) qom-list /objects
canbus0-socketcan (child<can-host-socketcan>)
type (string)
canbus0 (child<can-bus>)


(qemu) info qom-tree
/machine (pc-i440fx-2.12-machine)
...
/peripheral-anon (container)
/device[1] (kvaser_pci)
/bus master[0] (qemu:memory-region)
/kvaser_pci-xilinx[0] (qemu:memory-region)
/kvaser_pci-s5920[0] (qemu:memory-region)
/kvaser_pci-sja[0] (qemu:memory-region)
/bus master container[0] (qemu:memory-region)
...




(qemu) qom-list /objects
canbus0-socketcan (child<can-host-socketcan>)
type (string)
canbus0 (child<can-bus>)


(qemu) qom-list /machine/peripheral-anon/device[1]
bus master container[0] (child<qemu:memory-region>)
canbus (link<can-bus>)
rombar (uint32)
hotpluggable (bool)
x-pcie-lnksta-dllla (bool)
kvaser_pci-sja[0] (child<qemu:memory-region>)
multifunction (bool)
hotplugged (bool)
parent_bus (link<bus>)
romfile (str)
kvaser_pci-s5920[0] (child<qemu:memory-region>)
x-pcie-extcap-init (bool)
command_serr_enable (bool)
addr (int32)
type (string)
legacy-addr (str)
kvaser_pci-xilinx[0] (child<qemu:memory-region>)
realized (bool)
bus master[0] (child<qemu:memory-region>)


From the user point of view, it would be nice if "can-bus"
can be populated when required automatically.


I am not sure, but may it be that it would worth to
push can-bus objects under some category/specific
container. The path /objects is quite wide.
Into something like /object/can-bus or /net/can.


But generally thanks much, the progress you have made
in one day is really great. I hope that others check
your branch. I have pushed your unmodified version into
"can-pci-qom" branch of my repo


https://gitlab.fel.cvut.cz/canbus/qemu-canbus/tree/can-pci-qom



It would be great if others can check that everything
works in their setup. I think that then it can be pushed
into mainline and some usability improvements can be
done/experiment with later.


Thanks much,




Pavel Pisa






reply via email to

[Prev in Thread] Current Thread [Next in Thread]