• 又一嵌入式开源仿真器


    剪辑自: https://mp.weixin.qq.com/s/X0I3EotJ8TRqLK8vb8iQvA

    QEMU类似,Renode也是嵌入式相关的一个模拟器。

    Renode 针对物联网应用,QEMU 针对 PC 模拟器。

    Renode 是一个开发框架,通过让你模拟物理硬件系统来加速物联网和嵌入式系统开发。

    Renode 可以模拟 Cortex-M、RISC-V 等微控制器,不仅可以模拟 CPU指令,还可以模拟外设,甚至可以模拟板载的外设。更强的是,它可以让你在你的 PC 上运行、调试和测试未经修改的嵌入式软件-从裸机系统芯片,通过完整的设备到多节点系统。

    它广泛的网络支持和多系统仿真使它成为由多个设备组成的一个测试系统。

    Renode 官网:

    https://renode.io/

    Renode 官方文档:

    https://renode.readthedocs.io/en/latest/

    使用 Renode,您可以在硬件准备就绪之前开始开发,在不部署硬件的情况下测试程序,并通过减少闪存加载延迟来缩短迭代周期。

    Renode 的指令模拟器使用 C 语言编写,外设模拟器使用 C# 语言编写,兼顾了运行效率和开发效率。老版本是用Mono 构建的,最新版本已经升级到.NET 6:

    https://github.com/renode/renode

    来源:https://blog.csdn.net/zoomdy/article/details/95445329

    1、环境

    $ uname -a
    Linux vbox 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
    
    • 1
    • 2

    2、安装 Mono

    sudo apt update
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
    sudo apt install apt-transport-https ca-certificates
    echo "deb https://download.mono-project.com/repo/ubuntu stable-xenial main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
    sudo apt update
    sudo apt install mono-complete
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    安装 Mono 快结束时有个预编译的过程,这需要花费是十几分钟的时间。

    参考:

    • https://github.com/renode/renode/blob/master/README.rst#installation
    • https://www.mono-project.com/download/stable/#download-lin

    3、安装其它依赖包

    sudo apt-get install policykit-1 libgtk2.0-0 screen uml-utilities gtk-sharp2 libc6-dev
    
    • 1

    4、下载 Renode

    打开下载页面 https://github.com/renode/renode/releases/latest ,下载 renode_1.7.1_amd64.deb

    5、安装 Renode

    sudo dpkg -i renode_1.7.1_amd64.deb
    
    • 1

    6、运行 Renode

    命令行输入 renode 运行。

    renode
    
    • 1

    运行之后,renode 会开启新的命令窗口用作renode 命令输入,原来的命令行窗口作为renode的日志输出窗口使用。

    7、创建 machine

    以下命令均在 renode 命令窗口输入。

    创建机器,然后加载平台描述文件,这里是 STM32F4Discovery开发板的平台描述文件。

    mach create
    machine LoadPlatformDescription @platforms/boards/stm32f4_discovery-kit
    .repl 
    
    • 1
    • 2
    • 3

    8、查看外设

    输入 peripherals 命令查看外设。

    (machine-0) peripherals 
    Available peripherals:
      sysbus (SystemBus)
      │   
      ├── can0 (STMCAN)
      │     <0x40006400, 0x400067FF>
      │       
      ├── cpu (CortexM)
      │     Slot: 0
      │       
      ├── dma1 (STM32DMA)
      │     <0x40026000, 0x400263FF>
      │       
      ├── dma2 (STM32DMA)
      │     <0x40023400, 0x400237FF>
      │       
      ├── ethernet (SynopsysEthernetMAC)
      │   │ <0x40028000, 0x400293FF>
      │   │   
      │   ├── phy (EthernetPhysicalLayer)
      │   │     Address: 0
      │   │       
      │   └── phy1 (EthernetPhysicalLayer)
      │         Address: 1
      │           
      ├── exti (EXTI)
      │     <0x40013C00, 0x40013FFE>
      │       
      ├── flash (MappedMemory)
      │     <0x08000000, 0x081FFFFF>
      │       
      ├── fscmBank1 (MappedMemory)
      │     <0x60000000, 0x6FFFFFFF>
      │       
      ├── gpioPortA (STM32F4GPIOPort)
      │   │ <0x40020000, 0x400203FF>
      │   │   
      │   ├── UserButton (Button)
      │   │       
      │   ├── externalButton (Button)
      │   │       
      │   └── externalLed (LED)
      │           
      ├── gpioPortB (STM32F4GPIOPort)
      │     <0x40020400, 0x400207FF>
      │       
      ├── gpioPortC (STM32F4GPIOPort)
      │     <0x40020800, 0x40020BFF>
      │       
      ├── gpioPortD (STM32F4GPIOPort)
      │   │ <0x40020C00, 0x40020FFF>
      │   │   
      │   └── UserLED (LED)
      │           
      ├── gpioPortE (STM32F4GPIOPort)
      │     <0x40021000, 0x400213FF>
      │       
      ├── gpioPortF (STM32F4GPIOPort)
      │     <0x40021400, 0x400217FF>
      │       
      ├── nvic (NVIC)
      │     <0xE000E000, 0xE000EFFF>
      │       
      ├── rng (STM32F4_RNG)
      │     <0x50060800, 0x50060BFF>
      │       
      ├── rom (MappedMemory)
      │     <0x1FFF0000, 0x1FFFFFFF>
      │       
      ├── spi1 (STM32SPI)
      │     <0x40013000, 0x400133FF>
      │       
      ├── spi2 (STM32SPI)
      │     <0x40003800, 0x40003BFF>
      │       
      ├── spi3 (STM32SPI)
      │     <0x40003C00, 0x40003FFF>
      │       
      ├── sram (MappedMemory)
      │     <0x20000000, 0x2003FFFF>
      │       
      ├── uart1 (STM32_UART)
      │     <0x40011000, 0x400110FF>
      │       
      ├── uart2 (STM32_UART)
      │     <0x40004400, 0x400044FF>
      │       
      ├── uart3 (STM32_UART)
      │     <0x40004800, 0x400048FF>
      │       
      ├── uart4 (STM32_UART)
      │     <0x40004C00, 0x40004CFF>
      │       
      └── uart5 (STM32_UART)
            <0x40005000, 0x400050FF>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95

    9、加载程序

    机器创建好了以后,就可以用 LoadELF 命令加载程序了。

    sysbus LoadELF @http://antmicro.com/projects/renode/stm32f4discovery.elf-s_445441-827a0dedd3790f4559d7518320006613768b5e72
    
    • 1

    10、启动模拟器

    输入 start 命令启动模拟器。

    start
    
    • 1

    11、暂停模拟

    pause
    
    • 1

    12、参考

    官方帮助文件:https://renode.readthedocs.io/en/latest/

    来源:https://blog.csdn.net/zoomdy/article/details/95445329

    版权声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

    注意由于微信公众号近期改变了推送规则,为了防止找不到,可以星标置顶,这样每次推送的文章才会出现在您的订阅列表里。猜你喜欢:嵌入式设备AP配网实例分享
    嵌入式Linux单板连接飞燕物联网平台
    分享一种灵活性很高的协议格式(附代码例子)嵌入式大杂烩周记 | 第 16 期
    嵌入式大杂烩周记 | 第 15 期
    访问非法内存为什么不会出错?嵌入式大杂烩周记 | 第 14 期分享几个实用的代码片段(第二弹)分享一种你可能不知道的bug定位方法分享一种修改配置文件的方法《嵌入式大杂烩周记第 13 期:lz4》
    《嵌入式并行多线程处理器,了解一下!》《分享一种修改配置文件的方法》《分享几个实用的代码片段(附代码例子)》
    《废旧板子再利用:搭建无线调试环境!》
    《嵌入式段错误的3种调试方法汇总!》
    《简说TCP通信非阻塞接收(附代码例子)》《TCP通信常用接口的使用封装》《嵌入式软件中,总线错误的坑?替大家先踩一步》
    《分享嵌入式软件调试方法及几个有用的工具!》
    《分享两点提高编程能力的建议!》
    在公众号聊天界面回复1024,可获取嵌入式资源;回复 m ,可查看文章汇总
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    73个产品小白必备知识,项目管理也可看
    开源数据库MariaDB帮助金融服务业打造闭源专有数据库解决方案
    ios app安装的多种方式
    windbgpreview过滤无用信息
    【leetcode】【剑指offer Ⅱ】035. 最小时间差
    C++语法基础(4)——循环结构程序设计
    城市燃气价格体系及计量、计费
    9. React 高阶组件是什么, 和普通组件有什么区别, 适用什么场景?
    面试半年,上个月成功拿到阿里offer,全靠我啃烂了学长给的这份笔记
    计算机网络:网络层ARP协议
  • 原文地址:https://blog.csdn.net/qq_41854911/article/details/128106375