RT-Thread Smart 用户态开发体验

背景

RT-Thread Smart 是基于 RT-Thread 操作系统上的混合操作系统,它把应用从内核中独立出来,形成独立的用户态应用程序,并具备独立的地址空间。
自 V5.0.0 起,rt-smart 分支已合并至 master 分支上,下载 rt-thread 源码后,无需再切换至 rt-smart 分支,但需要为 BSP 配置 Smart 内核。

架构

RT-Thread Smart 在硬件平台的基础上通过 MMU、系统调用的方式把整个系统分成了内核态及用户态。用户态通过系统调用 System Call 访问内核代码。
在这里插入图片描述

RT-Thread Smart 的核心实现是 lwP,进程管理模块( rt-thread/components/lwp )。它包括了如下的几个部分:

  • 面向用户态的系统调用
  • 用户态进程管理
  • elf 可执行应用程序加载器
  • 基于 MMU 的虚拟内存管理,地址空间管理

入门体验

准备

  • 环境准备: ubuntu 20.04 (如果只有 windows 系统,建议使用 WSL 方式创建一个 linux 系统)
  • RT-Thread 源码下载
git clone  https://github.com/RT-Thread/rt-thread.git
  • Smart 的 userapps 下载
git clone https://github.com/RT-Thread/userapps.git
  • 安装编译工具
// 安装 xmake
sudo add-apt-repository ppa:xmake-io/xmake
sudo apt update
sudo apt install xmake
// 安装 scons
sudo apt-get install scons

编译

进入 userapps, 配置环境变量

cd userapps
source env.sh

编译应用程序

cd apps
/ / 导出工具链
xmake f -a aarch64
// 编译用户态应用
xmake -j12

制作镜像

xmake smart-rootfs
xmake smart-image -o ../prebuilt/qemu-virt64-aarch64/ext4.img

编译内核

为了方便起见,我们采用 qemu-virt64-aarch64 为例构建内核镜像, 在编译内核之前,我们需要先安装 qemu 模拟器

sudo apt-get install -y libglib2.0-dev libpixman-1-dev
sudo dpkg -i ./qemu_7.1.0-2022111713_amd64.deb

进入 qemu-virt64-aarch64 , 打开 menuconfig

cd ./rt-thread/bsp/qemu-virt64-aarch64/
scons --menuconfig

// 如果遇到 Kconfig 文件有不识别的字符时, 可通过以下命令解决:
dos2unix `find -name Kconfig`

打开 menuconfig 后,使能 RT-Thread Smart
在这里插入图片描述
开始编译内核

scons -j12

最后江编译生成的 rtthread.bin 复制到 userapps\prebuilt\qemu-virt64-aarch64 目录即可
此时, 该目录下的文件及作用如下:

ext4.img            // 文件系统镜像文件, 之前制作镜像时,已将 userapps 下的应用程序 copy 到了文件系统的 `/bin` 目录下
rtthread.bin       // 内核镜像
run.sh               // 运行 QEMU 模拟器
run_debug.sh   // 调试 QEMU 模拟器

运行

运行 rt-smart 系统

./run.sh

在这里插入图片描述

在系统中运行应用程序

msh />/bin/hello
msh />hello world!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/72448.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最强自动化测试框架Playwright(26)-对话框

page.on(dialog) playwright 框架可以监听dialog事件,不管你alert 什么时候弹出来,监听到事件就自动处理了。 当出现 JavaScript 对话框时发出,例如alert、prompt或。侦听器必须dialog.accept()或dialog.dismiss()对话框 - 否则页面将冻结等…

YOLOv5、YOLOv8改进:MobileViT:轻量通用且适合移动端的视觉Transformer

MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformer 论文:https://arxiv.org/abs/2110.02178 1简介 MobileviT是一个用于移动设备的轻量级通用可视化Transformer,据作者介绍,这是第一次基于轻量级CNN网络性…

获取接口的所有实现

一、获取接口所有实现类 方法1:JDK自带的ServiceLoader实现 ServiceLoader是JDK自带的一个类加载器,位于java.util包当中,作为 A simple service-provider loading facility。 (1)创建接口 package com.example.dem…

Elasticsearch 8.X 复杂分词搞不定,怎么办?

1、实战问题 球友提问:我想停用所有纯数字的分词 , 官网上的这个方法好像对ik分词器无效! 有没有什么别的方法啊, chart gpt 说分词可以用正则匹配 但是测试好像是不行的 我的es版本是 8.5.3。 2、进一步沟通后,得…

迪瑞克斯拉算法 — 优化

