[RK3568] AMP架构

news/2024/10/25 17:15:07/
Rockchip 平台异构多系统 AMP (非对称多核架构)的开发软件包,支持 Linux(Kernel) Standalone(Hal)、 RTOS(RT-Thread) 组合 AMP 构建形式。

Standalone(Hal)

HAL:Hardware Abstraction Layer,硬件抽象层。

硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。

硬件抽象层大概分为以下几点HAL:
  *上层软件
  *虚拟驱动,设置管理模块
  *内部通信SERVER
  *内部以太网
  *内部通信CLIENT
  *用户接入口
  硬件抽象层接口的定义和代码的设计具有一下特点:
  *硬件抽象层具有与硬件的密切相关性
  *硬件抽象层具有与操作系统无关性
  *接口定义的功能应包含硬件或系统所需硬件支持的所有功能
  *接口定义简单明了,太多接口函数会增加软件模拟的复杂性
  *具有可测性的接口设计有利于系统的软硬件测试和集成
硬件抽象层对用户设备接口的功能模拟主要由虚拟驱动模块完成,包括数据包的收发及协议报文的预处理等工作,为上层协议软件提供标准的API函数, 而对用户设备的接口管理则由上层网络管理软件通地设备管理模块对其进行管理配置及监控,内部通信模块运行于内部队以太网络,协调各模块之间的功能接口,保证从处理单元与主处理单元之间实时可靠的数据传输.

RK的 Standalone 系统是一个简单的、 low-level 的软件层。内部实现基于 Hal ,提供对基本处理器特性 ( Cache、 Interrupts Exceptions) 的访问,以及对基础外设 ( 如标准输入和输出、 UART CAN GMAC I2C ) 的驱动支持。

RTOS(RT-Thread)

RT-ThreadRTOS是一款来自中国的开源实时操作系统,由RT-Thread工作室的专业开发人员开发、维护。

起初RT-Thread是一个实时的内核(全抢占优先级调度,调度器时间复杂度O(1)),但在发展过程中,RT-Thread实时操作系统得到了来自全国嵌入式开发工程师的鼎力支持,为RT-Thread添砖加瓦,现在它不仅仅是一款高效、稳定的实时核心,也是一套面向嵌入式系统的软件平台,覆盖了全抢占的实时操作系统内核,小巧而与底层具体实现无关的文件系统,轻型的TCP/IP协议栈以及轻型的多窗口多线程图形用户界面。

RT-Thread 概述

RT-Thread,全称是Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统, 基本属性之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。 事实上,一个处理器核心在某一时刻只能运行一个任务,由于每次对一个任务的执行时间很短、 任务与任务之间通过任务调度器进行非常快速地切换(调度器根据优先级决定此刻该执行的任务), 给人造成多个任务在一个时刻同时运行的错觉。在 RT-Thread 系统中,任务通过线程实现的, RT-Thread 中的线程调度器也就是以上提到的任务调度器。

RT-Thread 系统完全开源,3.1.0 及以前的版本遵循 GPL V2 + 开源许可协议。 从 3.1.0 以后的版本遵循 Apache License 2.0 开源许可协议,可以免费在商业产品中使用,并且不需要公开私有代码。

RT-Thread 架构

近年来,物联网(Internet Of Things,IoT)概念广为普及,物联网市场发展迅猛, 嵌入式设备的联网已是大势所趋。终端联网使得软件复杂性大幅增加,传统的 RTOS 内核已经越来越难满足市场的需求,在这种情况下,物联网操作系统(IoT OS)的概念应运而生。 物联网操作系统是指以操作系统内核(可以是 RTOS、Linux 等)为基础, 包括如文件系统、图形库等较为完整的中间件组件,具备低功耗、安全、 通信协议支持和云端连接能力的软件平台,RT-Thread 就是一个 IoT OS。

RT-Thread 与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是, 它不仅仅是一个实时内核,还具备丰富的中间层组件,如下图所示。

它具体包括以下部分:

内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现, 例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等; libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。

组件与服务层:组件是基于 RT-Thread 内核之上的上层软件,例如虚拟文件系统、FinSH 命令行界面、 网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。

