[RK3568] AMP架构_rk3568 amp(3)

工具类软件包: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        5

static 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的工程师确认,我们不需要关注HAL系统,只需要编译kernel和rt-thread系统即可。

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

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

开发环境搭建

eclipse软件

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

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

编译RT-THREAD报错

scons命令安装

SCons是一种开源软件构建工具,即下一代构建工具。

将SCons视为经典的Make使用程序的改进的跨平台替代品,它具有类似于autoconf/automake和ccache之类的编译器缓存的集成功能,简而言之,SCons是一种更容易、更可靠和更快的软件构建方式。

SCons的配置文件是Python,使用真正的编程语言来解决构建问题。

执行如下命令安装 sudo apt-get install scons

python版本报错

 通过命令sudo ln -s python2.7 python将python连接到2.7的版本后,报如下错误:

python和scons的版本对应关系。

编译内核

VCCIO2和3选择1.8V,其他都选择3.3V

VCCIO是什么东西?

Kernel-rt和Kernel的区别

Linux内核因开源、免费、功能完善等特性,一直以来在工业领域有非常广泛的应用。但由于Linux内核本身并不是一个实时操作系统,而是一个分时操作系统,因此在很多工业应用场景中并不能满足实时性要求。

Linux-RT则基于普通Linux内核打上了RT PREEMPT补丁,使用Linux内核成为硬实时操作系统。PREEMPT_RT补丁的关键是最小化不可抢占的内核代码量,同时最小化必须更改的代码量,以便提供这种附加的可抢占性。PREEMPT_RT补丁利用Linux内核的SMP功能来添加这种额外的抢占性,而不需要完整的内核重写。

**Linux-RT既让普通Linux内核获得了的实时性,又能和普通Linux具有相同的开发生态系统,**包括相同工具链、文件系统和安装方法,以及相同的POSIX API等。这让客户的应用程序只需将有实时性要求的任务设置为实时线程,无实现性要求的任务不需要任何改动,客户可用最小的开发工作量,就能使产品满足实时性要求。

Linux-RT满足了客户在产品开发中“既要又要”的刚需——既想让产品满足实时性要求,又想开发简单尽量沿用已有的开发功能,从而实现产品快速上市的期望,因此Linux-RT在工业应用中十分盛行。目前,TI、NXP、Xilinx、全志、瑞芯微等国内外知名工业处理器原厂,已经在其主流工业处理器中适配或正在适配Linux-RT实时操作系统,例如TI AM62x、AM335x等,全志T3、A40i、T113-i等。

RT-linux特点

在Linux 操作系统中,调度算法(基于最大吞吐量准则)、设备驱动、不可中断的系统调用、中断屏蔽以及虚拟内存的使用等因素,都会导致系统在时间上的不可预测性,决定了Linux操作系统不能处理硬实时任务。

RTLinux为避免这些问题,在Linux内核与硬件之间增加了一个虚拟层(通常称作虚拟机),构筑了一个小的、时间上可预测的、与Linux内核分开的实时内核,使得在其中运行的实时进程满足硬实时性。并且RTLinux和Linux构成一个完备的整体,能够完成既包括实时部分又包括非实时部分的复杂任务。

Linux-RT内核增加PREEMPT_RT补丁后,增加了系统响应的确定性和实时性,但是代价是CPU性能降低。

版本编译

版本编译的脚本设置:device/rockchip/rk3568目录:

Target arch

export RK_ARCH=arm64

Spl ini defconfig

export RK_SPL_INI_CONFIG=RK3568MINIALL.ini

Uboot defconfig

export RK_UBOOT_DEFCONFIG=rk3568

Uboot image format type: fit(flattened image tree)

export RK_UBOOT_FORMAT_TYPE=fit

Kernel defconfig

export RK_KERNEL_DEFCONFIG=rockchip_linux_defconfig

Kernel dts

export RK_KERNEL_DTS=rk3568-evb1-ddr4-v10-linux-amp

boot image type

export RK_BOOT_IMG=boot.img

kernel image path

export RK_KERNEL_IMG=kernel/arch/arm64/boot/zImage

kernel image format type: fit(flattened image tree)

export RK_KERNEL_FIT_ITS=boot.its

parameter for GPT table

export RK_PARAMETER=parameter-rk3568-amp.txt

target chip

export RK_CHIP=rk3568

Set rootfs system, include yocto, debian, buildroot, rtthread, hal

export RK_ROOTFS_SYSTEM=buildroot

Set rootfs type, including ext2 ext4 squashfs

export RK_ROOTFS_TYPE=ext2

Define package-file

export RK_PACKAGE_FILE=rk356x-package-file

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

93938)]

[外链图片转存中…(img-BTtQMAnB-1715604693939)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值