在上一篇迪瑞克斯拉算法中将功能实现了出来,完成了图集中从源点出发获取所有可达的点的最短距离的收集。 但在代码中getMinDistanceAndUnSelectNode()方法的实现并不简洁,每次获取minNode时,都需要遍历整个Map,时间复杂度太高。这…

TypeScript 语法

环境搭建 以javascript为基础构建的语言,一个js的超集,可以在任何支持js的平台中执行,ts扩展了js并且添加了类型,但是ts不能被js解析器直接执行,需要编译器编译为js文件,然后引入到 html 页面使用。 ts增…

Git Cherry-pick使用

概述 无论项目大小,当你和一群程序员一起工作时,处理多个 Git 分支之间的变更都会变得很困难。有时,与其把整个 Git 分支合并到另一个分支,不如选择并移动几个特定的提交。这个过程被称为 "挑拣", 即 Cherry-pick。 本…

使用QT纯代码创建(查找)对话框详细步骤与代码

一、创建项目文件 打开Qt Creator->文件->新建文件或项目->选择Qt Widgets Application 为项目起名字 输入类的名字 二、 了解每个文件的作用 项目创建完毕之后就会出现以下几个文件,先来分别介绍以下这些文件的作用。 Headers->finddialog.h——很显…

2023年国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

c语言每日一练(5)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…

【三维编辑】Seal-3D:基于NeRF的交互式像素级编辑

文章目录 摘要一、引言二、方法2.1.基于nerf的编辑问题概述2.2.编辑指导生成2.3.即时预览的两阶段学生训练 三、实验四、代码总结 项目主页: https://windingwind.github.io/seal-3d/ 代码:https://github.com/windingwind/seal-3d/ 论文: https://arxiv.org/pdf/23…

k8s-----集群调度

目录 一:调度约束 二:Pod 启动创建过程 三:k8s调度过程 1、Predicate 有一系列的常见的算法 2、常见优先级选项 3、指定调度节点 (1)nodeName指定 (2)nodeSelector指定 四:亲和…

并发编程面试题2

并发编程面试题2 一、AQS高频问题: 1.1 AQS是什么? AQS就是一个抽象队列同步器,abstract queued sychronizer,本质就是一个抽象类。 AQS中有一个核心属性state,其次还有一个双向链表以及一个单项链表。 首先state…

Mac 卸载appium

安装了最新版的appium 2.0.1,使用中各种问题,卡顿....,最终决定回退的。记录下卸载的过程 1.打开终端应用程序 2.卸载全局安装的 Appium 运行以下命令以卸载全局安装的 Appium: npm uninstall -g appium 出现报错:Error: EACCES: permiss…

阿里云服务器带宽计费模式怎么选?有什么区别?

阿里云服务器公网带宽计费模式按固定带宽和按使用流量哪个划算?阿里云百科以北京地域为例,按固定带宽计费1M带宽一个月23元,按使用流量计费1GB流量0.8元,如果云服务器带宽使用率低于10%,那么首选按使用流量计费&#x…

stepin设置菜单icon的两种方式——基础积累

最近在看大佬写的stepin后台管理系统,框架是vue3antd3.xvite,下面记录一下,菜单图标的使用方法。 1.第一种方法就是使用antd中的icon图标 书写方式如下: {path: /,name: 首页,redirect: /analysis,meta: {title: 首页,renderMen…

Untiy Json和Xml的序列化和反序列化

Json的序列化和反序列化 1.定义数据类 [Serializable] public class ZoomPoint {// 点名称, 将作为Key被字典存储public string name;// 轴心X坐标public Vector2 pivot Vector2.one / 2;// 放大倍率,小于1是为缩小倍率,小于0是取绝对值,不…

redis学习笔记(九)

文章目录 python对redis基本操作(1)连接redis(2)数据类型操作 python对redis基本操作 (1)连接redis # 方式1 import redisr redis.Redis(host127.0.0.1, port6379) r.set(foo, Bar) print(r.get(foo))# …

【MOOC】北京理工大学Python网络爬虫与信息提取慕课答案-综合挑出了一些很难评的慕课测验题

1 Requests库中的get()方法最常用,下面哪个说法正确?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬…

mysql 技术总结

一、mysql 索引(左小右大) 下图中为二叉树 mysql索引类型以及数据结构 BTREE结构 BTree又叫多路平衡搜索树,一颗m叉的BTree特性如下: 树中每个节点最多包含m个孩子。 除根节点与叶子节点外,每个节点至少有[ceil(m/2…
最新文章