LiteOS qemu realview-pbx-a9 环境搭建与运行
前言
-
最近打算移植搭建 一些常见的 RTOS 的 qemu 开发学习环境,当前 RT-Thread、FreeRTOS 已经成功运行 qemu,LiteOS 初步验证可以正常 运行 qemu
realview-pbx-a9,这里做个记录 -
首先学习或者研究 RTOS,只是看内核源码,会比较的枯燥,而是要开发板,可能一上来牵涉过多的硬件驱动,造成学习研究 RTOS 内核的兴趣降低了一些,前期需要对 RTOS 内核的运行有个全局的掌握,此时是要 qemu 来学习与验证,相对于实际的开发板,会便捷与高效
LiteOS
-
当前 验证的 LiteOS 内核是 : https://gitee.com/LiteOS/LiteOS
-
这里与 https://gitee.com/openharmony/kernel_liteos_a 相比,可能有一点区别,不过前期建议使用 LiteOS 验证,
kernel_liteos_a缺少一些板级的配置文件 -
可以通过 Git 克隆 LiteOS 内核,当前 qemu 验证发现不再需要其他的软件包就可以运行起来
-
git clone https://gitee.com/LiteOS/LiteOS.git
qemu realview-pbx-a9
-
git 克隆 LiteOS 的内核仓库后,可以进入内核,通过查看内核目录
tools/build/config/发现,有一些支持的板子的配置文件,其中 qemu 当前支持qemu-virt-a53.configrealview-pbx-a9.config,当前建议使用realview-pbx-a9.config,因为是 ARM 平台,相关的资料与编译工具链比较的方便获取 -
配置文件: 复制
tools/build/config/realview-pbx-a9.config到内核根目录下,改为.config文件 -
内核目录下执行
make menuconfig可以进入图形界面配置 -
【备注】如果
make menuconfig失败,一般需要配置 交叉编译环境
配置 arm gcc 交叉编译环境
-
下载 arm gcc 交叉编译工具链: 在 ARM 官方下载 https://developer.arm.com/downloads/-/gnu-rm,当前验证的版本:
gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2,我当前使用gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2可以正常编译 -
下载 arm gcc 工具链后,解压到 Linux 环境(ubuntu 20.04),然后设置环境变量:如修改
/etc/profile文件 -
sudo vim /etc/profile -
最后添加 :
export PATH=$PATH:/home/zhangsz/tools/gcc-arm-none-eabi-10-2020-q4-major/bin -
然后保存,
source /etc/profile使环境变量生效 -
可以在 shell 运行
arm-none-eabi-gcc -v确认 arm gcc 工具链环境变量生效


安装 kconfiglib
-
LiteOS 需要安装 python2 版本的 kconfiglib
-
如果当前 Linux 如 ubuntu 20.04 无法安装 python2 版本的 kconfiglib,需要手动获取 python2 版本的 pip,然后再 使用 python2 版本的 pip 安装 kconfiglib
-
我当前的系统 ubuntu 20.04,python 版本是
Python 2.7.18,但是没有 python 2 版本的 pip,默认 pip 的版本是 python3的,所以需要手动安装 python2 版本的 pip -
获取 get-pip.py,获取的地址:
https://bootstrap.pypa.io/pip/2.7/get-pip.py,ubuntu 可以使用wget https://bootstrap.pypa.io/pip/2.7/get-pip.py获取 -
然后确保当前的 python 版本是 2 版本, 使用
python get-pip.py即可安装 python2 版本的 pip -
安装 完 python2 版本的 pip,再安装 kconfiglib,命令 :
$ pip --version
pip 20.3.4 from /home/zhangsz/.local/lib/python2.7/site-packages/pip (python 2.7)$ pip install Kconfiglib
menuconfig 配置 LiteOS
- 当前可以直接保存,不需要配置,后面熟悉了 LiteOS 的内核与功能模块,可以尝试添加与修改内核的配置
编译 LiteOS
-
make即可编译,如果提示arm-none-eabi-gcc工具链没有找到,请按上面的操作,先把 arm gcc 工具链配置好 -
编译完成后,就可以运行 qemu realview-pbx-a9 了
运行 qemu realview-pbx-a9
-
编写一个 qemu.sh 的 shell 脚本,内容如下,并
chmod +x qemu.sh设置可执行权限 -
其中
out/realview-pbx-a9/Huawei_LiteOS.bin是 qemurealview-pbx-a9的编译后的产物
#!/bin/bashqemu-system-arm -machine realview-pbx-a9 \-smp 4 -m 512M \-kernel out/realview-pbx-a9/Huawei_LiteOS.bin \-nographic
- 运行
./qemu.sh

