[Qemu-devel] How to write a backend receiving routine

2013-08-18 Thread Yang Jin
Hi, all
I'm a beginner with QEMU. I'm trying to write a CAN device and also a
backend.

However while I try to write a backend receiving routine, some thing
confuse me. I hope I can get some help here.

Actually, I try to figure out how backend udp works at first, also a serial
pci acts as a frontend. The functions qemu_set_fd_handler2() and
qemu_chr_add_handlers() are used for backend udp and frontend serial pci
seperatly to register the necessary routines. In the function
main_loop_wait() in main-loop.c will check whether we need to receive some
data, if needed, data will be read from backend.

Following is the question. I change serial_can_receive1()-hw/serial.c which
is registered to test if we need data to return 1 always. So that means we
always need data. In main_loop_wait() which actually call
main_loop_wait()->os_host_main_loop_wait()->select(), I have checked that
before select() called the udp file descriptor has set in rfds. So, if we
send some data to the udp backend, the bit in rfds should be set and
finally the receive routine we register though qemu_chr_add_handlers()
should be called. However, the receiving routine has never been called. I
do not know why?

And then I try to start QEMU with the following commands,
   -serial none  -chardev udp,id=UDPserial,port=3334 -device
pci-serial,chardev=UDPserial
and connect it with "nc -u -l -p 3334". Before I insert the linux driver, I
try to send some data to qemu, the receiving routine still never be called.
After the driver has been inserted, input command "echo test>/dev/ttyS0"
then the receiving routine is called. Why? When input "cat /dev/ttyS0" and
input some characters in host, the receiving routine is also called. I
think this is correct.

So what is the correct routine to receive some data from backend? How does
this work?

Can anyone help me with that. I will appreciate it very much.

Thanks,
Jin Yang


[Qemu-devel] CAN device

2013-06-28 Thread Yang Jin
Hi,
I try to develop a CAN device on QEMU. And I found pci-serial is similar to
CAN.

Untill now, I have some questions about how to use pci-serial on QEMU.
Actually, QEMU use isa-serial as a default serial device. So I try to use
isa-serial firstly.

Some useful information we can get from docs/qdev-device-use.txt. I know
that we should use "-chardev" argument to create a host part, and then use
"-device isa-serial,iobase=IOADDR,irq=IRQ,index=IDX" to start a isa-serial.
I get those arguments from the source file, the following can work.
   "-device isa-serial,chardev=isa0,iobase=0x3f8,irq=4,index=0"
However, when I try to create a host through "-chardev
serial,id=isa0,path=./", error "chardev: opening backend "serial" failed"
occurs. When change it to "-chardev serial,id=isa0,path=/dev/ttyS0", it
works. Now, I donot know what "path" means? Does it have some relation to
the host device? Or it's just a symbol means nothing.

And some questions about pci bus. On docs/qdev-device-use.txt, we get
Example: device i440FX-pcihost is on the root bus, and provides a PCI
bus named pci.0.  To put a FOO device into its slot 4, use -device
FOO,bus=/i440FX-pcihost/pci.0,addr=4.  The abbreviated form bus=pci.0
also works as long as the bus name is unique.
So, how can we get the name of the root device which we use now?

I searched that for some days, but doesnot get some usefull information.

Thanks,
Jin yang.


Re: [Qemu-devel] CAN device

2013-06-30 Thread Yang Jin
Hi,
Thanks, Andreas. It really help me a lot.

When I man qemu, I found "path specifies the name of the serial device to
open". Does that mean I should have a real serial device or I cannot test
it? Can I test it just in a virtual environment? When I try to open a
/dev/ttyS0 through "cat /dev/ttyS0", error "Input/output error". I google
it, and found many reasons can cause that error. How should I test it?

Thanks,
Jin Yang.




2013/6/28 Andreas Färber 

> Hi,
>
> Am 28.06.2013 14:19, schrieb Yang Jin:
> > I try to develop a CAN device on QEMU. And I found pci-serial is similar
> > to CAN.
> >
> > Untill now, I have some questions about how to use pci-serial on QEMU.
> > Actually, QEMU use isa-serial as a default serial device. So I try to
> > use isa-serial firstly.
> >
> > Some useful information we can get from docs/qdev-device-use.txt. I know
> > that we should use "-chardev" argument to create a host part, and then
> > use "-device isa-serial,iobase=IOADDR,irq=IRQ,index=IDX" to start a
> > isa-serial. I get those arguments from the source file, the following
> > can work.
> >"-device isa-serial,chardev=isa0,iobase=0x3f8,irq=4,index=0"
> > However, when I try to create a host through "-chardev
> > serial,id=isa0,path=./", error "chardev: opening backend "serial"
> > failed" occurs. When change it to "-chardev
> > serial,id=isa0,path=/dev/ttyS0", it works. Now, I donot know what "path"
> > means? Does it have some relation to the host device? Or it's just a
> > symbol means nothing.
>
> Searching man qemu for "chardev serial" should answer that question. :)
> There you will also find alternative chardev backends you can use.
>
> > And some questions about pci bus. On docs/qdev-device-use.txt, we get
> > Example: device i440FX-pcihost is on the root bus, and provides a PCI
> > bus named pci.0.  To put a FOO device into its slot 4, use -device
> > FOO,bus=/i440FX-pcihost/pci.0,addr=4.  The abbreviated form bus=pci.0
> > also works as long as the bus name is unique.
> > So, how can we get the name of the root device which we use now?
>
> You can browse the QOM hierarchy using the ./QMP/qom-list script and an
> appropriate -qmp option (e.g. unix:./qmp-sock,server,nowait).
>
> But leaving out the bus= option should work fine just as well.
>
> Regards,
> Andreas
>
> > I searched that for some days, but doesnot get some usefull information.
> >
> > Thanks,
> > Jin yang.
>
> --
> SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
> GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
>