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即可 不过本人比较懒就没测试了

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言