* [Qemu-devel] hw/arm: add Lego NXT board @ 2014-07-13 14:20 Alexander Graf 2014-07-14 11:23 ` Peter Crosthwaite 2014-07-14 11:46 ` Paolo Bonzini 0 siblings, 2 replies; 14+ messages in thread From: Alexander Graf @ 2014-07-13 14:20 UTC (permalink / raw) To: qemu-devel; +Cc: peter.maydell Hi, I developed a software in the loop simulator for the Lego Mindstorms NXT brick. It uses the Qemu ARM emulator to run the Robot's Firmware. I plan to release the simulator as an open source project. Now, I wonder if it makes sense to integrate the Qemu board implementation back into Qemu mainline or simply maintain it as an external set of patches. The problem is that the qemu board I designed is not self-contained. It allows the firmware to read/write IO memory in order to read back sensor values from the simulated environment and to control actuators. The environment simulator is an external program which is connected to several qemu instances via posix named pipes using a simple communication protocol. Without pipe interaction the emulator can still be used to debug NXT firmware images without sensor/actuator interaction. I'm happy to prepare a patch, but do you think it is of any value to integrate code that is not 100% self contained? Best Regards Alexander ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-13 14:20 [Qemu-devel] hw/arm: add Lego NXT board Alexander Graf @ 2014-07-14 11:23 ` Peter Crosthwaite 2014-07-14 11:46 ` Paolo Bonzini 1 sibling, 0 replies; 14+ messages in thread From: Peter Crosthwaite @ 2014-07-14 11:23 UTC (permalink / raw) To: Alexander Graf; +Cc: Peter Maydell, qemu-devel@nongnu.org Developers On Mon, Jul 14, 2014 at 12:20 AM, Alexander Graf <alex@antistatix.de> wrote: > Hi, > > I developed a software in the loop simulator for the Lego Mindstorms NXT > brick. It uses the Qemu ARM emulator to run the Robot's Firmware. I plan to > release the simulator as an open source project. Now, I wonder if it makes > sense to integrate the Qemu board implementation back into Qemu mainline or > simply maintain it as an external set of patches. > > The problem is that the qemu board I designed is not self-contained. It > allows the firmware to read/write IO memory in order to read back sensor > values from the simulated environment and to control actuators. The > environment simulator is an external program which is connected to several > qemu instances via posix named pipes using a simple communication protocol. > Without pipe interaction the emulator can still be used to debug NXT > firmware images without sensor/actuator interaction. > Sounds like self contained functionality to me :) People have gone-to-list with less. > I'm happy to prepare a patch, but do you think it is of any value to > integrate code that is not 100% self contained? > Many first-round series are not self contained and tend be not much more that "boot the bare minimum software and lets add I/O features later". Regards, Peter > Best Regards > Alexander > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-13 14:20 [Qemu-devel] hw/arm: add Lego NXT board Alexander Graf 2014-07-14 11:23 ` Peter Crosthwaite @ 2014-07-14 11:46 ` Paolo Bonzini 2014-07-14 18:09 ` Alexander Graf 1 sibling, 1 reply; 14+ messages in thread From: Paolo Bonzini @ 2014-07-14 11:46 UTC (permalink / raw) To: Alexander Graf, qemu-devel; +Cc: peter.maydell Il 13/07/2014 16:20, Alexander Graf ha scritto: > > The problem is that the qemu board I designed is not self-contained. It > allows the firmware to read/write IO memory in order to read back sensor > values from the simulated environment and to control actuators. The > environment simulator is an external program which is connected to > several qemu instances via posix named pipes using a simple > communication protocol. Without pipe interaction the emulator can still > be used to debug NXT firmware images without sensor/actuator interaction. What does your protocol look like, and what kind of bus do the actual sensors and actuators use? If it is I2C or SPI, having generic i2c-over-chardev or spi-over-chardev protocols and devices would be a nice addition to QEMU. Paolo ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-14 11:46 ` Paolo Bonzini @ 2014-07-14 18:09 ` Alexander Graf 2014-07-14 20:37 ` Paolo Bonzini 0 siblings, 1 reply; 14+ messages in thread From: Alexander Graf @ 2014-07-14 18:09 UTC (permalink / raw) To: Paolo Bonzini, qemu-devel; +Cc: peter.maydell On 07/14/2014 01:46 PM, Paolo Bonzini wrote: > Il 13/07/2014 16:20, Alexander Graf ha scritto: >> The >> environment simulator is an external program which is connected to >> several qemu instances via posix named pipes using a simple >> communication protocol. Without pipe interaction the emulator can still >> be used to debug NXT firmware images without sensor/actuator interaction. > > What does your protocol look like, and what kind of bus do the actual > sensors and actuators use? > > If it is I2C or SPI, having generic i2c-over-chardev or spi-over-chardev > protocols and devices would be a nice addition to QEMU. The actual sensor hardware is not emulated. This was not required for my demand to inject sonsor values. I use an abstraction over the sensor hardware using IO memory. My firmware is something like: uint32_t readUltrasonicSensor() { #ifdef QEMU_SIMULATION_IMAGE // This triggers pipe communication in Qemu // No hardware emulation return SOME_IO_MEMORY_REGISTER_SPECIFIC_FOR_THE_SENSOR; #else // do the actual I2C bus transaction to read the value #endif } So the protocol basically allows to forward read and write accesses on IO memory to processes outside of Qemu. My protocol uses two named pipes as transport. One from Qemu to an outside process and one back into Qemu. It is a binary protocol with basically three messages: get: request: REQUEST_GET | uint16_t sequence # | uint16_t requested register response: uint16_t sequence # | uint32_t register content set: request: REQUEST_SET | uint16_t sequence # | uint16_t register | uint32_t register value response: uint16_t sequence # sync tick: request: REQUEST_TICK | uint16_t sequence # response: uint16_t sequence # Get and set transactions are triggered by Qemu on an IO memory read operation or write operation respectively. The pipe communication blocks Qemu until a value is available/the value was published. The sync tick operation is to tell the remote process that the system tick timer interrupt has occured. (Another requirement for my SIL simulator.) For a generic memory-io-over-chardev device this could be removed. In addition for a truly generic implementation the memory access size (byte, word, ... access) needs to be integrated into the protocol. I like the *-over-chardev idea. This could be a benefit for people who want to couple simulators or test oracles for embedded system tests or in general to other software in a simple way. Regards Alexander ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-14 18:09 ` Alexander Graf @ 2014-07-14 20:37 ` Paolo Bonzini 2014-07-14 21:10 ` Alexander Graf 0 siblings, 1 reply; 14+ messages in thread From: Paolo Bonzini @ 2014-07-14 20:37 UTC (permalink / raw) To: Alexander Graf, qemu-devel; +Cc: peter.maydell Il 14/07/2014 20:09, Alexander Graf ha scritto: > So the protocol basically allows to forward read and write accesses on > IO memory to processes outside of Qemu. > > Get and set transactions are triggered by Qemu on an IO memory read > operation or write operation respectively. The pipe communication blocks > Qemu until a value is available/the value was published. The obvious thing to consider is whether this could be used to circumvent the GPL. I think a generic memory-mapped I/O device interface is not a good idea in this respect, also because it's hard to get it right. But i2c is simple enough, and there are so many devices with a 4-page datasheet, that I think it would be acceptable. You could also write an i2c passthrough chardev backend that connects to /dev/i2c* and lets the guest access slaves in the host. Paolo > I like the *-over-chardev idea. This could be a benefit for people who > want to couple simulators or test oracles for embedded system tests or > in general to other software in a simple way. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-14 20:37 ` Paolo Bonzini @ 2014-07-14 21:10 ` Alexander Graf 2014-07-14 22:48 ` Peter Maydell 0 siblings, 1 reply; 14+ messages in thread From: Alexander Graf @ 2014-07-14 21:10 UTC (permalink / raw) To: Paolo Bonzini, qemu-devel; +Cc: peter.maydell On 07/14/2014 10:37 PM, Paolo Bonzini wrote:> The obvious thing to consider is whether this could be used to > circumvent the GPL. > > I think a generic memory-mapped I/O device interface is not a good idea > in this respect, also because it's hard to get it right. Okay, if this is a concern I will have to keep my changes off the mainline as it is a required feature. > But i2c is > simple enough, and there are so many devices with a 4-page datasheet, > that I think it would be acceptable. You could also write an i2c > passthrough chardev backend that connects to /dev/i2c* and lets the > guest access slaves in the host. My interest is to fake sensor values for the guest and not to connect anything to real hardware. I think I misinterpreted your "chardev". To clarify: My guest is a bare metal ARM image, no linux and I don't want to interact with the host's hardware. So no chardev in the linux sense is involved. Anyway thank you for your feedback. Regards Alexander ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-14 21:10 ` Alexander Graf @ 2014-07-14 22:48 ` Peter Maydell 2014-07-15 7:06 ` Paolo Bonzini 0 siblings, 1 reply; 14+ messages in thread From: Peter Maydell @ 2014-07-14 22:48 UTC (permalink / raw) To: Alexander Graf; +Cc: Paolo Bonzini, QEMU Developers On 14 July 2014 22:10, Alexander Graf <graf@campus.tu-berlin.de> wrote: > On 07/14/2014 10:37 PM, Paolo Bonzini wrote: >> But i2c is >> simple enough, and there are so many devices with a 4-page datasheet, >> that I think it would be acceptable. You could also write an i2c >> passthrough chardev backend that connects to /dev/i2c* and lets the >> guest access slaves in the host. > > My interest is to fake sensor values for the guest and not to connect > anything to real hardware. I think I misinterpreted your "chardev". To > clarify: My guest is a bare metal ARM image, no linux and I don't want to > interact with the host's hardware. So no chardev in the linux sense is > involved. Right, but this is an optional part of Paolo's proposal as I understand it. You could just have your fake sensors be implemented by some userspace process on the other end of a filedescriptor, as you do now but with i2c rather than custom protocol. This would also let you run the same bit of firmware in the guest as would be on the real h/w. thanks -- PMM ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-14 22:48 ` Peter Maydell @ 2014-07-15 7:06 ` Paolo Bonzini 2014-07-15 10:26 ` Alexander Graf 0 siblings, 1 reply; 14+ messages in thread From: Paolo Bonzini @ 2014-07-15 7:06 UTC (permalink / raw) To: Peter Maydell, Alexander Graf; +Cc: QEMU Developers Il 15/07/2014 00:48, Peter Maydell ha scritto: >> > My interest is to fake sensor values for the guest and not to connect >> > anything to real hardware. I think I misinterpreted your "chardev". To >> > clarify: My guest is a bare metal ARM image, no linux and I don't want to >> > interact with the host's hardware. So no chardev in the linux sense is >> > involved. > Right, but this is an optional part of Paolo's proposal as I understand > it. Correct, it's an additional part just to show that the interface can be useful for much more than bypassing the GPL. :) As to the protocol, I found a datasheet of an I2C-to-UART bridge that could provide ideas: http://www.nxp.com/documents/data_sheet/SC18IM700.pdf chapter 7, it's very simple (just two commands, start and stop). Paolo ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-15 7:06 ` Paolo Bonzini @ 2014-07-15 10:26 ` Alexander Graf 2014-07-15 10:53 ` Paolo Bonzini 0 siblings, 1 reply; 14+ messages in thread From: Alexander Graf @ 2014-07-15 10:26 UTC (permalink / raw) To: Paolo Bonzini, Peter Maydell, Alexander Graf; +Cc: QEMU Developers On 07/15/2014 12:48 AM, Peter Maydell wrote: > Right, but this is an optional part of Paolo's proposal as I understand > it. You could just have your fake sensors be implemented by some > userspace process on the other end of a filedescriptor, as you do now > but with i2c rather than custom protocol. This would also let you run > the same bit of firmware in the guest as would be on the real h/w. > Ah, thank you, I finally realised that you are talking about the -chardev argument (I just discovered that option.) and not only about linux character devices. It seems I reinvented the wheel while implementing the pipes. What a waste of time :) On 07/15/2014 09:06 AM, Paolo Bonzini wrote: > As to the protocol, I found a datasheet of an I2C-to-UART bridge that > could provide ideas: > http://www.nxp.com/documents/data_sheet/SC18IM700.pdf chapter 7, it's > very simple (just two commands, start and stop). Thanks for the idea. I still don't get why it should be better to fake an I2C device rather than a universal memory IO. I don't want to emulate the controllers hardware, but only communicate the abstract sensor/actuator values. In addition not all Sensors are I2C devices, so there is no value in doing it via an I2C bus. Even the simple I2C protocol mentioned in the data sheet is more complex than mine. Could you point me to the code where the chardev devices are defined in qemu? Alexander ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-15 10:26 ` Alexander Graf @ 2014-07-15 10:53 ` Paolo Bonzini 2014-07-15 18:55 ` Alexander Graf 0 siblings, 1 reply; 14+ messages in thread From: Paolo Bonzini @ 2014-07-15 10:53 UTC (permalink / raw) To: Alexander Graf, Peter Maydell, Alexander Graf; +Cc: QEMU Developers Il 15/07/2014 12:26, Alexander Graf ha scritto: > Thanks for the idea. I still don't get why it should be better to fake > an I2C device rather than a universal memory IO. Because this would not be fake, the idea was to emulate the actual sensor/actuator outside QEMU. Which makes sense for much more than bypassing the GPL. You listed some uses (test oracles), I added more (passthrough using the same chardev-based interface), and on top of this the devices are usually so stupid that there's not much point in bypassing the GPL in the first place. > I don't want to emulate > the controllers hardware, but only communicate the abstract > sensor/actuator values. In addition not all Sensors are I2C devices, so > there is no value in doing it via an I2C bus. Even the simple I2C > protocol mentioned in the data sheet is more complex than mine. That datasheet also has some GPIO pins, whether you need that depends on the I2C sensors and actuators you care about. In the end it's just two commands (start and stop). SSI is even simpler, it's just write a byte to the chardev, read a byte from the chardev. In any case yeah, that's why I asked what protocol do the devices use in the actual hardware. If the hardware is really using memory-mapped registers, the external program can talk to QEMU via QMP and set QOM properties and qom-set. There is an example in hw/misc/tmp105.c and tests/tmp105-test.c Of course you could do that for all sensors instead of going to I2C (as you are doing now). However, QEMU already has I2C and SSI emulation so I don't see much value in paravirtualization. > Could you point me to the code where the chardev devices are defined in > qemu? Not sure I understand the question so -> irc. :) Paolo ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-15 10:53 ` Paolo Bonzini @ 2014-07-15 18:55 ` Alexander Graf 2014-07-15 20:09 ` Paolo Bonzini 0 siblings, 1 reply; 14+ messages in thread From: Alexander Graf @ 2014-07-15 18:55 UTC (permalink / raw) To: Paolo Bonzini, Alexander Graf, Peter Maydell; +Cc: QEMU Developers On 07/15/2014 12:53 PM, Paolo Bonzini wrote: > Il 15/07/2014 12:26, Alexander Graf ha scritto: >> Thanks for the idea. I still don't get why it should be better to fake >> an I2C device rather than a universal memory IO. > > Because this would not be fake, the idea was to emulate the actual > sensor/actuator outside QEMU. Which makes sense for much more than > bypassing the GPL. You listed some uses (test oracles), I added more > (passthrough using the same chardev-based interface), and on top of this > the devices are usually so stupid that there's not much point in > bypassing the GPL in the first place. > >> I don't want to emulate >> the controllers hardware, but only communicate the abstract >> sensor/actuator values. In addition not all Sensors are I2C devices, so >> there is no value in doing it via an I2C bus. Even the simple I2C >> protocol mentioned in the data sheet is more complex than mine. > > That datasheet also has some GPIO pins, whether you need that depends on > the I2C sensors and actuators you care about. In the end it's just two > commands (start and stop). > > SSI is even simpler, it's just write a byte to the chardev, read a byte > from the chardev. > > In any case yeah, that's why I asked what protocol do the devices use in > the actual hardware. > > If the hardware is really using memory-mapped registers, the external > program can talk to QEMU via QMP and set QOM properties and qom-set. > There is an example in hw/misc/tmp105.c and tests/tmp105-test.c > > Of course you could do that for all sensors instead of going to I2C (as > you are doing now). However, QEMU already has I2C and SSI emulation so > I don't see much value in paravirtualization. > Sorry, I really don't get your point. 1. I do paravirtualization (thank you for giving me some vocabulary - I'm a virtualization newbe) for a reason; because my emulation is not interested in the details. I don't want real device behavior and I don't have time to implement it. There is absolutely no benefit for the kind of loop simulator I am writing. It is simply a waste of resources to implement the details. People are interested if their robot is turning left or right based on the current sensor value, not if there are interrupts thrown etc. They don't care to which bus the sensor is attached on the board. The problem is one abstraction higher than hardware. The reason to emulate the ARM Controller is that it is simpler to archive then to port the robot's operating system. This works pretty nice so far. 2. It makes no sense to me to emulate an I2C bus device with a made up protocol. This is somewhere between modeling all hardware and doing a paravirtualization. On one hand I could not do a pass through to the real hardware because their protocols are not compatible (made up vs. real world, complex protocol). On the other hand I have no benefit from the I2C emulation over an abstract communication mechanism, but the performance drops. 3. I do not circumvent the GPL! The whole software in the loop simulator is itself GPL Software. The reason I emulate the sensor values outside of qemu is simple. This is exactly what happens in the real world. The MCU or even the sensors do not know what values they read. This is decided by the environment. In the simulator this is archived by a complex environment simulation that has nothing to do with qemu and will never be part of it, no matter what license is involved. 4. Now, thanks to the help on this list I know there is a the "-chardev" functionality in qemu that basically archives what I did by hand using pipes. Now my idea is to port my own "proprietary" implementation to "the qemu way" - chardevs. You said you think it is a bad idea to build a device that directly translates I/O memory access to a chardev. I still don't understand why. Is this all about legal issues or is there a technical reason? >> Could you point me to the code where the chardev devices are defined in >> qemu? I found examples in hw/char. Regards Alexander ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-15 18:55 ` Alexander Graf @ 2014-07-15 20:09 ` Paolo Bonzini 2014-07-16 8:40 ` Alexander Graf 0 siblings, 1 reply; 14+ messages in thread From: Paolo Bonzini @ 2014-07-15 20:09 UTC (permalink / raw) To: Alexander Graf, Alexander Graf, Peter Maydell; +Cc: QEMU Developers Il 15/07/2014 20:55, Alexander Graf ha scritto: > 3. I do not circumvent the GPL! The whole software in the loop simulator > is itself GPL Software. The reason I emulate the sensor values outside > of qemu is simple. This is exactly what happens in the real world. The > MCU or even the sensors do not know what values they read. This is > decided by the environment. In the simulator this is archived by a > complex environment simulation that has nothing to do with qemu and will > never be part of it, no matter what license is involved. Understood. I didn't mean you were going to circumvent the GPL, just that a lot of justification is required for interfaces that allow doing that. BTW, sorry for the confusion. There is another frequent contributor to QEMU with the same name as yours. I only noticed now that the email address is different. > 4. Now, thanks to the help on this list I know there is a the "-chardev" > functionality in qemu that basically archives what I did by hand using > pipes. Now my idea is to port my own "proprietary" implementation to > "the qemu way" - chardevs. You said you think it is a bad idea to build > a device that directly translates I/O memory access to a chardev. I > still don't understand why. Is this all about legal issues or is there a > technical reason? > >>> Could you point me to the code where the chardev devices are defined in >>> qemu? > I found examples in hw/char. I think that there are two other ways to do it. 1) You can look at hw/misc/tmp105.c and tests/tmp105-test.c for examples. This is an I2C device, but the suggestion has nothing to do with I2C. QEMU has an object model and an interface for outside devices to interact with the object model. The command you need is qom-set. Your MMIO device can expose properties like tmp105.c does with its "temperature" property. The relevant code is: static void tmp105_get_temperature(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { TMP105State *s = TMP105(obj); int64_t value = s->temperature * 1000 / 256; visit_type_int(v, &value, name, errp); } static void tmp105_set_temperature(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { TMP105State *s = TMP105(obj); Error *local_err = NULL; int64_t temp; visit_type_int(v, &temp, name, &local_err); if (local_err) { error_propagate(errp, local_err); return; } if (temp >= 128000 || temp < -128000) { error_setg(errp, "value %" PRId64 ".%03" PRIu64 " °C is out of range", temp / 1000, temp % 1000); return; } s->temperature = (int16_t) (temp * 256 / 1000); tmp105_alarm_update(s); } static void tmp105_initfn(Object *obj) { object_property_add(obj, "temperature", "int", tmp105_get_temperature, tmp105_set_temperature, NULL, NULL, NULL); } Here, the temperature is passed in 1/1000th of a °C (e.g. 20000 = 20 °C) and the device reads it in 1/256th of a °C (e.g. 20 °C reads as 0x1400). You can give the device a QOM name like this: object_property_add_child(qdev_get_machine(), "mmio-interface", OBJECT(mmio_interface), NULL); between the call to qdev_create and the one to qdev_init_nofail. If you are using sysbus_create_simple or sysbus_create_varargs, you will have to use the lower-level functions instead. Then, in the QEMU invocation you can create a socket like this: ... -qmp unix:/tmp/unix.sock,server,nowait on the command line and a single process will be able to connect to /tmp/unix.sock and send commands. The first command must be { 'execute': 'qmp_capabilities' } Then the actual accesses will look like this: { 'execute': 'qom-get', 'arguments': { 'path': 'mmio-interface', 'property': 'temperature' } } { 'execute': 'qom-set', 'arguments': { 'path': 'mmio-interface', 'property': 'temperature', 'value': 20000 } } 2) Another possibility is to just place the sensor and actuator data in normal RAM. You can use the test probe functionality ("qtest") to access it and read/write it while the guest is running. It looks like this: ... -qtest unix:/tmp/unix.sock,server,nowait -machine accel=tcg and it requires no glue code like the above object_property_*. The protocol is very simple and documented in qtest.c. Getting the next simulation tick is a bit more complicated, but possible. If the above works out for you, and you can point us to some code, it will be easier to explain it. Paolo ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-15 20:09 ` Paolo Bonzini @ 2014-07-16 8:40 ` Alexander Graf 2014-07-16 8:50 ` Paolo Bonzini 0 siblings, 1 reply; 14+ messages in thread From: Alexander Graf @ 2014-07-16 8:40 UTC (permalink / raw) To: Paolo Bonzini, Alexander Graf, Peter Maydell; +Cc: QEMU Developers On 07/15/2014 10:09 PM, Paolo Bonzini wrote: > BTW, sorry for the confusion. There is another frequent contributor to > QEMU with the same name as yours. I only noticed now that the email > address is different. Oh right I noticed that; should have said something. >> 4. Now, thanks to the help on this list I know there is a the "-chardev" >> functionality in qemu that basically archives what I did by hand using >> pipes. Now my idea is to port my own "proprietary" implementation to >> "the qemu way" - chardevs. You said you think it is a bad idea to build >> a device that directly translates I/O memory access to a chardev. I >> still don't understand why. Is this all about legal issues or is there a >> technical reason? > I think that there are two other ways to do it. And what about the chardev way? Your silence in this regard is misterious ;-) > > 1) [...] > 2) [...] Thanks a lot for your suggestions. I will play a bit and come back when I have some code to show. Alexander ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] hw/arm: add Lego NXT board 2014-07-16 8:40 ` Alexander Graf @ 2014-07-16 8:50 ` Paolo Bonzini 0 siblings, 0 replies; 14+ messages in thread From: Paolo Bonzini @ 2014-07-16 8:50 UTC (permalink / raw) To: Alexander Graf, Alexander Graf, Peter Maydell; +Cc: QEMU Developers Il 16/07/2014 10:40, Alexander Graf ha scritto: >>> > >> I think that there are two other ways to do it. > > And what about the chardev way? Your silence in this regard is > misterious ;-) The main problem with chardevs is that they are completely asynchronous. So they may not be a good match for your use case. (In fact, this is a problem for the i2c-over-chardev and especially spi-over-chardev ideas I shot out yesterday. For i2c-over-chardev one could add support to clock stretching in QEMU, but SPI is entirely synchronous). Note that -qmp and -qtest both use chardevs internally to connect the external program with QEMU. Paolo >> >> 1) [...] >> 2) [...] > > Thanks a lot for your suggestions. I will play a bit and come back when > I have some code to show. ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2014-07-16 8:50 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-07-13 14:20 [Qemu-devel] hw/arm: add Lego NXT board Alexander Graf 2014-07-14 11:23 ` Peter Crosthwaite 2014-07-14 11:46 ` Paolo Bonzini 2014-07-14 18:09 ` Alexander Graf 2014-07-14 20:37 ` Paolo Bonzini 2014-07-14 21:10 ` Alexander Graf 2014-07-14 22:48 ` Peter Maydell 2014-07-15 7:06 ` Paolo Bonzini 2014-07-15 10:26 ` Alexander Graf 2014-07-15 10:53 ` Paolo Bonzini 2014-07-15 18:55 ` Alexander Graf 2014-07-15 20:09 ` Paolo Bonzini 2014-07-16 8:40 ` Alexander Graf 2014-07-16 8:50 ` Paolo Bonzini
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).