- 进入了 LiteOS 的 shell,LiteOS 运行起来了
小结
-
本篇记录 了 LiteOS 在 qemu
realview-pbx-a9上的环境搭建、系统运行 -
后续继续熟悉 LiteOS,尝试使用 GDB 调试基于 qemu 的 LiteOS 内核,了解内核的启动流程、内核模块等
相关文章:
LiteOS qemu realview-pbx-a9 环境搭建与运行
前言 最近打算移植搭建 一些常见的 RTOS 的 qemu 开发学习环境,当前 RT-Thread、FreeRTOS 已经成功运行 qemu,LiteOS 初步验证可以正常 运行 qemu realview-pbx-a9,这里做个记录 首先学习或者研究 RTOS,只是看内核源码࿰…...
Kubernetes技术--Kubernetes架构组件以及核心概念
1.Kubernetes集群架构组件 搭建一个Kubernetes环境集群,其架构如下所示: 内容详解: Master:控制节点,指派任务、决策 Node:工作节点,实际干活的。 Master组件内容:...
拿来即用修改密码功能
<template><div><!-- 重置密码 --><el-dialogtitle"修改密码"v-model"state.resetPwdDialogVisible":showClose"state.firstLogin ! 1"width"550px"close"onCancel":close-on-click-modal"false&…...
违背原则才能写好代码(一)
如果我说,要写好代码,必须违背这些原则,我想所有人都会骂:疯子、胡说八道、哗众取宠,找打! 以前我也会骂那个疯子,但现在不会,而且我会肯定地、负责任地说:这是真的&…...
面试官眼中的理想候选人:如何成为他们的首选
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
ES6中的扩展运算符你真的会用吗?
本文不会具体介绍扩展运算符的基本用法。 只是分享在项目中踩坑的点。 你以为的扩展运算符只是复制的功能,其实会偷偷修改你的原数组 案例: 假如arr [...arr2] ,修改arr的值会改变arr2的值吗? 解决方案: case1 使用 arr […...
利用逻辑回归判断病人肺部是否发生病变
大家好,我是带我去滑雪! 判断肺部是否发生病变可以及早发现疾病、指导治疗和监测疾病进展,以及预防和促进肺部健康,定期进行肺部评估和检查对于保护肺健康、预防疾病和提高生活质量至关重要。本期将利用相关医学临床数据结合逻辑回…...
全民健康生活方式行动日,天猫健康联合三诺生物推出“15天持续测糖计划”
糖尿病是全球高发慢性病中患病人数增长最快的疾病,是导致心血管疾病、失明、肾衰竭以及截肢等重大疾病的主要病因之一。目前中国有近1.4亿成人糖尿病患者,科学的血糖监测和健康管理对于糖尿病患者来说至关重要。 在9月1日全民健康生活方式行动日前夕&am…...
设计模式行为型-状态模式
文章目录 简介状态模式基础定义状态接口或抽象类实现具体状态类 上下文类与状态转换上下文类的定义和作用状态转换及触发条件 状态模式的优势与适用性优点一:可维护的代码优点二:清晰的状态管理适用场景一:对象拥有多个状态适用场景二&#x…...
弹窗、抽屉、页面跳转区别 | web交互入门
当用户点击或触发浏览页面的某个操作,有很多web交互方式,可以大致分为弹窗、抽屉、跳转新页面三种web交互方式。虽然这三种web交互方式看起来没什么不同,但实际上弹窗、抽屉、跳转新页面对交互体验有蛮大的影响。 这需要UI\UX设计师针对不同…...
说说Flink运行模式
分析&回答 1.开发者模式 在idea中运行Flink程序的方式就是开发模式。 2.local-cluster模式 Flink中的Local-cluster(本地集群)模式,单节点运行,主要用于测试, 学习。 3.Standalone模式 独立集群模式,由Flink自身提供计算资源。 4.Yarn模式 把Fl…...
视频汇聚/视频云存储/视频监控管理平台EasyCVR新增首次登录强制修改密码
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚平台既具…...
C语言控制语句——分支语句
条件语句用来根据不同的条件来执行不同的语句,C语言中常用的条件语句包括if语句和switch语句。 if 语句 语法格式: if (条件) {条件成立时,要做的事…… }案例需求: 定义一个整数变量记录年龄判断是否满 18 岁 (>…...
音视频 fmpeg命令裁剪和合并视频
一、生成测试文件 找三个不同的视频每个视频截取10秒内容 ffmpeg -i 沙海02.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4 ffmpeg -i 复仇者联盟3.mp4 -ss 00:05:00 -t 10 -codec copy 2.mp4 ffmpeg -i 红海行动.mp4 -ss 00:05:00 -t 10 -codec copy 3.mp4如果音视频格式不统一…...
机器学习基础17-基于波士顿房价(Boston House Price)数据集训练模型的整个过程讲解
机器学习是一项经验技能,实践是掌握机器学习、提高利用机器学习 解决问题的能力的有效方法之一。那么如何通过机器学习来解决问题呢? 本节将通过一个实例来一步一步地介绍一个回归问题。 本章主要介绍以下内容: 如何端到端地完成一个回归问题…...
哈希的应用——布隆过滤器
✅<1>主页::我的代码爱吃辣 📃<2>知识讲解:数据结构——位图 ☂️<3>开发环境:Visual Studio 2022 💬<4>前言:布隆过滤器是由布隆(Burton Howard Bloom&…...
LNMT的多机部署和双机热备
目录 一、环境 二、配置tomcat 三、配置nfs共享 四、配置nginx 1、两台都需要折磨配置 2、在http下面插入这两条信息 五、配置keepalived 1、安装 2、重新启动一下keepalived查看IP 六、验证双机热备 1、查看调度器备的IP,ip漂移说明keepalived生效 2、访…...
软件测试/测试开发丨Pytest和Allure报告 学习笔记
点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/26755 Pytest 命名规则 类型规则文件test_开头 或者 _test 结尾类Test 开头方法/函数test_开头注意:测试类中不可以添加__init__构造函数 注…...
十七、命令模式
一、什么是命令模式 命令(Command)模式的定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。 命令…...
服务器安装 anaconda 及 conda: command not found [解决方案]
[解决方案] conda: command not found Anaconda3 安装conda: command not found Anaconda3 安装 由于连接的服务器,无法直接在anaconda官网上下载安装文件,所以使用如下方法: wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Li…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...
【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...
云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