RT-Thread 软件包:运行于 RT-Thread 物联网操作系统平台上,面向不同应用领域的通用软件组件, 由描述信息、源代码或库文件组成。RT-Thread 提供了开放的软件包平台, 这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择, 这也是 RT-Thread 生态的重要组成部分。软件包生态对于一个操作系统的选择至关重要, 因为这些软件包具有很强的可重用性,模块化程度很高,极大的方便应用开发者在最短时间内, 打造出自己想要的系统。RT-Thread 已经支持的软件包数量已经达到 60+,如下举例:

物联网相关的软件包:Paho MQTT、WebClient、mongoose、WebTerminal 等等。

脚本语言相关的软件包:目前支持 JerryScript、MicroPython。

多媒体相关的软件包:Openmv、mupdf。

工具类软件包:CmBacktrace、EasyFlash、EasyLogger、SystemView。

系统相关的软件包:RTGUI、Persimmon UI、lwext4、partition、SQLite 等等。

外设库与驱动类软件包:RealTek RTL8710BN SDK。

 qemu介绍

qemu是一个开源的模拟硬件的工具,能够模拟多种硬件(ARM A9、stm32xx…等等),开发的时候使用qemu能够避免很多硬件上的问题;

QEMU is a generic and open source machine emulator and virtualizer.

QEMU is a generic and open source machine emulator and virtualizer.

QEMU can be used in several different ways. The most common is for System Emulation, where it provides a virtual model of an entire machine (CPU, memory and emulated devices) to run a guest OS. In this mode the CPU may be fully emulated, or it may work with a hypervisor such as KVM, Xen, Hax or Hypervisor.Framework to allow the guest to run directly on the host CPU.

The second supported way to use QEMU is User Mode Emulation, where QEMU can launch processes compiled for one CPU on another CPU. In this mode the CPU is always emulated.

QEME官方文档

搭建rt-thread和qemu开发环境

简单概括就是几个步骤:

  1. 拉rt-thread的源码
  2. 安装好qemu
  3. 配置rt-thread所需环境,例如Scons等
  4. 最后编译,运行

 开发举例

rt-thread新建2个线程,一个线程优先级高,运行10次后退出,另一个一直运行,优先级低,通过MSH_CMD来触发任务运行

#include <rtthread.h>#define THREAD_PRIORITY         25
#define THREAD_STACK_SIZE       512
#define THREAD_TIMESLICE        5static rt_thread_t tid1 = RT_NULL;/* 线程 1 的入口函数 */
static void thread1_entry(void *parameter)
{rt_uint32_t count = 0;while (1){/* 线程 1 采用低优先级运行,一直打印计数值 */rt_kprintf("thread1 count: %d\n", count ++);rt_thread_mdelay(500);}
}ALIGN(RT_ALIGN_SIZE)
static char thread2_stack[1024];
static struct rt_thread thread2;
/* 线程 2 入口 */
static void thread2_entry(void *param)
{rt_uint32_t count = 0;/* 线程 2 拥有较高的优先级,以抢占线程 1 而获得执行 */for (count = 0; count < 10 ; count++){/* 线程 2 打印计数值 */rt_kprintf("thread2 count: %d\n", count);}rt_kprintf("thread2 exit\n");/* 线程 2 运行结束后也将自动被系统脱离 */
}/* 线程示例 */
int thread_sample(void)
{/* 创建线程 1,名称是 thread1,入口是 thread1_entry*/tid1 = rt_thread_create("thread1",thread1_entry, RT_NULL,THREAD_STACK_SIZE,THREAD_PRIORITY, THREAD_TIMESLICE);/* 如果获得线程控制块,启动这个线程 */if (tid1 != RT_NULL)rt_thread_startup(tid1);/* 初始化线程 2,名称是 thread2,入口是 thread2_entry */rt_thread_init(&thread2,"thread2",thread2_entry,RT_NULL,&thread2_stack[0],sizeof(thread2_stack),THREAD_PRIORITY - 1, THREAD_TIMESLICE);rt_thread_startup(&thread2);return 0;
}/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(thread_sample, thread sample);

