Cortex-M MCU Emulation with Renode | Interrupt

In this new era of work-from-home, firmware engineer may not have all the equipment and development board they are used to having at the office. One way around this? Emulation!


This is a companion discussion topic for the original entry at https://interrupt.memfault.com/blog/intro-to-renode
1 Like

Great post, thanks, I have been looking for something like this for embedded emulation

thanks for sharing.

I have a try and it’s quite impressive.

seems quite promising to solve the “I do not have xxx board yet” problem : )

This is a great post and renode is a great tool.
I can’t find a community to ask questions about renode.
The question is probably the most popular: is my controller/board supported?
I think I found the answer to that question: (unfortunately) no. I am referring to the NXP i.MX RT105x controller. The board is custom, but I’d be fine with EVKB support, too.

So let’s move on to the second question: is it possible (and how) to add support for the i.MX RT105x controller and its peripherals like UART, Eth, etc.?
Is it enough to write some .repl files or is it necessary to modify the source code?

best regards
Max

It looks like the NXP i.MX is not yet supported. To add support, you’ve got a few options as best I can tell:

  1. Write Peripherals in C# (e.g. https://github.com/renode/renode-infrastructure/blob/master/src/Emulator/Peripherals/Peripherals/I2C/STM32F4_I2C.cs)
  2. There is also a way to implement peripherals as Python scripts, but I’m not sure the interface is complete enough to implement a full MCU peripheral
  3. Get in touch with the folks at Antmicro and convince/pay them to add support (which they do as part of their business).

I’m sorry this isn’t the answer you were hoping for. The silver lining here is that the peripheral interface is simple & clean, so it’s much simpler to implement your own than it would be for QEMU.

Cheers,

François.

Hello, great introduction to Renode, thanks a lot !
From my side I had to enter “showAnalyzer sysbus.usart2” instead of “showAnalyzer sysbus.uart2” to show the “hello world”.
Also, I had to launched Renode in telnet mode (-T) so I could use a french keyboard mapping (apparently not available directly in the Renode terminal).

2 Likes

I’m trying out the example and everything works fine when running the sim manually: I see “hello world” and the “button pressed” prompt.

However, when I try to run renode-test tests/test-button.robot it gets stuck at:

Preparing suites
Started Renode instance on port 49152; pid 8998
Starting suites
Running tests/test-button.robot
+++++ Starting test 'test-button.Should Handle Button Press'

When I kill it I get the following output:

Second signal will force exit.
!!!!! Emulation's state saved to "/home/hendrik/projects/renode/hello_world/renode/snapshots/test-button.Should_Handle_Button_Press.fail.save"
!!!!! Log saved to "/home/hendrik/projects/renode/hello_world/renode/logs/test-button.Should_Handle_Button_Press.log"
+++++ Finished test 'test-button.Should Handle Button Press' in 16.30 seconds with status failed
      ╔═
      ║ Execution terminated by signal
      ║
      ║ Also teardown failed:
      ║ Several failures occurred:
      ║
      ║ 1) Connection to remote server broken: [Errno 104] Connection reset by peer
      ║
      ║ 2) Connection to remote server broken: [Errno 111] Connection refused
      ║
      ║ 3) Connection to remote server broken: [Errno 111] Connection refused
      ║
      ║ 4) Connection to remote server broken: [Errno 111] Connection refused
      ╚═
Suite tests/test-button.robot failed in 16.62 seconds.
Cleaning up suites
Closing Renode pid 8998
Aggregating all robot results
Output:  /home/hendrik/projects/renode/hello_world/renode/robot_output.xml
Log:     /home/hendrik/projects/renode/hello_world/renode/log.html
Report:  /home/hendrik/projects/renode/hello_world/renode/report.html
Some tests failed :( See the list of failed tests below and logs for details!
Failed robot critical tests:
        1. Test Suite.Should Handle Button Press
------

Does someone know what I might be missing?