RTT-SMART学习(一):环境搭建

前言

之前的学习用的都是单核的cortexM内核 感觉多少有点"落后"与现代的CPU格格不如了,还是得了解点现代一点的CPU(带个MMU 带个缓存 多核) + 现代一点的操作系统的知识,但是Linux的体系太大啃起来又容易放弃,哎正好就发现RTT去年发布的RTT-SMART了,那就基于进行进一步的学习吧.

RTT-SMART环境配置

环境: WSL2(Ubuntu18.04) + VSCODE + Qemu

实现cortexA9的双核运行程序的编译和模拟运行

内核环境搭建

  • 克隆最新的rtt的代码

c 复制代码
  git clone https://github.com/RT-Thread/rt-thread.git
  • 下载交叉编译工具musl

    具体的不同的架构使用的工具链不同 参考https://github.com/RT-Thread/smart-build/issues/19下的说明即可

    在这里我需要用到的是 https://download.rt-thread.org/download/rt-smart/toolchains/arm-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2

    下载完成后 解压然后 一定要记得解压的路径 文件最终在哪里

    最好把gcc-musl加入到环境变量当中,具体可以问问AI怎么做

  • 工具的下载

    很多 报错了就问AI看看是少哪个 大概需要pip install的有: python3 / qemu / scons(最好也加入环境变量) / gdb-multiarch(后续调试配置用) / libncurses5-dev / libncursesw5-dev

    这里我用的Ubuntu18 默认是python2 所以还要安装python3(scons工具要用)

  • 修改配置文件

    • 修改env_arm.sh 并执行
    c 复制代码
    #!/bin/bash
    # arm musl gcc
    export RTT_CC=gcc
    /*修改为对应的你的musl所在的文件夹*/
    export RTT_EXEC_PATH=/root/gitProject/arm-linux-musleabi_for_x86_64-pc-linux-gnu/bin
    export RTT_CC_PREFIX=arm-linux-musleabi-
    export PATH=$PATH:$RTT_EXEC_PATH
    • 修改bsp/qemu-vexpress-a9 下的一些配置

      menuconfig打开配置文件,千万不要手动修改rt_config.h!! 因为配置某个参数的时候需要关联定义其它的宏,要让menuconfig配置完之后自己生成

      打开之后 Enable SMP并 设置一下CPU数量

      c 复制代码
      // qemu.sh
      if [ ! -f "sd.bin" ]; then
      dd if=/dev/zero of=sd.bin bs=1024 count=65536
      fi
      
      qemu-system-arm --version
      qemu-system-arm -M vexpress-a9 -smp cpus=2 -kernel rtthread.bin -serial stdio -sd sd.bin
      // qemu-dbg.sh
      if [ ! -f "sd.bin" ]; then
      dd if=/dev/zero of=sd.bin bs=1024 count=65536
      fi
      qemu-system-arm -M vexpress-a9 -smp cpus=2 -kernel rtthread.bin -nographic -sd sd.bin -S -s
  • 配置vscode下工作区 方便后续调试和跳转查看源码

    这是要配合 C/C++插件

    • c_cpp_properties.json
      这个主要是为了方便检索代码用

      c 复制代码
      {
      "configurations": [
          {
          "name": "Win32",
          /*第一个是工作区 剩下的就按照自身代码路径去改就行*/
          "includePath": ["${workspaceFolder}/**",
                  "/root/gitProject/rt-thread/include",
                  "/root/gitProject/rt-thread/components",
                  "/root/gitProject/rt-thread/bsp/qemu-vexpress-a9",
              "/root/gitProject/arm-linux-musleabi_for_x86_64-pc-linux-gnu/include"],
          "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
          "windowsSdkVersion": "10.0.17763.0",
          "compilerPath": "/usr/bin/gdb-multiarch",   /*修改成自己bin目录下的g++.exe,这里的路径和电脑里复制的文件目录有一点不一样,这里是两个反斜杠\\*/
          "cStandard": "c11",
          "cppStandard": "c++17",
          "intelliSenseMode": "${default}"
          }
      ],
      "version": 4
      }
    • launch.json

    c 复制代码
        {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Debug @ Windows",
                "type": "cppdbg",
                "request": "launch",
                "program": "${workspaceRoot}\\rtthread.elf",
                "args": [],
                "stopAtEntry": true,
                "cwd": "${workspaceRoot}",
                "environment": [],
                "externalConsole": true,
                "miDebuggerServerAddress": "localhost:1234",
                "serverLaunchTimeout": 2000,
                "targetArchitecture": "ARM",
                "MIMode": "gdb",
                "miDebuggerPath": "/usr/bin/gdb-multiarch",
                "customLaunchSetupCommands": [],
                "launchCompleteCommand": "exec-run",
            },
        ]
    }

    我个人工作区结构如下

    1. qemu-vexpress-a9: 代码的编写 调试
    2. /rt-thread/src: rt-thread的源码
    3. /rt-thread/include: rt-thread的头文件
    4. /rt-thread/libcpu/arm/cortex-a: Cortex-A内核关键文件 有MMU的配置/启动文件等
    5. /rt-thread/componets/lwp: 轻量化进程的实现
    6. /rt-thread/componets/mm: 对MMU相关硬件的操作代码
  • 编译与调试

    scons -j8就可以编译生成内核

    执行./qemu.sh 就可以观察代码的运行效果

    执行./qemu-dbg.sh后 按下F5就可以进行调试

用户态环境搭建

参考 https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-smart/quick-start/qemu-linux/quickstart即可 不过本人比较懒就没测试了

相关推荐
CinzWS2 小时前
A53调试体系(上)——CoreSight生态系统与自托管调试
嵌入式·芯片验证·原型验证·a53
顾喵2 小时前
SRIO通信总线
linux·windows·microsoft
Warren982 小时前
Windows 本地安装 Jenkins 教程
linux·运维·windows·功能测试·mysql·jenkins
汤愈韬2 小时前
ip-prefix(IP前缀列表)
linux·服务器·网络协议·tcp/ip
SPC的存折8 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
小疙瘩9 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器
我是伪码农11 小时前
外卖餐具智能推荐
linux·服务器·前端
皮皮林55111 小时前
强烈建议大家使用 Linux 做开发?
linux
IMPYLH11 小时前
Linux 的 od 命令
linux·运维·服务器·bash