LiteOS qemu realview-pbx-a9 环境搭建与运行

news2024/11/16 23:45:03

前言

  • 最近打算移植搭建 一些常见的 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.config realview-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.bz2 gcc-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 是 qemu realview-pbx-a9 的编译后的产物

#!/bin/bash

qemu-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 内核,了解内核的启动流程、内核模块等

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SNN论文总结

Is SNN a great work ? Is SNN a convolutional work ? ANN的量化在SNN中是怎么体现的,和threshold有关系吗,threshold可训练和这个有关吗(应该无关) 解决过发放不发放的问题。 Intuation SNN编码方式 Image to spike patter…

性能优化维度

CPU 首先检查 cpu,cpu 使用率要提升而不是降低。其次CPU 空闲并不一定是没事做,也有可能是锁或者外部资源瓶颈。常用top、vmstat命令查看信息。 vmstat 命令: top: 命令 IO iostat 命令: Memory free 命令: 温馨提示&#xff1a…

Qt应用开发(基础篇)——日历 QCalendarWidget

一、前言 QCalendarWidget类继承于QWidget,是Qt设计用来让用户更直观的选择日期的窗口部件。 时间微调输入框 QCalendarWidget根据年份和月份初始化,程序员也通过提供公共函数去改变他们,默认日期为当前的系统时间,用户通过鼠标和…

《C语言编程环境搭建》工欲善其事 必先利其器

C语言编译器 GCC 系列 GNU编译器套装(英语:GNU Compiler Collection,缩写为GCC),指一套编程语言编译器,常被认为是跨平台编译器的事实标准。原名是:GNU C语言编译器(GNU C Compiler)。 MinGW 又称mingw32 &#xff0c…

C语言练习5(巩固提升)

C语言练习5 选择题 选择题 1&#xff0c;下面代码的结果是&#xff1a;( ) #include <stdio.h> #include <string.h> int main() {char arr[] { b, i, t };printf("%d\n", strlen(arr));return 0; }A.3 B.4 C.随机值 D.5 &#x1f4af;答案解析&#…

Unittest 笔记:unittest拓展生成HTM报告

HTMLTestRunner 是一个unitest拓展可以生成HTML 报告 下载地址&#xff1a;GitHub: https://github.com/defnnig/HTMLTestRunner HTMLTestRunner是一个独立的py文件&#xff0c;可以放在Lib 作为第三方模块使用或者作为项目的一部分。 方式1&#xff1a; 验证是否安装成功&…

Navicat下载安装使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

基于oracle数据库存储过程的创建及调用

基于oracle数据库存储过程的创建及调用 教学大纲&#xff1a; PLSQL编程&#xff1a;Hello World、程序结构、变量、流程控制、游标.存储过程&#xff1a;概念、无参存储、有参存储&#xff08;输入、输出&#xff09;.JAVA调用存储存储过程. 1. PLSQL编程 1.1. 概念和目的…

力扣真题:无重复字符的最长子串(三种方法)

这道题我一开始使用了Set加类似滑动窗口的方法&#xff0c;最后解得出来&#xff0c;但效率不尽人意&#xff0c;最后经过几次修改&#xff0c;最终用到是滑动窗口指针数组的方式讲效果达到最优&#xff0c;超过近99%的代码。 1、第一版 class Solution {public int lengthOf…

python 双向链表

双向链表基本介绍 双向链表增删改查操作思路分析 双向链表增删改查操作代码实现 """ 双向链表的增删改查 """# 英雄类 class HeroNode:next None # 指向下一个节点&#xff0c;默认为空pre None # 指向前一个节点&#xff0c;默认为空def …

STM32 CubeMX (H750)RGB屏幕 LTDC

STM32 CubeMX STM32 RGB888 LTDC STM32 CubeMX一、STM32 CubeMX 设置时钟树LTDC使能设置屏幕参数修改RGB888的GPIO 二、代码部分效果 RGB屏幕线束定义&#xff1a; 一、STM32 CubeMX 设置 时钟树 这里设置的时钟&#xff0c;关于刷新速度 举例子&#xff1a;LCD_CLK24MHz 时…

福利之舞:员工的心跳与企业的平衡术

引言&#xff1a;员工福利与满意度的关系 在现代企业中&#xff0c;员工福利已经不仅仅是一种待遇&#xff0c;而是与员工满意度、忠诚度和生产力紧密相连的关键因素。一个合理且吸引人的福利制度可以大大提高员工的工作积极性&#xff0c;同时也能够吸引和留住顶尖的人才。但…

ElasticSearch(一)数据类型

ElasticSearch&#xff08;一&#xff09;数据类型 1.简述 Es数据类型分为基础数据类型和复杂类型数据&#xff0c;掌握ES数据类型才能进一步使用ES检索数据内容。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

【MySQL系列】Select语句单表查询详解入门(SELECT,AS,模糊查询,运算符,逻辑运算符)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

【80天学习完《深入理解计算机系统》】第十一天 3.5 过程(函数调用)

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

【JAVA】String 类

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; String 1. 字符串构造2. String对象的比…

快速封禁大法--东方日报JS解密过程

破解难点&#xff1a; 1.所有接口参数都有时间限制&#xff0c;且与当前加载页面绑定&#xff0c;参数无法在短期内复用 2. token参数破解&#xff1a;点击翻页时第一个加载的接口&#xff0c;会返回一个token&#xff08;详见&#xff1a;get_token() 函数内容&#xff09; 3.…

lab8 lock

PreRead 第六章3.5节&#xff1a;物理内存分配器8.1-8.3 文章目录 PreReadMemory allocatortaskshints思路 Buffer cachetaskhints思路实现 这次的lab&#xff0c;本质上都是通过将锁的粒度减小来获得性能的提升 第一个task&#xff0c;可以简单地按cpu划分&#xff0c;因为本…

Python Opencv实践 - Sobel边缘检测

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_GRAYSCALE) print(img.shape)#Sobel边缘检测 #cv.sobel( src, ddepth, dx, dy[,ksize[, scale[, delta[, borderType]]]] ) #src:…

当面临在职备考不确定性的结果时,你可能需要闭着眼冲一下

提前批面试在某种程度上像是联考分流幕后的那只无形之手&#xff0c;既助长了拿到优秀资格考生的备考热情&#xff0c;又打击了提面落榜考生的笔试自信心。就在这样的局面下&#xff0c;使得项目最终完成了联考前的分流操作。但如果你还是遵从自己的本心的话&#xff0c;就应该…