运行结果

 RK3568支持的AMP形式

我们需要使用Linux + RTOS的形式。

RK给的基础代码库,只是一些repo配置,真正的代码还是需要我们将ssh的公钥发给他们,然后再从远端仓库下载,repo仓库的地址为:

执行repo sync命令下载源码时报验证失败:

 开发环境搭建

eclipse软件

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

 Eclipse的插件机制是轻型软件组件化架构。在客户机平台上,Eclipse使用插件来提供所有的附加功能,例如支持Java以外的其他语言。 已有的分离的插件已经能够支持C/C++(CDT)、Perl、Ruby,Python、telnet和数据库开发。插件架构能够支持将任意的扩展加入到 现有环境中,例如配置管理,而决不仅仅限于支持各种编程语言。


http://www.ppmy.cn/news/959484.html

相关文章

putty 快速登录服务器的方法

Session 选项卡中填写 Host Name, Port, Save Sessions, 假定名称为 tiktok 右键 putty 快捷方式&#xff0c;属性 > 快捷方式 > 目标&#xff0c;加入下面的参数 -load "tiktok" -l "root" -pw "密码"Mac 连接就直接在控制台输入以下命…

记录在编写ChatGPT爬虫网页时的问题

在编写好获取星球问题的爬虫后通过topic_id来找到问题的回答 获取没问题&#xff0c;是正常获取数据的。 但是在回答问题的时候应该直接导入topic_id而不要先在网页上回答了再去测试。不然会获取不到数据而导致错误代码1004

python 爬虫爱好者必须掌握的知识点“ 协程爬虫”,看一下如何用 gevent 采集女生用头像

本篇博客是 python 爬虫 120 例中,基础知识补充篇,内容将围绕 python 协程进行。 在开始协程相关知识前,先补充一下预备概念。 在 python 爬虫的学习过程中,经常要区分两个概念,一个叫做 I/O 密集型任务,另一个叫做 计算密集型任务。 以上两种任务,都有 2 个前提,一是…

利用chatgpt帮我写爬虫代码

首先我这里需要先赋予它一个身份&#xff0c;以便他更好的理解我们的话 接下来就可以让他帮我们写代码了 import requests from bs4 import BeautifulSoup# 请求头部信息&#xff0c;模拟浏览器访问 headers {user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/5…

怎样构建抖音壁纸表情包小程序?

第一&#xff0c;最新版本的图片小程序&#xff0c;壁纸表情头像游戏教程&#xff0c;教你跟上抖音小程序的步伐 我们都很熟悉取图(抖音演示:云云取图)。 传统的方法是搜索密码&#xff0c;然后下载和观看广告。这样&#xff0c;在瞬息万变的网络中&#xff0c;竞争力是有限的。…

chatgpt赋能python:Python安装教程:一步步实现Python开发环境搭建

Python安装教程&#xff1a;一步步实现Python开发环境搭建 Python是一种高效、易读、易维护的编程语言。在人工智能、数据科学、Web开发等领域都有广泛的应用。如果你是一名初学者或Python开发者&#xff0c;本文将为你提供Python安装教程。 第一步&#xff1a;下载Python安装…

chatgpt赋能python:Python虚拟环境搭建指南

Python虚拟环境搭建指南 Python是一种广受欢迎的编程语言&#xff0c;它可以用于各种应用程序开发。Python语言优雅简洁&#xff0c;易于理解和学习。但是&#xff0c;当您在多台计算机上编写Python代码时&#xff0c;会遇到与环境设置和包依赖项相关的问题。 虚拟环境可帮助…

chatgpt赋能python:Python在线聊天:实现即时通讯的快速解决方案

Python在线聊天&#xff1a;实现即时通讯的快速解决方案 在当今数字时代&#xff0c;在线聊天已经成为人与人之间交流的主流方式。Python在线聊天应用程序提供了一种快速且可定制的解决方案&#xff0c;使个人用户和企业可以进行互联网通信。本文将向您介绍Python在线聊天的基…